{"openapi":"3.0.1","info":{"title":"Configuration operator Iopole API","description":"## Iopole API\n\nTo use the Iopole APIs, you must have a **`clientId`** and a **`clientSecret`**.\n\nYou can obtain these credentials by one of the following methods:\n- 📧 Contact the Iopole team at **support@iopole.com**\n- 🧪 Connect to **[Iopole Labs](https://labs.iopole.io)** to create your own sandbox environment\n\n### 📚 API Documentation\n- 🧪 **Preproduction**: [https://docs.ppd.iopole.fr/](https://docs.ppd.iopole.fr/)\n- 🚀 **Production**: [https://docs.iopole.com/](https://docs.iopole.com/)\n\n### 🛠️ Support & Monitoring (production only)\n- 📈 **System status**: [https://uptime.iopole.com](https://uptime.iopole.com)\n  - View real-time platform availability\n  - Subscribe to incident notifications\n  - Receive alerts for planned maintenance periods\n- 📝 **Release notes**: [https://release.iopole.com](https://release.iopole.com)\n","version":"1.0.0","contact":{"name":"Iopole","email":"support@iopole.com"},"x-doc":{"text":"## Iopole API\n\nTo use the Iopole APIs, you must have a **`clientId`** and a **`clientSecret`**.\n\nYou can obtain these credentials by one of the following methods:\n- 📧 Contact the Iopole team at **support@iopole.com**\n- 🧪 Connect to **[Iopole Labs](https://labs.iopole.io)** to create your own sandbox environment\n\n### 📚 API Documentation\n- 🧪 **Preproduction**: [https://docs.ppd.iopole.fr/](https://docs.ppd.iopole.fr/)\n- 🚀 **Production**: [https://docs.iopole.com/](https://docs.iopole.com/)\n\n### 🛠️ Support & Monitoring (production only)\n- 📈 **System status**: [https://uptime.iopole.com](https://uptime.iopole.com)\n  - View real-time platform availability\n  - Subscribe to incident notifications\n  - Receive alerts for planned maintenance periods\n- 📝 **Release notes**: [https://release.iopole.com](https://release.iopole.com)\n"}},"security":[{"oauth2ClientCredentials":[]}],"components":{"securitySchemes":{"oauth2ClientCredentials":{"type":"oauth2","flows":{"clientCredentials":{"tokenUrl":"https://auth.preprod.iopole.fr/realms/iopole/protocol/openid-connect/token","scopes":{}}}}}},"paths":{"/v1/config/customer/id":{"get":{"summary":"Retrieve the current operator customer id","tags":["Operator User"],"security":[{"oauth2ClientCredentials":[]}],"responses":{"200":{"description":"Current operator uuid","content":{"application/json":{"schema":{"type":"string","format":"uuid"}}},"x-doc":{"text":"Current operator uuid"}},"400":{"description":"Validation - Request validation failure.","x-doc":{"text":"Validation - Request validation failure."}},"401":{"description":"Unauthorized - Authentication is required and has failed or has not yet been provided.","x-doc":{"text":"Unauthorized - Authentication is required and has failed or has not yet been provided."}},"403":{"description":"Forbidden - The server understood the request, but it refuses to authorize it.","x-doc":{"text":"Forbidden - The server understood the request, but it refuses to authorize it."}},"404":{"description":"Business entity not found for given id","x-doc":{"text":"Business entity not found for given id"}}}}},"/v1/config/business/entity":{"get":{"summary":"Retrieve list of operator business entity","description":"🎯 **Purpose**\n\nRetrieve the list of **business entities owned and managed by the current operator**.\n\n🏢 **Operator business entities directory**\n\nThis endpoint represents the operator’s **internal directory**.\nUse this endpoint to **list and manage the business entities** associated with the authenticated operator.\n","tags":["Operator Business Entity Directory"],"security":[{"oauth2ClientCredentials":[]}],"parameters":[{"in":"header","name":"customer-id","description":"The unique identifier for the customer.","required":false,"schema":{"type":"string","format":"uuid"},"x-doc":{"text":"The unique identifier for the customer."}},{"in":"query","name":"q","required":false,"description":"🔎 **Search query**\n\nDefine the **search expression** used to filter the operator's business entities.\nThe query syntax and supported operators are described here:\n- 📘 [Search usage](https://docs.ppd.iopole.fr/docs/iopole-api/search)\n\n> ✍️ **Examples**\n> \n> - Search by entity identifier: `identifierValue:\"123456789\"`\n> - Search by identifier and country: `identifierValue:\"123456789\" AND country:\"FR\"`\n> - Search by name with wildcard and entity type: `name:\"HEL*\" AND type:\"LEGAL_UNIT\"`\n> - List the addresses still to be released from Peppol: `directoryStatus:\"PENDING_PEPPOL_RELEASE\"`","schema":{"type":"string"},"x-doc":{"text":"Search query","mdLink":"[Refer to page filter](../../search)","childCloseName":"Hide available field","childOpenName":"Open available field","child":[{"label":"name","type":"string","text":"Corporate name of the company. Search is case insensitive. Supports the wildcard character '*'. A minimum of 3 characters is required.","valueDescription":"Minimum 3 characters (without wildcard)"},{"label":"identifierScheme","type":"string","text":"The business entity identifier scheme.","valueDescription":"Must be a 4 digit string"},{"label":"identifierValue","type":"string","text":"Legal identifier of the company"},{"label":"country","type":"string (2 char)","text":"Country ISO code","link":{"placeholder":"Country iso code list","link":"https://en.wikipedia.org/wiki/ISO_3166-1_alpha-2#Officially_assigned_code_elements"}},{"label":"directoryStatus","type":"enum","text":"Pending state of the entity network registrations. Returns the entities holding at least one registration in that state.","array":[{"code":"PENDING_PEPPOL_RELEASE","label":"The address was removed from the French directory by the PPF, or its validity period ended, but it is still registered in our Peppol SMP so incoming invoices keep being routed. It is settled once the address is explicitly unregistered or registered again."}]},{"label":"type","type":"enum","text":"Company's type","array":[{"code":"LEGAL_UNIT","label":"Represents a distinct legal entity, such as a legally registered entity with a unique identifier."},{"code":"OFFICE","label":"Refers to a specific physical or operational location within a legal unit, such as a branch, department, or regional office."}]}]}},{"in":"query","name":"offset","description":"⏭️ **Offset** : Starting position in the result set\n\n**Default / Min / Max:** 0 / 0 / 1000\n⚠️Large offset values may impact performance\n\n**Example**\n`offset=500&limit=100` → skips 500 records and returns the next 100.","required":false,"schema":{"type":"integer"},"x-doc":{"text":"Starting position in the result set","more":"Default: 0 — Min: 0 — Max: 1000. Large offset values may impact performance."}},{"in":"query","name":"limit","description":"🔢 **Limit** : Maximum number of records returned\n\n**Default / Min / Max:** 50 / 1 / 200\n\n**Example:** `offset=0&limit=50`\nReturns the first 50 records.","required":false,"schema":{"type":"integer"},"x-doc":{"text":"Maximum number of records returned","more":"Default: 50 — Min: 1 — Max: 200."}}],"responses":{"200":{"description":"Retrieve list of business entity matching given criteria","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"array","items":{"type":"object","properties":{"businessEntityId":{"type":"string","format":"uuid","description":"Unique identifier for the business entity.","x-doc":{"text":"Unique identifier for the business entity."}},"name":{"type":"string","description":"Name of the business entity.","x-doc":{"text":"Name of the business entity."}},"country":{"type":"string","enum":["1A","AD","AE","AF","AG","AI","AL","AM","AO","AQ","AR","AS","AT","AU","AW","AX","AZ","BA","BB","BD","BE","BF","BG","BH","BI","BJ","BL","BM","BN","BO","BQ","BR","BS","BT","BV","BW","BY","BZ","CA","CC","CD","CF","CG","CH","CI","CK","CL","CM","CN","CO","CR","CU","CV","CW","CX","CY","CZ","DE","DJ","DK","DM","DO","DZ","EC","EE","EG","EH","ER","ES","ET","FI","FJ","FK","FM","FO","FR","GA","GB","GD","GE","GF","GG","GH","GI","GL","GM","GN","GP","GQ","GR","GS","GT","GU","GW","GY","HK","HM","HN","HR","HT","HU","ID","IE","IL","IM","IN","IO","IQ","IR","IS","IT","JE","JM","JO","JP","KE","KG","KH","KI","KM","KN","KP","KR","KW","KY","KZ","LA","LB","LC","LI","LK","LR","LS","LT","LU","LV","LY","MA","MC","MD","ME","MF","MG","MH","MK","ML","MM","MN","MO","MP","MQ","MR","MS","MT","MU","MV","MW","MX","MY","MZ","NA","NC","NE","NF","NG","NI","NL","NO","NP","NR","NU","NZ","OM","PA","PE","PF","PG","PH","PK","PL","PM","PN","PR","PS","PT","PW","PY","QA","RE","RO","RS","RU","RW","SA","SB","SC","SD","SE","SG","SH","SI","SJ","SK","SL","SM","SN","SO","SR","SS","ST","SV","SX","SY","SZ","TC","TD","TF","TG","TH","TJ","TK","TL","TM","TN","TO","TR","TT","TV","TW","TZ","UA","UG","UM","US","UY","UZ","VA","VC","VE","VG","VI","VN","VU","WF","WS","XI","YE","YT","ZA","ZM","ZW"]},"vatRegime":{"type":"string","enum":["REAL_MONTHLY_TAX_REGIME","REAL_QUARTERLY_TAX_REGIME","SIMPLIFIED_TAX_REGIME","VAT_EXEMPTION_REGIME"],"description":"French VAT regime of the business entity.","x-doc":{"text":"French VAT regime of the business entity.","array":[{"code":"REAL_MONTHLY_TAX_REGIME","label":"Real normal tax regime with monthly VAT declarations."},{"code":"REAL_QUARTERLY_TAX_REGIME","label":"Real normal tax regime with quarterly VAT declarations."},{"code":"SIMPLIFIED_TAX_REGIME","label":"Simplified tax regime with annual VAT declarations."},{"code":"VAT_EXEMPTION_REGIME","label":"VAT exemption regime (franchise en base de TVA)."}]}},"nextVatRegime":{"type":"string","enum":["REAL_MONTHLY_TAX_REGIME","REAL_QUARTERLY_TAX_REGIME","SIMPLIFIED_TAX_REGIME","VAT_EXEMPTION_REGIME"],"description":"Pending VAT regime, effective on the next Feb 1st, if a change is currently blocked by an active e-reporting report.","x-doc":{"text":"Pending VAT regime, effective on the next Feb 1st, if a change is currently blocked by an active e-reporting report."}},"type":{"type":"string","nullable":true,"enum":["LEGAL_UNIT","OFFICE"],"description":"The type of the business entity.","x-doc":{"text":"The type of the business entity.","array":[{"code":"LEGAL_UNIT","label":"Legal unit business entity."},{"code":"OFFICE","label":"Office or establishment of a legal unit."}]}},"scope":{"type":"string","enum":["PRIVATE_TAX_PAYER","PUBLIC","PRIMARY","SECONDARY"],"description":"Scope of the office or legal unit business entity.","x-doc":{"text":"Scope of the office or legal unit business entity.","array":[{"code":"PRIVATE_TAX_PAYER","label":"A private sector taxpayer (company or individual)."},{"code":"PUBLIC","label":"A public sector entity (government or administration)."},{"code":"PRIMARY","label":"The primary (head) establishment of a legal unit."},{"code":"SECONDARY","label":"A secondary establishment (branch) of a legal unit."}]}},"identifierScheme":{"type":"string","description":"The EAS code (Endpoint Address Scheme) identifies the type of identifier used for parties in electronic invoicing.","x-doc":{"text":"The EAS code (Endpoint Address Scheme) identifies the type of identifier used for parties in electronic invoicing.","more":"Once on the European Commission's webpage, download the latest version of the XLSX file containing the EAS codes. Example: for a French company it can be 0002 (SIREN).","link":{"placeholder":"EAS code list","link":"https://ec.europa.eu/digital-building-blocks/sites/display/DIGITAL/Registry+of+supporting+artefacts+to+implement+EN16931"}}},"identifierValue":{"type":"string","description":"The value of the electronic address.","x-doc":{"text":"The value of the electronic address."}},"countryIdentifier":{"type":"object","properties":{"siren":{"type":"string"},"siret":{"type":"string"}},"description":"Country-specific identifiers (FR only).","x-doc":{"text":"Country-specific identifiers (FR only)."}},"legalUnit":{"type":"object","properties":{"businessEntityId":{"type":"string","format":"uuid"},"name":{"type":"string"}},"required":["businessEntityId","name"],"description":"Parent legal unit (offices only).","x-doc":{"text":"Parent legal unit (offices only)."}},"postalAddress":{"type":"object","properties":{"countrySubdivision":{"type":"string","description":"The country subdivision (optional).","x-doc":{"text":"The country subdivision (optional)."}},"city":{"type":"string","description":"The name of the city.","x-doc":{"text":"The name of the city."}},"postalCode":{"type":"string","description":"The postal code of the address.","x-doc":{"text":"The postal code of the address."}},"addressLine1":{"type":"string","description":"The first line of the address.","x-doc":{"text":"The first line of the address."}},"addressLine2":{"type":"string","description":"The second line of the address (optional).","x-doc":{"text":"The second line of the address (optional)."}},"addressLine3":{"type":"string","description":"The third line of the address (optional).","x-doc":{"text":"The third line of the address (optional)."}}},"required":["city","postalCode","addressLine1"]},"disclosureStatus":{"type":"string","enum":["Public","Restricted","NoSolicitation"],"description":"Defines how information about the entity may be disclosed: Public = fully disclosable, Restricted = partially disclosable, NoSolicitation = refuses commercial prospecting.","x-doc":{"text":"Defines how information about the entity may be disclosed: Public = fully disclosable, Restricted = partially disclosable, NoSolicitation = refuses commercial prospecting."}},"chorusPro":{"type":"object","properties":{"engagementJuridique":{"type":"boolean","description":"Whether the public entity requires a legal commitment number (engagement juridique) to be provided on invoices.","x-doc":{"text":"Whether the public entity requires a legal commitment number (engagement juridique) to be provided on invoices."}},"service":{"type":"boolean","description":"Whether the public entity requires a service code to be provided on invoices.","x-doc":{"text":"Whether the public entity requires a service code to be provided on invoices."}},"engJurServ":{"type":"boolean","description":"Whether the public entity requires either a service code or a legal commitment number on invoices.","x-doc":{"text":"Whether the public entity requires either a service code or a legal commitment number on invoices."}},"moa":{"type":"boolean","description":"Whether the public entity acts as a contracting authority (MOA - Maîtrise d’Ouvrage) and receives construction-work invoices in addition to standard invoices.","x-doc":{"text":"Whether the public entity acts as a contracting authority (MOA - Maîtrise d’Ouvrage) and receives construction-work invoices in addition to standard invoices."}},"moaUnique":{"type":"boolean","description":"Whether the public entity exclusively acts as a contracting authority (MOA) and therefore only receives construction-work invoices.","x-doc":{"text":"Whether the public entity exclusively acts as a contracting authority (MOA) and therefore only receives construction-work invoices."}},"statutMiseEnPaiement":{"type":"boolean","description":"Whether the public entity manages and publishes invoice payment status information.","x-doc":{"text":"Whether the public entity manages and publishes invoice payment status information."}}},"description":"Chorus Pro specific requirements and capabilities for French public sector entities.","x-doc":{"text":"Chorus Pro specific requirements and capabilities for French public sector entities."}},"operatorRelation":{"type":"object","properties":{"data":{"type":"object","properties":{"header":{"type":"array","items":{"type":"object","properties":{"key":{"type":"string","minLength":1,"pattern":"^[!#$%&'*+.^_`|~0-9A-Za-z-]+$"},"value":{"type":"string","minLength":1,"pattern":"^\\S+$"}},"required":["key","value"]},"maxItems":5,"description":"Will be added to the webhook request into the header.","x-doc":{"text":"Will be added to the webhook request into the header."}},"query":{"type":"array","items":{"type":"object","properties":{"key":{"type":"string","minLength":1,"pattern":"^[!#$%&'*+.^_`|~0-9A-Za-z-]+$"},"value":{"type":"string","minLength":1,"pattern":"^\\S+$"}},"required":["key","value"]},"maxItems":5,"description":"Will be added to the webhook request as query parameter.","x-doc":{"text":"Will be added to the webhook request as query parameter."}},"param":{"type":"array","items":{"type":"object","properties":{"key":{"type":"string","pattern":"^:"},"value":{"type":"string","minLength":1,"pattern":"^\\S+$"}},"required":["key","value"]},"maxItems":3,"description":"Will be added to the webhook request as path parameter.","x-doc":{"text":"Will be added to the webhook request as path parameter.","more":"Use the :$key format for keys. Example: { key: \":companyId\", value: \"123456789\" }"}},"custom":{"type":"object","additionalProperties":{"nullable":true}}},"description":"Any kind of specific data","x-doc":{"text":"Any kind of specific data","more":"Included in the webhook payload sent to your endpoint."}},"direction":{"type":"string","nullable":true,"enum":["OUTBOUND","INBOUND"],"description":"Optional direction filter for the business entity relation (bidirectional if null or omitted).","x-doc":{"text":"Optional direction filter for the business entity relation (bidirectional if null or omitted).","array":[{"code":"OUTBOUND","label":"An invoice or status issued to a customer or client"},{"code":"INBOUND","label":"An invoice or status received from a supplier or vendor"}]}}}},"identifiers":{"type":"array","items":{"type":"object","properties":{"businessEntityIdentifierId":{"type":"string","format":"uuid","description":"Unique identifier for the identifier.","x-doc":{"text":"Unique identifier for the identifier."}},"type":{"type":"string","enum":["LEGAL_IDENTIFIER","OFFICE_IDENTIFIER","ROUTING_CODE","SUFFIX"],"description":"Type of identifier.","x-doc":{"text":"Type of identifier.","array":[{"code":"LEGAL_IDENTIFIER","label":"Identifier representing a legal unit."},{"code":"OFFICE_IDENTIFIER","label":"Identifier representing an office (establishment)."},{"code":"ROUTING_CODE","label":"Routing code used for invoice delivery."},{"code":"SUFFIX","label":"Suffix appended to an identifier for routing purposes."}]}},"scheme":{"type":"string","pattern":"^\\d{4}$","description":"Scheme of the identifier.","x-doc":{"text":"Scheme of the identifier."}},"value":{"type":"string","pattern":"^[a-zA-Z0-9-_]+$","description":"Value of the identifier.","x-doc":{"text":"Value of the identifier."}},"label":{"type":"string","description":"Label of the identifier.","x-doc":{"text":"Label of the identifier."}},"networkRegistered":{"type":"array","items":{"type":"object","properties":{"directoryId":{"type":"string","format":"uuid","description":"Unique identifier for the directory entry.","x-doc":{"text":"Unique identifier for the directory entry."}},"networkId":{"type":"string","format":"uuid","description":"Unique identifier for the registered network.","x-doc":{"text":"Unique identifier for the registered network."}},"networkIdentifier":{"type":"string","enum":["DOMESTIC_FR","PEPPOL_INTERNATIONAL"],"description":"The registered network.","x-doc":{"text":"The registered network.","array":[{"code":"DOMESTIC_FR","label":"French domestic e-invoicing network (PPF/PDP)."},{"code":"PEPPOL_INTERNATIONAL","label":"Peppol international e-invoicing network."}]}},"directoryAddress":{"type":"string","description":"Address used in the network to identify the business entity","x-doc":{"text":"Address used in the network to identify the business entity"}},"isSelfBilling":{"type":"boolean","description":"Whether this network registration accepts self-billing invoices.","x-doc":{"text":"Whether this network registration accepts self-billing invoices."}},"status":{"type":"string","enum":["PENDING_PEPPOL_RELEASE"],"description":"Pending state of the registration, absent when the registration is settled.","x-doc":{"text":"Pending state of the registration, absent when the registration is settled.","array":[{"code":"PENDING_PEPPOL_RELEASE","label":"The address was removed from the French directory by the PPF, or its validity period ended, but it is still registered in our Peppol SMP so incoming invoices keep being routed. It is settled once the address is explicitly unregistered or registered again."}]}},"validFrom":{"type":"string","description":"Address validity start date (White Label ONLY)","x-doc":{"text":"Address validity start date (White Label ONLY)"}},"validTo":{"type":"string","description":"Address validity end date (White Label ONLY)","x-doc":{"text":"Address validity end date (White Label ONLY)"}},"platformDetail":{"type":"object","properties":{"name":{"type":"string"},"legalIdentifier":{"type":"string"},"contact":{"type":"string"}},"required":["name","legalIdentifier","contact"],"additionalProperties":false,"description":"Linked platform details (White Label ONLY)","x-doc":{"text":"Linked platform details (White Label ONLY)"}}},"required":["directoryId","networkId","networkIdentifier","directoryAddress"]},"description":"List of registered networks.","x-doc":{"text":"List of registered networks."}},"postalAddress":{"type":"object","properties":{"countrySubdivision":{"type":"string","description":"The country subdivision (optional).","x-doc":{"text":"The country subdivision (optional)."}},"city":{"type":"string","description":"The name of the city.","x-doc":{"text":"The name of the city."}},"postalCode":{"type":"string","description":"The postal code of the address.","x-doc":{"text":"The postal code of the address."}},"addressLine1":{"type":"string","description":"The first line of the address.","x-doc":{"text":"The first line of the address."}},"addressLine2":{"type":"string","description":"The second line of the address (optional).","x-doc":{"text":"The second line of the address (optional)."}},"addressLine3":{"type":"string","description":"The third line of the address (optional).","x-doc":{"text":"The third line of the address (optional)."}}},"required":["city","postalCode","addressLine1"],"description":"Only available on some French routing code","x-doc":{"text":"Only available on some French routing code"}}},"required":["businessEntityIdentifierId","type","scheme","value"]},"description":"List of business entity identifiers.","x-doc":{"text":"List of business entity identifiers."}}},"required":["businessEntityId","name","country","type","scope","identifierScheme","identifierValue","identifiers"]}},"meta":{"type":"object","properties":{"offset":{"type":"number"},"limit":{"type":"number"},"count":{"type":"number"}},"required":["offset","limit","count"]}},"required":["data","meta"]},"examples":{"businessEntitySearchExampleResponse":{"summary":"List of business entity found for given criteria","value":{"data":[{"businessEntityId":"01944585-4c91-7602-8def-c7072c80648d","name":"HELIO PROJETS","type":"OFFICE","vatRegime":"REAL_MONTHLY_TAX_REGIME","scope":"PRIMARY","country":"FR","identifierScheme":"0009","identifierValue":"00735010100031","countryIdentifier":{"siren":"007350101","siret":"00735010100031"},"postalAddress":{"city":"MONTPELLIER","postalCode":"34000","addressLine1":"RUE EUGENE LISBONNE"},"legalUnit":{"businessEntityId":"01944583-ae33-7285-b62d-91737a7dcf56","name":"HELIO PROJETS"},"identifiers":[{"businessEntityIdentifierId":"01944585-4c93-7598-8a39-953f8538586c","type":"OFFICE_IDENTIFIER","scheme":"0009","value":"00735010100031"},{"businessEntityIdentifierId":"01944a40-1d21-767f-9045-40ae138f7cf4","type":"ROUTING_CODE","scheme":"0224","value":"Service A","postalAddress":{"countrySubdivision":"Herault","city":"Montpellier","postalCode":"34000","addressLine1":"line 1","addressLine2":"line 2","addressLine3":"line 3"}}]},{"businessEntityId":"01944583-aec0-70e8-96e0-6c3e5c0fadbe","name":"DE COPROPRIETE","type":"LEGAL_UNIT","vatRegime":"REAL_QUARTERLY_TAX_REGIME","scope":"PRIVATE_TAX_PAYER","country":"FR","identifierScheme":"0002","identifierValue":"017402504","countryIdentifier":{"siren":"017402504","siret":"017402504"},"identifiers":[{"businessEntityIdentifierId":"01944583-aec3-778f-a63e-5983a01cf3b6","type":"LEGAL_IDENTIFIER","scheme":"0002","value":"017402504"}]},{"businessEntityId":"01944acd-a412-71b9-856d-f583c74a2236","name":"IOPOLE Belgique","type":"LEGAL_UNIT","vatRegime":"SIMPLIFIED_TAX_REGIME","scope":"PRIVATE_TAX_PAYER","country":"BE","identifierScheme":"0208","identifierValue":"0114445670 (BCE)","identifiers":[{"businessEntityIdentifierId":"01944acd-a431-750e-9510-d8f454b0002d","type":"OFFICE_IDENTIFIER","scheme":"0208","value":"0114445670 (BCE)"}]},{"businessEntityId":"01944583-afca-77d8-b33f-88de7bc1b258","name":"COPRO *SEIZE AV D ASSAS","type":"LEGAL_UNIT","vatRegime":"VAT_EXEMPTION_REGIME","scope":"PRIVATE_TAX_PAYER","country":"FR","identifierScheme":"0002","identifierValue":"017407297","countryIdentifier":{"siren":"017407297","siret":"017407297"},"identifiers":[{"businessEntityIdentifierId":"01944583-afcb-7018-ab6b-12afd2800a5d","type":"LEGAL_IDENTIFIER","scheme":"0002","value":"017407297"}]},{"businessEntityId":"01944583-af43-71ff-986c-0e1b98c8eefd","name":"LE BARTHELEMY","type":"LEGAL_UNIT","vatRegime":"REAL_MONTHLY_TAX_REGIME","scope":"PRIVATE_TAX_PAYER","country":"FR","identifierScheme":"0002","identifierValue":"017403692","countryIdentifier":{"siren":"017403692","siret":"017403692"},"identifiers":[{"businessEntityIdentifierId":"01944583-af46-7406-bc16-97613ae37765","type":"LEGAL_IDENTIFIER","scheme":"0002","value":"017403692"}]},{"businessEntityId":"01944b67-4517-76df-9e56-2411eb37f2ac","name":"TEST","type":"LEGAL_UNIT","vatRegime":"REAL_QUARTERLY_TAX_REGIME","scope":"PRIVATE_TAX_PAYER","country":"BE","identifierScheme":"0002","identifierValue":"aazdazdazdazd","identifiers":[{"businessEntityIdentifierId":"01944b67-451f-73b6-97b3-4c40ed2c6a16","type":"OFFICE_IDENTIFIER","scheme":"0002","value":"aazdazdazdazd"}]},{"businessEntityId":"01944b67-a146-7018-b65e-5bfecbafd111","name":"TEST","type":"LEGAL_UNIT","vatRegime":"SIMPLIFIED_TAX_REGIME","scope":"PRIVATE_TAX_PAYER","country":"BE","identifierScheme":"0003","identifierValue":"rrrzdazdazdazd","identifiers":[{"businessEntityIdentifierId":"01944b67-a149-767d-bc91-b6fc7ae2322a","type":"OFFICE_IDENTIFIER","scheme":"0003","value":"rrrzdazdazdazd"}]},{"businessEntityId":"01944b6d-c1d1-77ed-bd36-c5f09e36364f","name":"TEST","type":"OFFICE","vatRegime":"VAT_EXEMPTION_REGIME","scope":"PRIVATE_TAX_PAYER","country":"BE","identifierScheme":"0002","identifierValue":"azdazdazd","postalAddress":{"countrySubdivision":"azdazd","city":"azdazd","postalCode":"","addressLine1":"","addressLine2":"","addressLine3":""},"legalUnit":{},"identifiers":[{"businessEntityIdentifierId":"01944b6d-c1dd-745f-84bb-3c3cb402c287","type":"OFFICE_IDENTIFIER","scheme":"0002","value":"azdazdazd"}]},{"businessEntityId":"01944583-ae33-7285-b62d-91737a7dcf56","name":"HELIO PROJETS","type":"LEGAL_UNIT","vatRegime":"REAL_MONTHLY_TAX_REGIME","scope":"PRIVATE_TAX_PAYER","country":"FR","identifierScheme":"0002","identifierValue":"007350101","countryIdentifier":{"siren":"007350101","siret":"007350101"},"identifiers":[{"businessEntityIdentifierId":"01944583-ae40-770c-bd8c-7f7f801a18b0","type":"LEGAL_IDENTIFIER","scheme":"0002","value":"007350101"}]},{"businessEntityId":"01944b6f-8532-74bf-8bfd-a75b9cb84e7c","name":"TEST","type":"LEGAL_UNIT","vatRegime":"REAL_QUARTERLY_TAX_REGIME","scope":"PRIVATE_TAX_PAYER","country":"BE","identifierScheme":"0004","identifierValue":"aaaa","identifiers":[{"businessEntityIdentifierId":"01944b6f-8535-7726-98c6-64520c17465f","type":"OFFICE_IDENTIFIER","scheme":"0004","value":"aaaa"}]}],"meta":{"offset":0,"limit":50,"count":10}}}}}},"x-doc":{"text":"Retrieve list of business entity matching given criteria"}},"400":{"description":"Validation - Request validation failure.\n\nPossible error codes:\n- `BUSINESS_ENTITY_SEARCH_QUERY_PARSE_ERROR` — The Lucene query string could not be parsed or the search result could not be deserialized","x-doc":{"text":"Validation - Request validation failure.\n\nPossible error codes:\n- `BUSINESS_ENTITY_SEARCH_QUERY_PARSE_ERROR` — The Lucene query string could not be parsed or the search result could not be deserialized"}},"401":{"description":"Unauthorized - Authentication is required and has failed or has not yet been provided.","x-doc":{"text":"Unauthorized - Authentication is required and has failed or has not yet been provided."}},"403":{"description":"Forbidden - The server understood the request, but it refuses to authorize it.","x-doc":{"text":"Forbidden - The server understood the request, but it refuses to authorize it."}},"404":{"description":"Business entity not found for given criteria","x-doc":{"text":"Business entity not found for given criteria"}}},"x-doc":{"text":"🎯 **Purpose**\n\nRetrieve the list of **business entities owned and managed by the current operator**.\n\n🏢 **Operator business entities directory**\n\nThis endpoint represents the operator’s **internal directory**.\nUse this endpoint to **list and manage the business entities** associated with the authenticated operator.\n"}}},"/v1/config/business/entity/{businessEntityId}":{"get":{"summary":"Retrieve an operator business entity for a given id","description":"🎯 **Purpose**\n\nRetrieve the details of a **single business entity** identified by `businessEntityId`,\nowned and managed by the **current authenticated operator**.\n\n🏢 **Operator business entity directory**\n\nThis endpoint provides access to the operator’s **internal directory** for a specific business entity.\nUse this endpoint to **consult and manage the data** associated with the given business entity.\n","tags":["Operator Business Entity Directory"],"security":[{"oauth2ClientCredentials":[]}],"parameters":[{"in":"header","name":"customer-id","description":"The unique identifier for the customer.","required":false,"schema":{"type":"string","format":"uuid"},"x-doc":{"text":"The unique identifier for the customer."}},{"in":"path","name":"businessEntityId","description":"The business entity id.","required":true,"schema":{"type":"string","format":"uuid"},"x-doc":{"text":"The business entity id."}}],"responses":{"200":{"description":"Retrieve list of business entity matching given criteria","content":{"application/json":{"schema":{"type":"array","items":{"type":"object","properties":{"businessEntityId":{"type":"string","format":"uuid","description":"Unique identifier for the business entity.","x-doc":{"text":"Unique identifier for the business entity."}},"name":{"type":"string","description":"Name of the business entity.","x-doc":{"text":"Name of the business entity."}},"country":{"type":"string","enum":["1A","AD","AE","AF","AG","AI","AL","AM","AO","AQ","AR","AS","AT","AU","AW","AX","AZ","BA","BB","BD","BE","BF","BG","BH","BI","BJ","BL","BM","BN","BO","BQ","BR","BS","BT","BV","BW","BY","BZ","CA","CC","CD","CF","CG","CH","CI","CK","CL","CM","CN","CO","CR","CU","CV","CW","CX","CY","CZ","DE","DJ","DK","DM","DO","DZ","EC","EE","EG","EH","ER","ES","ET","FI","FJ","FK","FM","FO","FR","GA","GB","GD","GE","GF","GG","GH","GI","GL","GM","GN","GP","GQ","GR","GS","GT","GU","GW","GY","HK","HM","HN","HR","HT","HU","ID","IE","IL","IM","IN","IO","IQ","IR","IS","IT","JE","JM","JO","JP","KE","KG","KH","KI","KM","KN","KP","KR","KW","KY","KZ","LA","LB","LC","LI","LK","LR","LS","LT","LU","LV","LY","MA","MC","MD","ME","MF","MG","MH","MK","ML","MM","MN","MO","MP","MQ","MR","MS","MT","MU","MV","MW","MX","MY","MZ","NA","NC","NE","NF","NG","NI","NL","NO","NP","NR","NU","NZ","OM","PA","PE","PF","PG","PH","PK","PL","PM","PN","PR","PS","PT","PW","PY","QA","RE","RO","RS","RU","RW","SA","SB","SC","SD","SE","SG","SH","SI","SJ","SK","SL","SM","SN","SO","SR","SS","ST","SV","SX","SY","SZ","TC","TD","TF","TG","TH","TJ","TK","TL","TM","TN","TO","TR","TT","TV","TW","TZ","UA","UG","UM","US","UY","UZ","VA","VC","VE","VG","VI","VN","VU","WF","WS","XI","YE","YT","ZA","ZM","ZW"]},"vatRegime":{"type":"string","enum":["REAL_MONTHLY_TAX_REGIME","REAL_QUARTERLY_TAX_REGIME","SIMPLIFIED_TAX_REGIME","VAT_EXEMPTION_REGIME"],"description":"French VAT regime of the business entity.","x-doc":{"text":"French VAT regime of the business entity.","array":[{"code":"REAL_MONTHLY_TAX_REGIME","label":"Real normal tax regime with monthly VAT declarations."},{"code":"REAL_QUARTERLY_TAX_REGIME","label":"Real normal tax regime with quarterly VAT declarations."},{"code":"SIMPLIFIED_TAX_REGIME","label":"Simplified tax regime with annual VAT declarations."},{"code":"VAT_EXEMPTION_REGIME","label":"VAT exemption regime (franchise en base de TVA)."}]}},"nextVatRegime":{"type":"string","enum":["REAL_MONTHLY_TAX_REGIME","REAL_QUARTERLY_TAX_REGIME","SIMPLIFIED_TAX_REGIME","VAT_EXEMPTION_REGIME"],"description":"Pending VAT regime, effective on the next Feb 1st, if a change is currently blocked by an active e-reporting report.","x-doc":{"text":"Pending VAT regime, effective on the next Feb 1st, if a change is currently blocked by an active e-reporting report."}},"type":{"type":"string","nullable":true,"enum":["LEGAL_UNIT","OFFICE"],"description":"The type of the business entity.","x-doc":{"text":"The type of the business entity.","array":[{"code":"LEGAL_UNIT","label":"Legal unit business entity."},{"code":"OFFICE","label":"Office or establishment of a legal unit."}]}},"scope":{"type":"string","enum":["PRIVATE_TAX_PAYER","PUBLIC","PRIMARY","SECONDARY"],"description":"Scope of the office or legal unit business entity.","x-doc":{"text":"Scope of the office or legal unit business entity.","array":[{"code":"PRIVATE_TAX_PAYER","label":"A private sector taxpayer (company or individual)."},{"code":"PUBLIC","label":"A public sector entity (government or administration)."},{"code":"PRIMARY","label":"The primary (head) establishment of a legal unit."},{"code":"SECONDARY","label":"A secondary establishment (branch) of a legal unit."}]}},"identifierScheme":{"type":"string","description":"The EAS code (Endpoint Address Scheme) identifies the type of identifier used for parties in electronic invoicing.","x-doc":{"text":"The EAS code (Endpoint Address Scheme) identifies the type of identifier used for parties in electronic invoicing.","more":"Once on the European Commission's webpage, download the latest version of the XLSX file containing the EAS codes. Example: for a French company it can be 0002 (SIREN).","link":{"placeholder":"EAS code list","link":"https://ec.europa.eu/digital-building-blocks/sites/display/DIGITAL/Registry+of+supporting+artefacts+to+implement+EN16931"}}},"identifierValue":{"type":"string","description":"The value of the electronic address.","x-doc":{"text":"The value of the electronic address."}},"countryIdentifier":{"type":"object","properties":{"siren":{"type":"string"},"siret":{"type":"string"}},"description":"Country-specific identifiers (FR only).","x-doc":{"text":"Country-specific identifiers (FR only)."}},"legalUnit":{"type":"object","properties":{"businessEntityId":{"type":"string","format":"uuid"},"name":{"type":"string"}},"required":["businessEntityId","name"],"description":"Parent legal unit (offices only).","x-doc":{"text":"Parent legal unit (offices only)."}},"postalAddress":{"type":"object","properties":{"countrySubdivision":{"type":"string","description":"The country subdivision (optional).","x-doc":{"text":"The country subdivision (optional)."}},"city":{"type":"string","description":"The name of the city.","x-doc":{"text":"The name of the city."}},"postalCode":{"type":"string","description":"The postal code of the address.","x-doc":{"text":"The postal code of the address."}},"addressLine1":{"type":"string","description":"The first line of the address.","x-doc":{"text":"The first line of the address."}},"addressLine2":{"type":"string","description":"The second line of the address (optional).","x-doc":{"text":"The second line of the address (optional)."}},"addressLine3":{"type":"string","description":"The third line of the address (optional).","x-doc":{"text":"The third line of the address (optional)."}}},"required":["city","postalCode","addressLine1"]},"disclosureStatus":{"type":"string","enum":["Public","Restricted","NoSolicitation"],"description":"Defines how information about the entity may be disclosed: Public = fully disclosable, Restricted = partially disclosable, NoSolicitation = refuses commercial prospecting.","x-doc":{"text":"Defines how information about the entity may be disclosed: Public = fully disclosable, Restricted = partially disclosable, NoSolicitation = refuses commercial prospecting."}},"chorusPro":{"type":"object","properties":{"engagementJuridique":{"type":"boolean","description":"Whether the public entity requires a legal commitment number (engagement juridique) to be provided on invoices.","x-doc":{"text":"Whether the public entity requires a legal commitment number (engagement juridique) to be provided on invoices."}},"service":{"type":"boolean","description":"Whether the public entity requires a service code to be provided on invoices.","x-doc":{"text":"Whether the public entity requires a service code to be provided on invoices."}},"engJurServ":{"type":"boolean","description":"Whether the public entity requires either a service code or a legal commitment number on invoices.","x-doc":{"text":"Whether the public entity requires either a service code or a legal commitment number on invoices."}},"moa":{"type":"boolean","description":"Whether the public entity acts as a contracting authority (MOA - Maîtrise d’Ouvrage) and receives construction-work invoices in addition to standard invoices.","x-doc":{"text":"Whether the public entity acts as a contracting authority (MOA - Maîtrise d’Ouvrage) and receives construction-work invoices in addition to standard invoices."}},"moaUnique":{"type":"boolean","description":"Whether the public entity exclusively acts as a contracting authority (MOA) and therefore only receives construction-work invoices.","x-doc":{"text":"Whether the public entity exclusively acts as a contracting authority (MOA) and therefore only receives construction-work invoices."}},"statutMiseEnPaiement":{"type":"boolean","description":"Whether the public entity manages and publishes invoice payment status information.","x-doc":{"text":"Whether the public entity manages and publishes invoice payment status information."}}},"description":"Chorus Pro specific requirements and capabilities for French public sector entities.","x-doc":{"text":"Chorus Pro specific requirements and capabilities for French public sector entities."}},"operatorRelation":{"type":"object","properties":{"data":{"type":"object","properties":{"header":{"type":"array","items":{"type":"object","properties":{"key":{"type":"string","minLength":1,"pattern":"^[!#$%&'*+.^_`|~0-9A-Za-z-]+$"},"value":{"type":"string","minLength":1,"pattern":"^\\S+$"}},"required":["key","value"]},"maxItems":5,"description":"Will be added to the webhook request into the header.","x-doc":{"text":"Will be added to the webhook request into the header."}},"query":{"type":"array","items":{"type":"object","properties":{"key":{"type":"string","minLength":1,"pattern":"^[!#$%&'*+.^_`|~0-9A-Za-z-]+$"},"value":{"type":"string","minLength":1,"pattern":"^\\S+$"}},"required":["key","value"]},"maxItems":5,"description":"Will be added to the webhook request as query parameter.","x-doc":{"text":"Will be added to the webhook request as query parameter."}},"param":{"type":"array","items":{"type":"object","properties":{"key":{"type":"string","pattern":"^:"},"value":{"type":"string","minLength":1,"pattern":"^\\S+$"}},"required":["key","value"]},"maxItems":3,"description":"Will be added to the webhook request as path parameter.","x-doc":{"text":"Will be added to the webhook request as path parameter.","more":"Use the :$key format for keys. Example: { key: \":companyId\", value: \"123456789\" }"}},"custom":{"type":"object","additionalProperties":{"nullable":true}}},"description":"Any kind of specific data","x-doc":{"text":"Any kind of specific data","more":"Included in the webhook payload sent to your endpoint."}},"direction":{"type":"string","nullable":true,"enum":["OUTBOUND","INBOUND"],"description":"Optional direction filter for the business entity relation (bidirectional if null or omitted).","x-doc":{"text":"Optional direction filter for the business entity relation (bidirectional if null or omitted).","array":[{"code":"OUTBOUND","label":"An invoice or status issued to a customer or client"},{"code":"INBOUND","label":"An invoice or status received from a supplier or vendor"}]}}}},"identifiers":{"type":"array","items":{"type":"object","properties":{"businessEntityIdentifierId":{"type":"string","format":"uuid","description":"Unique identifier for the identifier.","x-doc":{"text":"Unique identifier for the identifier."}},"type":{"type":"string","enum":["LEGAL_IDENTIFIER","OFFICE_IDENTIFIER","ROUTING_CODE","SUFFIX"],"description":"Type of identifier.","x-doc":{"text":"Type of identifier.","array":[{"code":"LEGAL_IDENTIFIER","label":"Identifier representing a legal unit."},{"code":"OFFICE_IDENTIFIER","label":"Identifier representing an office (establishment)."},{"code":"ROUTING_CODE","label":"Routing code used for invoice delivery."},{"code":"SUFFIX","label":"Suffix appended to an identifier for routing purposes."}]}},"scheme":{"type":"string","pattern":"^\\d{4}$","description":"Scheme of the identifier.","x-doc":{"text":"Scheme of the identifier."}},"value":{"type":"string","pattern":"^[a-zA-Z0-9-_]+$","description":"Value of the identifier.","x-doc":{"text":"Value of the identifier."}},"label":{"type":"string","description":"Label of the identifier.","x-doc":{"text":"Label of the identifier."}},"networkRegistered":{"type":"array","items":{"type":"object","properties":{"directoryId":{"type":"string","format":"uuid","description":"Unique identifier for the directory entry.","x-doc":{"text":"Unique identifier for the directory entry."}},"networkId":{"type":"string","format":"uuid","description":"Unique identifier for the registered network.","x-doc":{"text":"Unique identifier for the registered network."}},"networkIdentifier":{"type":"string","enum":["DOMESTIC_FR","PEPPOL_INTERNATIONAL"],"description":"The registered network.","x-doc":{"text":"The registered network.","array":[{"code":"DOMESTIC_FR","label":"French domestic e-invoicing network (PPF/PDP)."},{"code":"PEPPOL_INTERNATIONAL","label":"Peppol international e-invoicing network."}]}},"directoryAddress":{"type":"string","description":"Address used in the network to identify the business entity","x-doc":{"text":"Address used in the network to identify the business entity"}},"isSelfBilling":{"type":"boolean","description":"Whether this network registration accepts self-billing invoices.","x-doc":{"text":"Whether this network registration accepts self-billing invoices."}},"status":{"type":"string","enum":["PENDING_PEPPOL_RELEASE"],"description":"Pending state of the registration, absent when the registration is settled.","x-doc":{"text":"Pending state of the registration, absent when the registration is settled.","array":[{"code":"PENDING_PEPPOL_RELEASE","label":"The address was removed from the French directory by the PPF, or its validity period ended, but it is still registered in our Peppol SMP so incoming invoices keep being routed. It is settled once the address is explicitly unregistered or registered again."}]}},"validFrom":{"type":"string","description":"Address validity start date (White Label ONLY)","x-doc":{"text":"Address validity start date (White Label ONLY)"}},"validTo":{"type":"string","description":"Address validity end date (White Label ONLY)","x-doc":{"text":"Address validity end date (White Label ONLY)"}},"platformDetail":{"type":"object","properties":{"name":{"type":"string"},"legalIdentifier":{"type":"string"},"contact":{"type":"string"}},"required":["name","legalIdentifier","contact"],"additionalProperties":false,"description":"Linked platform details (White Label ONLY)","x-doc":{"text":"Linked platform details (White Label ONLY)"}}},"required":["directoryId","networkId","networkIdentifier","directoryAddress"]},"description":"List of registered networks.","x-doc":{"text":"List of registered networks."}},"postalAddress":{"type":"object","properties":{"countrySubdivision":{"type":"string","description":"The country subdivision (optional).","x-doc":{"text":"The country subdivision (optional)."}},"city":{"type":"string","description":"The name of the city.","x-doc":{"text":"The name of the city."}},"postalCode":{"type":"string","description":"The postal code of the address.","x-doc":{"text":"The postal code of the address."}},"addressLine1":{"type":"string","description":"The first line of the address.","x-doc":{"text":"The first line of the address."}},"addressLine2":{"type":"string","description":"The second line of the address (optional).","x-doc":{"text":"The second line of the address (optional)."}},"addressLine3":{"type":"string","description":"The third line of the address (optional).","x-doc":{"text":"The third line of the address (optional)."}}},"required":["city","postalCode","addressLine1"],"description":"Only available on some French routing code","x-doc":{"text":"Only available on some French routing code"}}},"required":["businessEntityIdentifierId","type","scheme","value"]},"description":"List of business entity identifiers.","x-doc":{"text":"List of business entity identifiers."}}},"required":["businessEntityId","name","country","type","scope","identifierScheme","identifierValue","identifiers"]}},"examples":{"example1":{"summary":"Simple example","value":{"businessEntityId":"01944583-ae33-7285-b62d-91737a7dcf56","name":"HELIO PROJETS","type":"LEGAL_UNIT","vatRegime":"REAL_MONTHLY_TAX_REGIME","scope":"PRIVATE_TAX_PAYER","country":"FR","identifierScheme":"0002","identifierValue":"007350101","countryIdentifier":{"siren":"007350101","siret":"007350101"},"identifiers":[{"businessEntityIdentifierId":"01944583-ae40-770c-bd8c-7f7f801a18b0","type":"LEGAL_IDENTIFIER","scheme":"0002","value":"007350101"}]}}}}},"x-doc":{"text":"Retrieve list of business entity matching given criteria"}},"400":{"description":"Validation - Request validation failure.","x-doc":{"text":"Validation - Request validation failure."}},"401":{"description":"Unauthorized - Authentication is required and has failed or has not yet been provided.","x-doc":{"text":"Unauthorized - Authentication is required and has failed or has not yet been provided."}},"403":{"description":"Forbidden - The server understood the request, but it refuses to authorize it.","x-doc":{"text":"Forbidden - The server understood the request, but it refuses to authorize it."}},"404":{"description":"Business entity not found for given id","x-doc":{"text":"Business entity not found for given id"}}},"x-doc":{"text":"🎯 **Purpose**\n\nRetrieve the details of a **single business entity** identified by `businessEntityId`,\nowned and managed by the **current authenticated operator**.\n\n🏢 **Operator business entity directory**\n\nThis endpoint provides access to the operator’s **internal directory** for a specific business entity.\nUse this endpoint to **consult and manage the data** associated with the given business entity.\n"}},"delete":{"summary":"Remove a business entity","description":"🗑️️ **Removal conditions**\n\nA business entity can be removed **only if ALL of the following conditions are met**:\n\n- The entity is **not claimed by any operator**, or is **claimed only by the current operator**.\n- There are **no active office entities** linked to the legal unit.\n- The entity is **not a French entity** (managed by the government directory synchronisation).\n- The entity has **no active network registrations**.\n\nIf any of these conditions is not satisfied, the removal request will be **rejected**.","tags":["Operator Business Entity Management"],"security":[{"oauth2ClientCredentials":[]}],"parameters":[{"in":"header","name":"customer-id","description":"The unique identifier for the customer.","required":false,"schema":{"type":"string","format":"uuid"},"x-doc":{"text":"The unique identifier for the customer."}},{"in":"path","name":"businessEntityId","description":"The business entity id.","required":true,"schema":{"type":"string","format":"uuid"},"x-doc":{"text":"The business entity id."}}],"responses":{"204":{"description":"Business entity removed","x-doc":{"text":"Business entity removed"}},"400":{"description":"Validation - Request validation failure.","x-doc":{"text":"Validation - Request validation failure."}},"401":{"description":"Unauthorized - Authentication is required and has failed or has not yet been provided.","x-doc":{"text":"Unauthorized - Authentication is required and has failed or has not yet been provided."}},"403":{"description":"Forbidden - The server understood the request, but it refuses to authorize it.","x-doc":{"text":"Forbidden - The server understood the request, but it refuses to authorize it."}},"404":{"description":"Not found or removal not allowed.\n\nPossible error codes:\n- `BUSINESS_ENTITY_NOT_FOUND` — The business entity does not exist\n- `BUSINESS_ENTITY_REMOVE_FRENCH_ENTITY_FORBIDDEN` — French entities are managed by the government directory and cannot be removed\n- `BUSINESS_ENTITY_REMOVE_HAS_ACTIVE_OFFICES` — The legal unit still has active office entities — remove them first\n- `BUSINESS_ENTITY_REMOVE_LINKED_TO_OPERATOR` — The entity is still claimed by another operator\n- `BUSINESS_ENTITY_REMOVE_HAS_ACTIVE_REGISTRATIONS` — The entity still has active network registrations — unregister all identifiers first","x-doc":{"text":"Not found or removal not allowed.\n\nPossible error codes:\n- `BUSINESS_ENTITY_NOT_FOUND` — The business entity does not exist\n- `BUSINESS_ENTITY_REMOVE_FRENCH_ENTITY_FORBIDDEN` — French entities are managed by the government directory and cannot be removed\n- `BUSINESS_ENTITY_REMOVE_HAS_ACTIVE_OFFICES` — The legal unit still has active office entities — remove them first\n- `BUSINESS_ENTITY_REMOVE_LINKED_TO_OPERATOR` — The entity is still claimed by another operator\n- `BUSINESS_ENTITY_REMOVE_HAS_ACTIVE_REGISTRATIONS` — The entity still has active network registrations — unregister all identifiers first"}}},"x-doc":{"text":"🗑️️ **Removal conditions**\n\nA business entity can be removed **only if ALL of the following conditions are met**:\n\n- The entity is **not claimed by any operator**, or is **claimed only by the current operator**.\n- There are **no active office entities** linked to the legal unit.\n- The entity is **not a French entity** (managed by the government directory synchronisation).\n- The entity has **no active network registrations**.\n\nIf any of these conditions is not satisfied, the removal request will be **rejected**."}}},"/v1/config/business/entity/legalunit":{"post":{"summary":"Create a new legal unit","description":"🎯 **Purpose**\n\nCreate a **new legal unit** in the operator directory (no claim required).\n\n⚠️**🇫🇷French reform context**\n\nThis endpoint **must NOT be used** in the context of the **French e-invoicing reform**.\nTo onboard or associate a legal unit in this context, use the **claim endpoint** instead.\n\n⚠️ **Important – Enrollment vs registration**\n\nThis endpoint **must NOT be used** if the business entity has already been enrolled\nthrough the **enrollment endpoint**.\nEnrollment automatically handles all creation.","tags":["Operator Business Entity Management"],"security":[{"oauth2ClientCredentials":[]}],"parameters":[{"in":"header","name":"customer-id","description":"The unique identifier for the customer.","required":false,"schema":{"type":"string","format":"uuid"},"x-doc":{"text":"The unique identifier for the customer."}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string","description":"Name of the business entity.","x-doc":{"text":"Name of the business entity."}},"country":{"type":"string","enum":["1A","AD","AE","AF","AG","AI","AL","AM","AO","AQ","AR","AS","AT","AU","AW","AX","AZ","BA","BB","BD","BE","BF","BG","BH","BI","BJ","BL","BM","BN","BO","BQ","BR","BS","BT","BV","BW","BY","BZ","CA","CC","CD","CF","CG","CH","CI","CK","CL","CM","CN","CO","CR","CU","CV","CW","CX","CY","CZ","DE","DJ","DK","DM","DO","DZ","EC","EE","EG","EH","ER","ES","ET","FI","FJ","FK","FM","FO","FR","GA","GB","GD","GE","GF","GG","GH","GI","GL","GM","GN","GP","GQ","GR","GS","GT","GU","GW","GY","HK","HM","HN","HR","HT","HU","ID","IE","IL","IM","IN","IO","IQ","IR","IS","IT","JE","JM","JO","JP","KE","KG","KH","KI","KM","KN","KP","KR","KW","KY","KZ","LA","LB","LC","LI","LK","LR","LS","LT","LU","LV","LY","MA","MC","MD","ME","MF","MG","MH","MK","ML","MM","MN","MO","MP","MQ","MR","MS","MT","MU","MV","MW","MX","MY","MZ","NA","NC","NE","NF","NG","NI","NL","NO","NP","NR","NU","NZ","OM","PA","PE","PF","PG","PH","PK","PL","PM","PN","PR","PS","PT","PW","PY","QA","RE","RO","RS","RU","RW","SA","SB","SC","SD","SE","SG","SH","SI","SJ","SK","SL","SM","SN","SO","SR","SS","ST","SV","SX","SY","SZ","TC","TD","TF","TG","TH","TJ","TK","TL","TM","TN","TO","TR","TT","TV","TW","TZ","UA","UG","UM","US","UY","UZ","VA","VC","VE","VG","VI","VN","VU","WF","WS","XI","YE","YT","ZA","ZM","ZW"]},"vatRegime":{"type":"string","enum":["REAL_MONTHLY_TAX_REGIME","REAL_QUARTERLY_TAX_REGIME","SIMPLIFIED_TAX_REGIME","VAT_EXEMPTION_REGIME"],"description":"French VAT regime of the business entity.","x-doc":{"text":"French VAT regime of the business entity.","array":[{"code":"REAL_MONTHLY_TAX_REGIME","label":"Real normal tax regime with monthly VAT declarations."},{"code":"REAL_QUARTERLY_TAX_REGIME","label":"Real normal tax regime with quarterly VAT declarations."},{"code":"SIMPLIFIED_TAX_REGIME","label":"Simplified tax regime with annual VAT declarations."},{"code":"VAT_EXEMPTION_REGIME","label":"VAT exemption regime (franchise en base de TVA)."}]}},"nextVatRegime":{"type":"string","enum":["REAL_MONTHLY_TAX_REGIME","REAL_QUARTERLY_TAX_REGIME","SIMPLIFIED_TAX_REGIME","VAT_EXEMPTION_REGIME"],"description":"Pending VAT regime, effective on the next Feb 1st, if a change is currently blocked by an active e-reporting report.","x-doc":{"text":"Pending VAT regime, effective on the next Feb 1st, if a change is currently blocked by an active e-reporting report."}},"type":{"type":"string","default":"LEGAL_UNIT"},"scope":{"type":"string","enum":["PRIVATE_TAX_PAYER","PUBLIC","PRIMARY","SECONDARY"],"description":"Scope of the office or legal unit business entity.","x-doc":{"text":"Scope of the office or legal unit business entity.","array":[{"code":"PRIVATE_TAX_PAYER","label":"A private sector taxpayer (company or individual)."},{"code":"PUBLIC","label":"A public sector entity (government or administration)."},{"code":"PRIMARY","label":"The primary (head) establishment of a legal unit."},{"code":"SECONDARY","label":"A secondary establishment (branch) of a legal unit."}]}},"identifierScheme":{"type":"string","description":"The EAS code (Endpoint Address Scheme) identifies the type of identifier used for parties in electronic invoicing.","x-doc":{"text":"The EAS code (Endpoint Address Scheme) identifies the type of identifier used for parties in electronic invoicing.","more":"Once on the European Commission's webpage, download the latest version of the XLSX file containing the EAS codes. Example: for a French company it can be 0002 (SIREN).","link":{"placeholder":"EAS code list","link":"https://ec.europa.eu/digital-building-blocks/sites/display/DIGITAL/Registry+of+supporting+artefacts+to+implement+EN16931"}}},"identifierValue":{"type":"string","description":"The value of the electronic address.","x-doc":{"text":"The value of the electronic address."}},"countryIdentifier":{"type":"object","properties":{"siren":{"type":"string"},"siret":{"type":"string"}},"description":"Country-specific identifiers (FR only).","x-doc":{"text":"Country-specific identifiers (FR only)."}},"legalUnit":{"type":"object","properties":{"businessEntityId":{"type":"string","format":"uuid"},"name":{"type":"string"}},"required":["businessEntityId","name"],"description":"Parent legal unit (offices only).","x-doc":{"text":"Parent legal unit (offices only)."}},"disclosureStatus":{"type":"string","enum":["Public","Restricted","NoSolicitation"],"description":"Defines how information about the entity may be disclosed: Public = fully disclosable, Restricted = partially disclosable, NoSolicitation = refuses commercial prospecting.","x-doc":{"text":"Defines how information about the entity may be disclosed: Public = fully disclosable, Restricted = partially disclosable, NoSolicitation = refuses commercial prospecting."}},"chorusPro":{"type":"object","properties":{"engagementJuridique":{"type":"boolean","description":"Whether the public entity requires a legal commitment number (engagement juridique) to be provided on invoices.","x-doc":{"text":"Whether the public entity requires a legal commitment number (engagement juridique) to be provided on invoices."}},"service":{"type":"boolean","description":"Whether the public entity requires a service code to be provided on invoices.","x-doc":{"text":"Whether the public entity requires a service code to be provided on invoices."}},"engJurServ":{"type":"boolean","description":"Whether the public entity requires either a service code or a legal commitment number on invoices.","x-doc":{"text":"Whether the public entity requires either a service code or a legal commitment number on invoices."}},"moa":{"type":"boolean","description":"Whether the public entity acts as a contracting authority (MOA - Maîtrise d’Ouvrage) and receives construction-work invoices in addition to standard invoices.","x-doc":{"text":"Whether the public entity acts as a contracting authority (MOA - Maîtrise d’Ouvrage) and receives construction-work invoices in addition to standard invoices."}},"moaUnique":{"type":"boolean","description":"Whether the public entity exclusively acts as a contracting authority (MOA) and therefore only receives construction-work invoices.","x-doc":{"text":"Whether the public entity exclusively acts as a contracting authority (MOA) and therefore only receives construction-work invoices."}},"statutMiseEnPaiement":{"type":"boolean","description":"Whether the public entity manages and publishes invoice payment status information.","x-doc":{"text":"Whether the public entity manages and publishes invoice payment status information."}}},"description":"Chorus Pro specific requirements and capabilities for French public sector entities.","x-doc":{"text":"Chorus Pro specific requirements and capabilities for French public sector entities."}},"operatorRelation":{"type":"object","nullable":true,"properties":{"data":{"type":"object","properties":{"header":{"type":"array","items":{"type":"object","properties":{"key":{"type":"string","minLength":1,"pattern":"^[!#$%&'*+.^_`|~0-9A-Za-z-]+$"},"value":{"type":"string","minLength":1,"pattern":"^\\S+$"}},"required":["key","value"]},"maxItems":5,"description":"Will be added to the webhook request into the header.","x-doc":{"text":"Will be added to the webhook request into the header."}},"query":{"type":"array","items":{"type":"object","properties":{"key":{"type":"string","minLength":1,"pattern":"^[!#$%&'*+.^_`|~0-9A-Za-z-]+$"},"value":{"type":"string","minLength":1,"pattern":"^\\S+$"}},"required":["key","value"]},"maxItems":5,"description":"Will be added to the webhook request as query parameter.","x-doc":{"text":"Will be added to the webhook request as query parameter."}},"param":{"type":"array","items":{"type":"object","properties":{"key":{"type":"string","pattern":"^:"},"value":{"type":"string","minLength":1,"pattern":"^\\S+$"}},"required":["key","value"]},"maxItems":3,"description":"Will be added to the webhook request as path parameter.","x-doc":{"text":"Will be added to the webhook request as path parameter.","more":"Use the :$key format for keys. Example: { key: \":companyId\", value: \"123456789\" }"}},"custom":{"type":"object","additionalProperties":{"nullable":true}}},"description":"Any kind of specific data","x-doc":{"text":"Any kind of specific data","more":"Included in the webhook payload sent to your endpoint."}},"direction":{"type":"string","nullable":true,"enum":["OUTBOUND","INBOUND"],"description":"Optional direction filter for the business entity relation (bidirectional if null or omitted).","x-doc":{"text":"Optional direction filter for the business entity relation (bidirectional if null or omitted).","array":[{"code":"OUTBOUND","label":"An invoice or status issued to a customer or client"},{"code":"INBOUND","label":"An invoice or status received from a supplier or vendor"}]}}}},"identifiers":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["LEGAL_IDENTIFIER","OFFICE_IDENTIFIER","ROUTING_CODE","SUFFIX"],"description":"Type of identifier.","x-doc":{"text":"Type of identifier.","array":[{"code":"LEGAL_IDENTIFIER","label":"Identifier representing a legal unit."},{"code":"OFFICE_IDENTIFIER","label":"Identifier representing an office (establishment)."},{"code":"ROUTING_CODE","label":"Routing code used for invoice delivery."},{"code":"SUFFIX","label":"Suffix appended to an identifier for routing purposes."}]}},"scheme":{"type":"string","pattern":"^\\d{4}$","description":"Scheme of the identifier.","x-doc":{"text":"Scheme of the identifier."}},"value":{"type":"string","pattern":"^[a-zA-Z0-9-_]+$","description":"Value of the identifier.","x-doc":{"text":"Value of the identifier."}},"label":{"type":"string","description":"Label of the identifier.","x-doc":{"text":"Label of the identifier."}},"networkRegistered":{"type":"array","items":{"type":"object","properties":{"directoryId":{"type":"string","format":"uuid","description":"Unique identifier for the directory entry.","x-doc":{"text":"Unique identifier for the directory entry."}},"networkId":{"type":"string","format":"uuid","description":"Unique identifier for the registered network.","x-doc":{"text":"Unique identifier for the registered network."}},"networkIdentifier":{"type":"string","enum":["DOMESTIC_FR","PEPPOL_INTERNATIONAL"],"description":"The registered network.","x-doc":{"text":"The registered network.","array":[{"code":"DOMESTIC_FR","label":"French domestic e-invoicing network (PPF/PDP)."},{"code":"PEPPOL_INTERNATIONAL","label":"Peppol international e-invoicing network."}]}},"directoryAddress":{"type":"string","description":"Address used in the network to identify the business entity","x-doc":{"text":"Address used in the network to identify the business entity"}},"isSelfBilling":{"type":"boolean","description":"Whether this network registration accepts self-billing invoices.","x-doc":{"text":"Whether this network registration accepts self-billing invoices."}},"status":{"type":"string","enum":["PENDING_PEPPOL_RELEASE"],"description":"Pending state of the registration, absent when the registration is settled.","x-doc":{"text":"Pending state of the registration, absent when the registration is settled.","array":[{"code":"PENDING_PEPPOL_RELEASE","label":"The address was removed from the French directory by the PPF, or its validity period ended, but it is still registered in our Peppol SMP so incoming invoices keep being routed. It is settled once the address is explicitly unregistered or registered again."}]}},"validFrom":{"type":"string","description":"Address validity start date (White Label ONLY)","x-doc":{"text":"Address validity start date (White Label ONLY)"}},"validTo":{"type":"string","description":"Address validity end date (White Label ONLY)","x-doc":{"text":"Address validity end date (White Label ONLY)"}},"platformDetail":{"type":"object","properties":{"name":{"type":"string"},"legalIdentifier":{"type":"string"},"contact":{"type":"string"}},"required":["name","legalIdentifier","contact"],"additionalProperties":false,"description":"Linked platform details (White Label ONLY)","x-doc":{"text":"Linked platform details (White Label ONLY)"}}},"required":["directoryId","networkId","networkIdentifier","directoryAddress"]},"description":"List of registered networks.","x-doc":{"text":"List of registered networks."}},"postalAddress":{"type":"object","properties":{"countrySubdivision":{"type":"string","description":"The country subdivision (optional).","x-doc":{"text":"The country subdivision (optional)."}},"city":{"type":"string","description":"The name of the city.","x-doc":{"text":"The name of the city."}},"postalCode":{"type":"string","description":"The postal code of the address.","x-doc":{"text":"The postal code of the address."}},"addressLine1":{"type":"string","description":"The first line of the address.","x-doc":{"text":"The first line of the address."}},"addressLine2":{"type":"string","description":"The second line of the address (optional).","x-doc":{"text":"The second line of the address (optional)."}},"addressLine3":{"type":"string","description":"The third line of the address (optional).","x-doc":{"text":"The third line of the address (optional)."}}},"required":["city","postalCode","addressLine1"],"description":"Only available on some French routing code","x-doc":{"text":"Only available on some French routing code"}}},"required":["type","scheme","value"]}}},"required":["name","country","scope","identifierScheme","identifierValue"],"additionalProperties":false},"examples":{"businessEntityAddLegalUnitBeExampleBody":{"summary":"Add a Belgian legal unit","value":{"name":"IOPOLE Belgique","country":"BE","scope":"PRIVATE_TAX_PAYER","identifierScheme":"0208","identifierValue":"0842162017 (BCE)"}},"businessEntityAddLegalUnitBeOutboundExampleBody":{"summary":"Add a Belgian legal unit (Outbound only)","value":{"name":"IOPOLE Belgique","country":"BE","scope":"PRIVATE_TAX_PAYER","identifierScheme":"0208","identifierValue":"0842162017 (BCE)","operatorRelation":{"direction":"OUTBOUND"}}},"businessEntityAddLegalUnitBeCustomDataExampleBody":{"summary":"Add a Belgian legal unit (Associate custom data)","value":{"name":"IOPOLE Belgique","country":"BE","scope":"PRIVATE_TAX_PAYER","identifierScheme":"0208","identifierValue":"0842162017 (BCE)","operatorRelation":{"data":{"header":[{"key":"X-Client-ID","value":"12345"}],"query":[{"key":"resourceID","value":"67890"},{"key":"priority","value":"high"}],"param":[{"key":"tenantId","value":"12345"}]}}}},"businessEntityAddLegalUnitChExampleBody":{"summary":"Add a Swiss legal unit","value":{"name":"IOPOLE Swiss","country":"CH","scope":"PRIVATE_TAX_PAYER","identifierScheme":"0183","identifierValue":"che358400832 (UIDB)"}},"businessEntityAddLegalUnitLuExampleBody":{"summary":"Add a Luxembourg legal unit","value":{"name":"IOPOLE Luxembourg","country":"LU","scope":"PRIVATE_TAX_PAYER","identifierScheme":"9938","identifierValue":"lu23918643 (VAT)"}}}}}},"responses":{"201":{"description":"Created business entity id and identifier id","content":{"application/json":{"schema":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["WEBHOOK","SECRET","STREAM","INVOICE","STATUS","BUSINESS_ENTITY","BUSINESS_ENTITY_IDENTIFIER","DIRECTORY","EDI_MESSAGE"],"description":"The type of the response object.","x-doc":{"text":"The type of the response object."}},"id":{"type":"string","format":"uuid","description":"The unique identifier for the created element.","x-doc":{"text":"The unique identifier for the created element."}}},"required":["type","id"],"description":"Response model for the element creation response.","x-doc":{"text":"Response model for the element creation response."}}},"examples":{"businessEntityAddLegalUnitExampleResponse":{"summary":"Created business entity id and identifier id","value":[{"type":"BUSINESS_ENTITY","id":"f47ac10b-58cc-4372-a567-0e02b2c3d479"},{"type":"BUSINESS_ENTITY_IDENTIFIER","id":"a67ac10b-58cc-4372-a567-0e02b2c3d123"}]}}}},"x-doc":{"text":"Created business entity id and identifier id"}},"400":{"description":"Validation - Request or data validation failure (ex : invalid identifier, ...).","x-doc":{"text":"Validation - Request or data validation failure (ex : invalid identifier, ...)."}},"401":{"description":"Unauthorized - Authentication is required and has failed or has not yet been provided.","x-doc":{"text":"Unauthorized - Authentication is required and has failed or has not yet been provided."}},"403":{"description":"Forbidden - The server understood the request, but it refuses to authorize it.","x-doc":{"text":"Forbidden - The server understood the request, but it refuses to authorize it."}},"409":{"description":"Conflict - The request could not be completed. A business unit with the same identifiers already exists.","x-doc":{"text":"Conflict - The request could not be completed. A business unit with the same identifiers already exists."}}},"x-doc":{"text":"🎯 **Purpose**\n\nCreate a **new legal unit** in the operator directory (no claim required).\n\n⚠️**🇫🇷French reform context**\n\nThis endpoint **must NOT be used** in the context of the **French e-invoicing reform**.\nTo onboard or associate a legal unit in this context, use the **claim endpoint** instead.\n\n⚠️ **Important – Enrollment vs registration**\n\nThis endpoint **must NOT be used** if the business entity has already been enrolled\nthrough the **enrollment endpoint**.\nEnrollment automatically handles all creation."}}},"/v1/config/business/entity/{businessEntityId}/configure":{"post":{"summary":"Configure business entity","tags":["Business Entity Configure"],"security":[{"oauth2ClientCredentials":[]}],"parameters":[{"in":"header","name":"customer-id","description":"The unique identifier for the customer.","required":false,"schema":{"type":"string","format":"uuid"},"x-doc":{"text":"The unique identifier for the customer."}},{"in":"path","name":"businessEntityId","description":"The business entity id.","required":true,"schema":{"type":"string","format":"uuid"},"x-doc":{"text":"The business entity id."}}],"requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object","properties":{"vatRegime":{"type":"string","enum":["REAL_MONTHLY_TAX_REGIME","REAL_QUARTERLY_TAX_REGIME","SIMPLIFIED_TAX_REGIME","VAT_EXEMPTION_REGIME"],"description":"French VAT regime of the business entity.","x-doc":{"text":"French VAT regime of the business entity.","array":[{"code":"REAL_MONTHLY_TAX_REGIME","label":"Real normal tax regime with monthly VAT declarations."},{"code":"REAL_QUARTERLY_TAX_REGIME","label":"Real normal tax regime with quarterly VAT declarations."},{"code":"SIMPLIFIED_TAX_REGIME","label":"Simplified tax regime with annual VAT declarations."},{"code":"VAT_EXEMPTION_REGIME","label":"VAT exemption regime (franchise en base de TVA)."}]}}},"required":["vatRegime"]}}}},"responses":{"200":{"description":"VAT regime updated. Applied immediately if the entity has no active e-reporting transaction or payment, otherwise stored as pending and effective on the next Feb 1st (see `date`).","content":{"application/json":{"schema":{"type":"object","properties":{"vatRegime":{"type":"string","enum":["REAL_MONTHLY_TAX_REGIME","REAL_QUARTERLY_TAX_REGIME","SIMPLIFIED_TAX_REGIME","VAT_EXEMPTION_REGIME"],"description":"The VAT regime value: applied immediately, or pending if an active e-reporting report exists.","x-doc":{"text":"The VAT regime value: applied immediately, or pending if an active e-reporting report exists."}},"date":{"type":"string","format":"date-time","description":"When vatRegime applies: current datetime if applied immediately, otherwise the future effective date (next Feb 1st) if pending.","x-doc":{"text":"When vatRegime applies: current datetime if applied immediately, otherwise the future effective date (next Feb 1st) if pending."}}},"required":["vatRegime","date"]}}},"x-doc":{"text":"VAT regime updated. Applied immediately if the entity has no active e-reporting transaction or payment, otherwise stored as pending and effective on the next Feb 1st (see `date`)."}},"401":{"description":"Unauthorized - Authentication is required and has failed or has not yet been provided.","x-doc":{"text":"Unauthorized - Authentication is required and has failed or has not yet been provided."}},"403":{"description":"Forbidden - The server understood the request, but it refuses to authorize it.","x-doc":{"text":"Forbidden - The server understood the request, but it refuses to authorize it."}},"409":{"description":"Conflict.\n\nPossible error codes:\n- `BUSINESS_ENTITY_CONFIGURE_VAT_REGIME_CONFLICT` — Cannot update VAT regime: entity not claimed or not a legal unit","x-doc":{"text":"Conflict.\n\nPossible error codes:\n- `BUSINESS_ENTITY_CONFIGURE_VAT_REGIME_CONFLICT` — Cannot update VAT regime: entity not claimed or not a legal unit"}}}}},"/v1/config/business/entity/office":{"post":{"summary":"Create a new office for a given legal unit","description":"🎯 **Purpose**\n\nCreate a **office** in the operator directory (no claim required).\n\n⚠️**🇫🇷️️French reform context**\n\nThis endpoint **must NOT be used** in the context of the **French e-invoicing reform**.\nTo onboard or associate a legal unit in this context, use the **claim endpoint** instead.\n\n⚠️ **Important – Enrollment vs registration**\n\nThis endpoint **must NOT be used** if the business entity has already been enrolled\nthrough the **enrollment endpoint**.\nEnrollment automatically handles all creation.","tags":["Operator Business Entity Management"],"security":[{"oauth2ClientCredentials":[]}],"parameters":[{"in":"header","name":"customer-id","description":"The unique identifier for the customer.","required":false,"schema":{"type":"string","format":"uuid"},"x-doc":{"text":"The unique identifier for the customer."}},{"in":"query","name":"legalBusinessEntityId","description":"businessEntityId of the parent legal unit (if required)","required":false,"schema":{"type":"string","format":"uuid"},"x-doc":{"text":"businessEntityId of the parent legal unit (if required)"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string","description":"Name of the business entity.","x-doc":{"text":"Name of the business entity."}},"country":{"type":"string","enum":["1A","AD","AE","AF","AG","AI","AL","AM","AO","AQ","AR","AS","AT","AU","AW","AX","AZ","BA","BB","BD","BE","BF","BG","BH","BI","BJ","BL","BM","BN","BO","BQ","BR","BS","BT","BV","BW","BY","BZ","CA","CC","CD","CF","CG","CH","CI","CK","CL","CM","CN","CO","CR","CU","CV","CW","CX","CY","CZ","DE","DJ","DK","DM","DO","DZ","EC","EE","EG","EH","ER","ES","ET","FI","FJ","FK","FM","FO","FR","GA","GB","GD","GE","GF","GG","GH","GI","GL","GM","GN","GP","GQ","GR","GS","GT","GU","GW","GY","HK","HM","HN","HR","HT","HU","ID","IE","IL","IM","IN","IO","IQ","IR","IS","IT","JE","JM","JO","JP","KE","KG","KH","KI","KM","KN","KP","KR","KW","KY","KZ","LA","LB","LC","LI","LK","LR","LS","LT","LU","LV","LY","MA","MC","MD","ME","MF","MG","MH","MK","ML","MM","MN","MO","MP","MQ","MR","MS","MT","MU","MV","MW","MX","MY","MZ","NA","NC","NE","NF","NG","NI","NL","NO","NP","NR","NU","NZ","OM","PA","PE","PF","PG","PH","PK","PL","PM","PN","PR","PS","PT","PW","PY","QA","RE","RO","RS","RU","RW","SA","SB","SC","SD","SE","SG","SH","SI","SJ","SK","SL","SM","SN","SO","SR","SS","ST","SV","SX","SY","SZ","TC","TD","TF","TG","TH","TJ","TK","TL","TM","TN","TO","TR","TT","TV","TW","TZ","UA","UG","UM","US","UY","UZ","VA","VC","VE","VG","VI","VN","VU","WF","WS","XI","YE","YT","ZA","ZM","ZW"]},"vatRegime":{"type":"string","enum":["REAL_MONTHLY_TAX_REGIME","REAL_QUARTERLY_TAX_REGIME","SIMPLIFIED_TAX_REGIME","VAT_EXEMPTION_REGIME"],"description":"French VAT regime of the business entity.","x-doc":{"text":"French VAT regime of the business entity.","array":[{"code":"REAL_MONTHLY_TAX_REGIME","label":"Real normal tax regime with monthly VAT declarations."},{"code":"REAL_QUARTERLY_TAX_REGIME","label":"Real normal tax regime with quarterly VAT declarations."},{"code":"SIMPLIFIED_TAX_REGIME","label":"Simplified tax regime with annual VAT declarations."},{"code":"VAT_EXEMPTION_REGIME","label":"VAT exemption regime (franchise en base de TVA)."}]}},"nextVatRegime":{"type":"string","enum":["REAL_MONTHLY_TAX_REGIME","REAL_QUARTERLY_TAX_REGIME","SIMPLIFIED_TAX_REGIME","VAT_EXEMPTION_REGIME"],"description":"Pending VAT regime, effective on the next Feb 1st, if a change is currently blocked by an active e-reporting report.","x-doc":{"text":"Pending VAT regime, effective on the next Feb 1st, if a change is currently blocked by an active e-reporting report."}},"type":{"type":"string","default":"OFFICE"},"scope":{"type":"string","enum":["PRIVATE_TAX_PAYER","PUBLIC","PRIMARY","SECONDARY"],"description":"Scope of the office or legal unit business entity.","x-doc":{"text":"Scope of the office or legal unit business entity.","array":[{"code":"PRIVATE_TAX_PAYER","label":"A private sector taxpayer (company or individual)."},{"code":"PUBLIC","label":"A public sector entity (government or administration)."},{"code":"PRIMARY","label":"The primary (head) establishment of a legal unit."},{"code":"SECONDARY","label":"A secondary establishment (branch) of a legal unit."}]}},"identifierScheme":{"type":"string","description":"The EAS code (Endpoint Address Scheme) identifies the type of identifier used for parties in electronic invoicing.","x-doc":{"text":"The EAS code (Endpoint Address Scheme) identifies the type of identifier used for parties in electronic invoicing.","more":"Once on the European Commission's webpage, download the latest version of the XLSX file containing the EAS codes. Example: for a French company it can be 0002 (SIREN).","link":{"placeholder":"EAS code list","link":"https://ec.europa.eu/digital-building-blocks/sites/display/DIGITAL/Registry+of+supporting+artefacts+to+implement+EN16931"}}},"identifierValue":{"type":"string","description":"The value of the electronic address.","x-doc":{"text":"The value of the electronic address."}},"countryIdentifier":{"type":"object","properties":{"siren":{"type":"string"},"siret":{"type":"string"}},"description":"Country-specific identifiers (FR only).","x-doc":{"text":"Country-specific identifiers (FR only)."}},"legalUnit":{"type":"object","properties":{"businessEntityId":{"type":"string","format":"uuid"},"name":{"type":"string"}},"required":["businessEntityId","name"],"description":"Parent legal unit (offices only).","x-doc":{"text":"Parent legal unit (offices only)."}},"postalAddress":{"type":"object","properties":{"countrySubdivision":{"type":"string","description":"The country subdivision (optional).","x-doc":{"text":"The country subdivision (optional)."}},"city":{"type":"string","description":"The name of the city.","x-doc":{"text":"The name of the city."}},"postalCode":{"type":"string","description":"The postal code of the address.","x-doc":{"text":"The postal code of the address."}},"addressLine1":{"type":"string","description":"The first line of the address.","x-doc":{"text":"The first line of the address."}},"addressLine2":{"type":"string","description":"The second line of the address (optional).","x-doc":{"text":"The second line of the address (optional)."}},"addressLine3":{"type":"string","description":"The third line of the address (optional).","x-doc":{"text":"The third line of the address (optional)."}}},"required":["city","postalCode","addressLine1"]},"disclosureStatus":{"type":"string","enum":["Public","Restricted","NoSolicitation"],"description":"Defines how information about the entity may be disclosed: Public = fully disclosable, Restricted = partially disclosable, NoSolicitation = refuses commercial prospecting.","x-doc":{"text":"Defines how information about the entity may be disclosed: Public = fully disclosable, Restricted = partially disclosable, NoSolicitation = refuses commercial prospecting."}},"chorusPro":{"type":"object","properties":{"engagementJuridique":{"type":"boolean","description":"Whether the public entity requires a legal commitment number (engagement juridique) to be provided on invoices.","x-doc":{"text":"Whether the public entity requires a legal commitment number (engagement juridique) to be provided on invoices."}},"service":{"type":"boolean","description":"Whether the public entity requires a service code to be provided on invoices.","x-doc":{"text":"Whether the public entity requires a service code to be provided on invoices."}},"engJurServ":{"type":"boolean","description":"Whether the public entity requires either a service code or a legal commitment number on invoices.","x-doc":{"text":"Whether the public entity requires either a service code or a legal commitment number on invoices."}},"moa":{"type":"boolean","description":"Whether the public entity acts as a contracting authority (MOA - Maîtrise d’Ouvrage) and receives construction-work invoices in addition to standard invoices.","x-doc":{"text":"Whether the public entity acts as a contracting authority (MOA - Maîtrise d’Ouvrage) and receives construction-work invoices in addition to standard invoices."}},"moaUnique":{"type":"boolean","description":"Whether the public entity exclusively acts as a contracting authority (MOA) and therefore only receives construction-work invoices.","x-doc":{"text":"Whether the public entity exclusively acts as a contracting authority (MOA) and therefore only receives construction-work invoices."}},"statutMiseEnPaiement":{"type":"boolean","description":"Whether the public entity manages and publishes invoice payment status information.","x-doc":{"text":"Whether the public entity manages and publishes invoice payment status information."}}},"description":"Chorus Pro specific requirements and capabilities for French public sector entities.","x-doc":{"text":"Chorus Pro specific requirements and capabilities for French public sector entities."}},"operatorRelation":{"type":"object","nullable":true,"properties":{"data":{"type":"object","properties":{"header":{"type":"array","items":{"type":"object","properties":{"key":{"type":"string","minLength":1,"pattern":"^[!#$%&'*+.^_`|~0-9A-Za-z-]+$"},"value":{"type":"string","minLength":1,"pattern":"^\\S+$"}},"required":["key","value"]},"maxItems":5,"description":"Will be added to the webhook request into the header.","x-doc":{"text":"Will be added to the webhook request into the header."}},"query":{"type":"array","items":{"type":"object","properties":{"key":{"type":"string","minLength":1,"pattern":"^[!#$%&'*+.^_`|~0-9A-Za-z-]+$"},"value":{"type":"string","minLength":1,"pattern":"^\\S+$"}},"required":["key","value"]},"maxItems":5,"description":"Will be added to the webhook request as query parameter.","x-doc":{"text":"Will be added to the webhook request as query parameter."}},"param":{"type":"array","items":{"type":"object","properties":{"key":{"type":"string","pattern":"^:"},"value":{"type":"string","minLength":1,"pattern":"^\\S+$"}},"required":["key","value"]},"maxItems":3,"description":"Will be added to the webhook request as path parameter.","x-doc":{"text":"Will be added to the webhook request as path parameter.","more":"Use the :$key format for keys. Example: { key: \":companyId\", value: \"123456789\" }"}},"custom":{"type":"object","additionalProperties":{"nullable":true}}},"description":"Any kind of specific data","x-doc":{"text":"Any kind of specific data","more":"Included in the webhook payload sent to your endpoint."}},"direction":{"type":"string","nullable":true,"enum":["OUTBOUND","INBOUND"],"description":"Optional direction filter for the business entity relation (bidirectional if null or omitted).","x-doc":{"text":"Optional direction filter for the business entity relation (bidirectional if null or omitted).","array":[{"code":"OUTBOUND","label":"An invoice or status issued to a customer or client"},{"code":"INBOUND","label":"An invoice or status received from a supplier or vendor"}]}}}},"identifiers":{"type":"array","items":{"type":"object","properties":{"businessEntityIdentifierId":{"type":"string","format":"uuid","description":"Unique identifier for the identifier.","x-doc":{"text":"Unique identifier for the identifier."}},"type":{"type":"string","enum":["LEGAL_IDENTIFIER","OFFICE_IDENTIFIER","ROUTING_CODE","SUFFIX"],"description":"Type of identifier.","x-doc":{"text":"Type of identifier.","array":[{"code":"LEGAL_IDENTIFIER","label":"Identifier representing a legal unit."},{"code":"OFFICE_IDENTIFIER","label":"Identifier representing an office (establishment)."},{"code":"ROUTING_CODE","label":"Routing code used for invoice delivery."},{"code":"SUFFIX","label":"Suffix appended to an identifier for routing purposes."}]}},"scheme":{"type":"string","pattern":"^\\d{4}$","description":"Scheme of the identifier.","x-doc":{"text":"Scheme of the identifier."}},"value":{"type":"string","pattern":"^[a-zA-Z0-9-_]+$","description":"Value of the identifier.","x-doc":{"text":"Value of the identifier."}},"label":{"type":"string","description":"Label of the identifier.","x-doc":{"text":"Label of the identifier."}},"networkRegistered":{"type":"array","items":{"type":"object","properties":{"directoryId":{"type":"string","format":"uuid","description":"Unique identifier for the directory entry.","x-doc":{"text":"Unique identifier for the directory entry."}},"networkId":{"type":"string","format":"uuid","description":"Unique identifier for the registered network.","x-doc":{"text":"Unique identifier for the registered network."}},"networkIdentifier":{"type":"string","enum":["DOMESTIC_FR","PEPPOL_INTERNATIONAL"],"description":"The registered network.","x-doc":{"text":"The registered network.","array":[{"code":"DOMESTIC_FR","label":"French domestic e-invoicing network (PPF/PDP)."},{"code":"PEPPOL_INTERNATIONAL","label":"Peppol international e-invoicing network."}]}},"directoryAddress":{"type":"string","description":"Address used in the network to identify the business entity","x-doc":{"text":"Address used in the network to identify the business entity"}},"isSelfBilling":{"type":"boolean","description":"Whether this network registration accepts self-billing invoices.","x-doc":{"text":"Whether this network registration accepts self-billing invoices."}},"status":{"type":"string","enum":["PENDING_PEPPOL_RELEASE"],"description":"Pending state of the registration, absent when the registration is settled.","x-doc":{"text":"Pending state of the registration, absent when the registration is settled.","array":[{"code":"PENDING_PEPPOL_RELEASE","label":"The address was removed from the French directory by the PPF, or its validity period ended, but it is still registered in our Peppol SMP so incoming invoices keep being routed. It is settled once the address is explicitly unregistered or registered again."}]}},"validFrom":{"type":"string","description":"Address validity start date (White Label ONLY)","x-doc":{"text":"Address validity start date (White Label ONLY)"}},"validTo":{"type":"string","description":"Address validity end date (White Label ONLY)","x-doc":{"text":"Address validity end date (White Label ONLY)"}},"platformDetail":{"type":"object","properties":{"name":{"type":"string"},"legalIdentifier":{"type":"string"},"contact":{"type":"string"}},"required":["name","legalIdentifier","contact"],"additionalProperties":false,"description":"Linked platform details (White Label ONLY)","x-doc":{"text":"Linked platform details (White Label ONLY)"}}},"required":["directoryId","networkId","networkIdentifier","directoryAddress"]},"description":"List of registered networks.","x-doc":{"text":"List of registered networks."}},"postalAddress":{"type":"object","properties":{"countrySubdivision":{"type":"string","description":"The country subdivision (optional).","x-doc":{"text":"The country subdivision (optional)."}},"city":{"type":"string","description":"The name of the city.","x-doc":{"text":"The name of the city."}},"postalCode":{"type":"string","description":"The postal code of the address.","x-doc":{"text":"The postal code of the address."}},"addressLine1":{"type":"string","description":"The first line of the address.","x-doc":{"text":"The first line of the address."}},"addressLine2":{"type":"string","description":"The second line of the address (optional).","x-doc":{"text":"The second line of the address (optional)."}},"addressLine3":{"type":"string","description":"The third line of the address (optional).","x-doc":{"text":"The third line of the address (optional)."}}},"required":["city","postalCode","addressLine1"],"description":"Only available on some French routing code","x-doc":{"text":"Only available on some French routing code"}}},"required":["businessEntityIdentifierId","type","scheme","value"]}}},"required":["name","country","scope","identifierScheme","identifierValue"],"additionalProperties":false},"examples":{"businessEntityAddOfficeExampleBody":{"summary":"Add a Belgian office","value":{"name":"IOPOLE Belgique","country":"BE","scope":"PRIMARY","identifierScheme":"0193","identifierValue":"51144456707865 (UBL.BE Party Identifier)","postalAddress":{"countrySubdivision":"namur","city":"Bruxelle","postalCode":"1000","addressLine1":"line 1","addressLine2":"line 2","addressLine3":"line 3"},"operatorRelation":{"direction":"OUTBOUND"}}}}}}},"responses":{"201":{"description":"Created office business entity id and identifier id","content":{"application/json":{"schema":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["WEBHOOK","SECRET","STREAM","INVOICE","STATUS","BUSINESS_ENTITY","BUSINESS_ENTITY_IDENTIFIER","DIRECTORY","EDI_MESSAGE"],"description":"The type of the response object.","x-doc":{"text":"The type of the response object."}},"id":{"type":"string","format":"uuid","description":"The unique identifier for the created element.","x-doc":{"text":"The unique identifier for the created element."}}},"required":["type","id"],"description":"Response model for the element creation response.","x-doc":{"text":"Response model for the element creation response."}}},"example":{"businessEntityAddOfficeExampleResponse":{"summary":"Created business entity id and identifier id","value":[{"type":"BUSINESS_ENTITY","id":"f47ac10b-58cc-4372-a567-0e02b2c3d479"},{"type":"BUSINESS_ENTITY_IDENTIFIER","id":"a67ac10b-58cc-4372-a567-0e02b2c3d123"}]}}}},"x-doc":{"text":"Created office business entity id and identifier id"}},"400":{"description":"Validation - Request or data validation failure (ex : invalid identifier, ...).","x-doc":{"text":"Validation - Request or data validation failure (ex : invalid identifier, ...)."}},"401":{"description":"Unauthorized - Authentication is required and has failed or has not yet been provided.","x-doc":{"text":"Unauthorized - Authentication is required and has failed or has not yet been provided."}},"403":{"description":"Forbidden - The server understood the request, but it refuses to authorize it.","x-doc":{"text":"Forbidden - The server understood the request, but it refuses to authorize it."}},"404":{"description":"Not found.\n\nPossible error codes:\n- `BUSINESS_ENTITY_ADD_INVALID_PARENT_TYPE` — The parent entity provided is not a legal unit","x-doc":{"text":"Not found.\n\nPossible error codes:\n- `BUSINESS_ENTITY_ADD_INVALID_PARENT_TYPE` — The parent entity provided is not a legal unit"}},"409":{"description":"Conflict - The request could not be completed. A business entity with the same identifiers already exists.","x-doc":{"text":"Conflict - The request could not be completed. A business entity with the same identifiers already exists."}}},"x-doc":{"text":"🎯 **Purpose**\n\nCreate a **office** in the operator directory (no claim required).\n\n⚠️**🇫🇷️️French reform context**\n\nThis endpoint **must NOT be used** in the context of the **French e-invoicing reform**.\nTo onboard or associate a legal unit in this context, use the **claim endpoint** instead.\n\n⚠️ **Important – Enrollment vs registration**\n\nThis endpoint **must NOT be used** if the business entity has already been enrolled\nthrough the **enrollment endpoint**.\nEnrollment automatically handles all creation."}}},"/v1/config/business/entity/{businessEntityId}/claim":{"post":{"summary":"Configure an operator business entity management","description":"🎯 **Purpose**\n\nUse this endpoint to **claim (associate) a French or international business entity**\nwith the current operator.\nIf the business entity already exists in the system, it will be **associated** with the operator;\n\nℹ️ **Already owned entities**\n\nIf the business entity was **created by the current operator**,\nthe claim is **already in place** and this endpoint **does not need to be called**.\n\n⚠️ **Important – Enrollment vs registration**\n\nThis endpoint **must NOT be used** if the business entity has already been enrolled\nthrough the **enrollment endpoint**.\nEnrollment automatically handles all creation and association.","tags":["Business Entity Claim"],"security":[{"oauth2ClientCredentials":[]}],"parameters":[{"in":"header","name":"customer-id","description":"The unique identifier for the customer.","required":false,"schema":{"type":"string","format":"uuid"},"x-doc":{"text":"The unique identifier for the customer."}},{"in":"path","name":"businessEntityId","description":"The business entity id.","required":true,"schema":{"type":"string","format":"uuid"},"x-doc":{"text":"The business entity id."}}],"requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object","nullable":true,"properties":{"data":{"type":"object","properties":{"header":{"type":"array","items":{"type":"object","properties":{"key":{"type":"string","minLength":1,"pattern":"^[!#$%&'*+.^_`|~0-9A-Za-z-]+$"},"value":{"type":"string","minLength":1,"pattern":"^\\S+$"}},"required":["key","value"]},"maxItems":5,"description":"Will be added to the webhook request into the header.","x-doc":{"text":"Will be added to the webhook request into the header."}},"query":{"type":"array","items":{"type":"object","properties":{"key":{"type":"string","minLength":1,"pattern":"^[!#$%&'*+.^_`|~0-9A-Za-z-]+$"},"value":{"type":"string","minLength":1,"pattern":"^\\S+$"}},"required":["key","value"]},"maxItems":5,"description":"Will be added to the webhook request as query parameter.","x-doc":{"text":"Will be added to the webhook request as query parameter."}},"param":{"type":"array","items":{"type":"object","properties":{"key":{"type":"string","pattern":"^:"},"value":{"type":"string","minLength":1,"pattern":"^\\S+$"}},"required":["key","value"]},"maxItems":3,"description":"Will be added to the webhook request as path parameter.","x-doc":{"text":"Will be added to the webhook request as path parameter.","more":"Use the :$key format for keys. Example: { key: \":companyId\", value: \"123456789\" }"}},"custom":{"type":"object","additionalProperties":{"nullable":true}}},"description":"Any kind of specific data","x-doc":{"text":"Any kind of specific data","more":"Included in the webhook payload sent to your endpoint."}},"direction":{"type":"string","nullable":true,"enum":["OUTBOUND","INBOUND"],"description":"Optional direction filter for the business entity relation (bidirectional if null or omitted).","x-doc":{"text":"Optional direction filter for the business entity relation (bidirectional if null or omitted).","array":[{"code":"OUTBOUND","label":"An invoice or status issued to a customer or client"},{"code":"INBOUND","label":"An invoice or status received from a supplier or vendor"}]}}}},"examples":{"businessEntityClaimExampleBidirectionalNoData":{"summary":"Claim (Bidirectional)","value":{}},"businessEntityClaimExampleOutboundNoData":{"summary":"Claim (Outbound only)","value":{"direction":"OUTBOUND"}},"businessEntityClaimExampleWithData":{"summary":"Claim (Bidirectional, Associate custom data into header)","value":{"data":{"header":[{"key":"X-Client-ID","value":"12345"}]}}},"businessEntityClaimExampleOutboundWithData":{"summary":"Claim (Inbound only, Associate custom data into query and header and param)","value":{"direction":"INBOUND","data":{"header":[{"key":"X-Client-ID","value":"12345"}],"query":[{"key":"resourceID","value":"67890"},{"key":"priority","value":"high"}],"param":[{"key":"tenantId","value":"12345"}]}}}}}}},"responses":{"201":{"description":"Business entity configuration done","content":{"application/json":{"schema":{"type":"object","properties":{"type":{"type":"string","enum":["WEBHOOK","SECRET","STREAM","INVOICE","STATUS","BUSINESS_ENTITY","BUSINESS_ENTITY_IDENTIFIER","DIRECTORY","EDI_MESSAGE"],"description":"The type of the response object.","x-doc":{"text":"The type of the response object."}},"id":{"type":"string","format":"uuid","description":"The unique identifier for the created element.","x-doc":{"text":"The unique identifier for the created element."}}},"required":["type","id"],"description":"Response model for the element creation response.","x-doc":{"text":"Response model for the element creation response."}},"examples":{"businessEntityClaimExampleResponse":{"summary":"Registered identifier into network","value":{"type":"BUSINESS_ENTITY","id":"f47ac10b-58cc-4372-a567-0e02b2c3d479"}}}}},"x-doc":{"text":"Business entity configuration done"}},"400":{"description":"Validation - Request validation failure.","x-doc":{"text":"Validation - Request validation failure."}},"401":{"description":"Unauthorized - Authentication is required and has failed or has not yet been provided.","x-doc":{"text":"Unauthorized - Authentication is required and has failed or has not yet been provided."}},"403":{"description":"Forbidden - The server understood the request, but it refuses to authorize it.","x-doc":{"text":"Forbidden - The server understood the request, but it refuses to authorize it."}},"404":{"description":"Not found.\n\nPossible error codes:\n- `BUSINESS_ENTITY_NOT_FOUND` — The business entity does not exist","x-doc":{"text":"Not found.\n\nPossible error codes:\n- `BUSINESS_ENTITY_NOT_FOUND` — The business entity does not exist"}},"409":{"description":"Conflict.\n\nPossible error codes:\n- `BUSINESS_ENTITY_CLAIM_ALREADY_CLAIMED_BY_SELF` — The entity is already claimed by the current operator","x-doc":{"text":"Conflict.\n\nPossible error codes:\n- `BUSINESS_ENTITY_CLAIM_ALREADY_CLAIMED_BY_SELF` — The entity is already claimed by the current operator"}}},"x-doc":{"text":"🎯 **Purpose**\n\nUse this endpoint to **claim (associate) a French or international business entity**\nwith the current operator.\nIf the business entity already exists in the system, it will be **associated** with the operator;\n\nℹ️ **Already owned entities**\n\nIf the business entity was **created by the current operator**,\nthe claim is **already in place** and this endpoint **does not need to be called**.\n\n⚠️ **Important – Enrollment vs registration**\n\nThis endpoint **must NOT be used** if the business entity has already been enrolled\nthrough the **enrollment endpoint**.\nEnrollment automatically handles all creation and association."}},"put":{"summary":"Update an operator business entity management configuration","description":"🎯 **Purpose**\n\nUpdate the **claim configuration** for a business entity **already owned by the current operator**.\n\n⚠️ **Ownership requirement**\n\nThe business entity **must already belong to the current operator**.\nThis endpoint **cannot be used to claim or associate** a new entity.\n\n⚠️ **Warning – Full replacement**\n\nClaim configuration updates are **full replacements**.\nYou must always provide the **complete configuration object**;\nany field not included in the update request will be **removed**.","tags":["Business Entity Claim"],"security":[{"oauth2ClientCredentials":[]}],"parameters":[{"in":"header","name":"customer-id","description":"The unique identifier for the customer.","required":false,"schema":{"type":"string","format":"uuid"},"x-doc":{"text":"The unique identifier for the customer."}},{"in":"path","name":"businessEntityId","description":"The business entity id.","required":true,"schema":{"type":"string","format":"uuid"},"x-doc":{"text":"The business entity id."}}],"requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object","nullable":true,"properties":{"data":{"type":"object","properties":{"header":{"type":"array","items":{"type":"object","properties":{"key":{"type":"string","minLength":1,"pattern":"^[!#$%&'*+.^_`|~0-9A-Za-z-]+$"},"value":{"type":"string","minLength":1,"pattern":"^\\S+$"}},"required":["key","value"]},"maxItems":5,"description":"Will be added to the webhook request into the header.","x-doc":{"text":"Will be added to the webhook request into the header."}},"query":{"type":"array","items":{"type":"object","properties":{"key":{"type":"string","minLength":1,"pattern":"^[!#$%&'*+.^_`|~0-9A-Za-z-]+$"},"value":{"type":"string","minLength":1,"pattern":"^\\S+$"}},"required":["key","value"]},"maxItems":5,"description":"Will be added to the webhook request as query parameter.","x-doc":{"text":"Will be added to the webhook request as query parameter."}},"param":{"type":"array","items":{"type":"object","properties":{"key":{"type":"string","pattern":"^:"},"value":{"type":"string","minLength":1,"pattern":"^\\S+$"}},"required":["key","value"]},"maxItems":3,"description":"Will be added to the webhook request as path parameter.","x-doc":{"text":"Will be added to the webhook request as path parameter.","more":"Use the :$key format for keys. Example: { key: \":companyId\", value: \"123456789\" }"}},"custom":{"type":"object","additionalProperties":{"nullable":true}}},"description":"Any kind of specific data","x-doc":{"text":"Any kind of specific data","more":"Included in the webhook payload sent to your endpoint."}},"direction":{"type":"string","nullable":true,"enum":["OUTBOUND","INBOUND"],"description":"Optional direction filter for the business entity relation (bidirectional if null or omitted).","x-doc":{"text":"Optional direction filter for the business entity relation (bidirectional if null or omitted).","array":[{"code":"OUTBOUND","label":"An invoice or status issued to a customer or client"},{"code":"INBOUND","label":"An invoice or status received from a supplier or vendor"}]}}}},"examples":{"businessEntityClaimUpdateExampleOnlyDirectionA":{"summary":"Claim update only direction (Outbound only)","value":{"direction":"OUTBOUND"}},"businessEntityClaimUpdateExampleOnlyDirectionB":{"summary":"Claim update only direction (bidirectional)","value":{"direction":null}},"businessEntityClaimUpdateExampleOnlyData":{"summary":"Claim update only data","value":{"data":{"header":[{"key":"X-Client-ID","value":"12345"}]}}},"businessEntityClaimUpdateExampleDataAndDirectionA":{"summary":"Claim update data and direction (Outbound only)","value":{"direction":"OUTBOUND","data":{"header":[{"key":"X-Client-ID","value":"12345"}]}}},"businessEntityClaimUpdateExampleDataAndDirectionB":{"summary":"Claim update data and direction (Bidirectional)","value":{"direction":null,"data":{"header":[{"key":"X-Client-ID","value":"12345"}]}}}}}}},"responses":{"201":{"description":"Business entity configuration done","content":{"application/json":{"schema":{"type":"object","properties":{"type":{"type":"string","enum":["WEBHOOK","SECRET","STREAM","INVOICE","STATUS","BUSINESS_ENTITY","BUSINESS_ENTITY_IDENTIFIER","DIRECTORY","EDI_MESSAGE"],"description":"The type of the response object.","x-doc":{"text":"The type of the response object."}},"id":{"type":"string","format":"uuid","description":"The unique identifier for the created element.","x-doc":{"text":"The unique identifier for the created element."}}},"required":["type","id"],"description":"Response model for the element creation response.","x-doc":{"text":"Response model for the element creation response."}},"examples":{"businessEntityClaimExampleResponse":{"summary":"Registered identifier into network","value":{"type":"BUSINESS_ENTITY","id":"f47ac10b-58cc-4372-a567-0e02b2c3d479"}}}}},"x-doc":{"text":"Business entity configuration done"}},"400":{"description":"Validation - Request validation failure.","x-doc":{"text":"Validation - Request validation failure."}},"401":{"description":"Unauthorized - Authentication is required and has failed or has not yet been provided.","x-doc":{"text":"Unauthorized - Authentication is required and has failed or has not yet been provided."}},"403":{"description":"Forbidden - The server understood the request, but it refuses to authorize it.","x-doc":{"text":"Forbidden - The server understood the request, but it refuses to authorize it."}},"404":{"description":"Not found or conflict.\n\nPossible error codes:\n- `BUSINESS_ENTITY_NOT_FOUND` — The business entity does not exist\n- `BUSINESS_ENTITY_OPERATOR_RELATION_NOT_FOUND` — The entity is not claimed by the current operator\n- `BUSINESS_ENTITY_CLAIM_UPDATE_ACTIVE_REGISTRATION_CONFLICT` — Cannot switch to OUTBOUND-only: active INBOUND network registrations exist","x-doc":{"text":"Not found or conflict.\n\nPossible error codes:\n- `BUSINESS_ENTITY_NOT_FOUND` — The business entity does not exist\n- `BUSINESS_ENTITY_OPERATOR_RELATION_NOT_FOUND` — The entity is not claimed by the current operator\n- `BUSINESS_ENTITY_CLAIM_UPDATE_ACTIVE_REGISTRATION_CONFLICT` — Cannot switch to OUTBOUND-only: active INBOUND network registrations exist"}}},"x-doc":{"text":"🎯 **Purpose**\n\nUpdate the **claim configuration** for a business entity **already owned by the current operator**.\n\n⚠️ **Ownership requirement**\n\nThe business entity **must already belong to the current operator**.\nThis endpoint **cannot be used to claim or associate** a new entity.\n\n⚠️ **Warning – Full replacement**\n\nClaim configuration updates are **full replacements**.\nYou must always provide the **complete configuration object**;\nany field not included in the update request will be **removed**."}},"delete":{"summary":"Remove an operator business entity management","description":"🎯 **Purpose**\n\nRemove a business entity from the operator directory.\n\n✅ **Eligibility condition**\n\nA business entity **can be unclaimed only if there is no active registration associated with it**.\nIf at least one active registration exists, the unclaim operation will be **rejected**.\n\n⚠️ **Important**\n\nOnce the unclaim operation succeeds, **all `operatorRelation` data will be permanently removed**.","tags":["Business Entity Claim"],"security":[{"oauth2ClientCredentials":[]}],"parameters":[{"in":"header","name":"customer-id","description":"The unique identifier for the customer.","required":false,"schema":{"type":"string","format":"uuid"},"x-doc":{"text":"The unique identifier for the customer."}},{"in":"path","name":"businessEntityId","description":"The business entity id.","required":true,"schema":{"type":"string","format":"uuid"},"x-doc":{"text":"The business entity id."}}],"responses":{"204":{"description":"Business entity link with operator removed","x-doc":{"text":"Business entity link with operator removed"}},"400":{"description":"Validation - Request validation failure.","x-doc":{"text":"Validation - Request validation failure."}},"401":{"description":"Unauthorized - Authentication is required and has failed or has not yet been provided.","x-doc":{"text":"Unauthorized - Authentication is required and has failed or has not yet been provided."}},"403":{"description":"Forbidden - The server understood the request, but it refuses to authorize it.","x-doc":{"text":"Forbidden - The server understood the request, but it refuses to authorize it."}},"404":{"description":"Not found or conflict.\n\nPossible error codes:\n- `BUSINESS_ENTITY_NOT_FOUND` — The business entity does not exist\n- `BUSINESS_ENTITY_UNCLAIM_HAS_ACTIVE_REGISTRATIONS` — Cannot unclaim: active network registrations exist — unregister all identifiers first\n- `BUSINESS_ENTITY_OPERATOR_RELATION_NOT_FOUND` — The entity is not claimed by the current operator","x-doc":{"text":"Not found or conflict.\n\nPossible error codes:\n- `BUSINESS_ENTITY_NOT_FOUND` — The business entity does not exist\n- `BUSINESS_ENTITY_UNCLAIM_HAS_ACTIVE_REGISTRATIONS` — Cannot unclaim: active network registrations exist — unregister all identifiers first\n- `BUSINESS_ENTITY_OPERATOR_RELATION_NOT_FOUND` — The entity is not claimed by the current operator"}}},"x-doc":{"text":"🎯 **Purpose**\n\nRemove a business entity from the operator directory.\n\n✅ **Eligibility condition**\n\nA business entity **can be unclaimed only if there is no active registration associated with it**.\nIf at least one active registration exists, the unclaim operation will be **rejected**.\n\n⚠️ **Important**\n\nOnce the unclaim operation succeeds, **all `operatorRelation` data will be permanently removed**."}}},"/v1/config/business/entity/scheme/{identifierScheme}/value/{identifierValue}/claim":{"post":{"summary":"Configure an operator business entity management","description":"🎯 **Purpose**\n\nUse this endpoint to **claim (associate) a French or international business entity**\nwith the current operator.\nIf the business entity already exists in the system, it will be **associated** with the operator;\n\nℹ️ **Already owned entities**\n\nIf the business entity was **created by the current operator**,\nthe claim is **already in place** and this endpoint **does not need to be called**.\n\n⚠️ **Important – Enrollment vs registration**\n\nThis endpoint **must NOT be used** if the business entity has already been enrolled\nthrough the **enrollment endpoint**.\nEnrollment automatically handles all creation and association.","tags":["Business Entity Claim"],"security":[{"oauth2ClientCredentials":[]}],"parameters":[{"in":"header","name":"customer-id","description":"The unique identifier for the customer.","required":false,"schema":{"type":"string","format":"uuid"},"x-doc":{"text":"The unique identifier for the customer."}},{"in":"path","name":"identifierScheme","description":"Scheme must be exactly 4 characters long","required":true,"schema":{"type":"string","minLength":4,"maxLength":4},"x-doc":{"text":"Scheme must be exactly 4 characters long"}},{"in":"path","name":"identifierValue","description":"Value associated with the identifier (e.g., 'SIREN').","required":true,"schema":{"type":"string"},"x-doc":{"text":"Value associated with the identifier (e.g., 'SIREN')."}}],"requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object","nullable":true,"properties":{"data":{"type":"object","properties":{"header":{"type":"array","items":{"type":"object","properties":{"key":{"type":"string","minLength":1,"pattern":"^[!#$%&'*+.^_`|~0-9A-Za-z-]+$"},"value":{"type":"string","minLength":1,"pattern":"^\\S+$"}},"required":["key","value"]},"maxItems":5,"description":"Will be added to the webhook request into the header.","x-doc":{"text":"Will be added to the webhook request into the header."}},"query":{"type":"array","items":{"type":"object","properties":{"key":{"type":"string","minLength":1,"pattern":"^[!#$%&'*+.^_`|~0-9A-Za-z-]+$"},"value":{"type":"string","minLength":1,"pattern":"^\\S+$"}},"required":["key","value"]},"maxItems":5,"description":"Will be added to the webhook request as query parameter.","x-doc":{"text":"Will be added to the webhook request as query parameter."}},"param":{"type":"array","items":{"type":"object","properties":{"key":{"type":"string","pattern":"^:"},"value":{"type":"string","minLength":1,"pattern":"^\\S+$"}},"required":["key","value"]},"maxItems":3,"description":"Will be added to the webhook request as path parameter.","x-doc":{"text":"Will be added to the webhook request as path parameter.","more":"Use the :$key format for keys. Example: { key: \":companyId\", value: \"123456789\" }"}},"custom":{"type":"object","additionalProperties":{"nullable":true}}},"description":"Any kind of specific data","x-doc":{"text":"Any kind of specific data","more":"Included in the webhook payload sent to your endpoint."}},"direction":{"type":"string","nullable":true,"enum":["OUTBOUND","INBOUND"],"description":"Optional direction filter for the business entity relation (bidirectional if null or omitted).","x-doc":{"text":"Optional direction filter for the business entity relation (bidirectional if null or omitted).","array":[{"code":"OUTBOUND","label":"An invoice or status issued to a customer or client"},{"code":"INBOUND","label":"An invoice or status received from a supplier or vendor"}]}}}},"examples":{"businessEntityClaimExampleBidirectionalNoData":{"summary":"Claim (Bidirectional)","value":{}},"businessEntityClaimExampleOutboundNoData":{"summary":"Claim (Outbound only)","value":{"direction":"OUTBOUND"}},"businessEntityClaimExampleWithData":{"summary":"Claim (Bidirectional, Associate custom data into header)","value":{"data":{"header":[{"key":"X-Client-ID","value":"12345"}]}}},"businessEntityClaimExampleOutboundWithData":{"summary":"Claim (Inbound only, Associate custom data into query and header and param)","value":{"direction":"INBOUND","data":{"header":[{"key":"X-Client-ID","value":"12345"}],"query":[{"key":"resourceID","value":"67890"},{"key":"priority","value":"high"}],"param":[{"key":"tenantId","value":"12345"}]}}}}}}},"responses":{"201":{"description":"Business entity configuration done","content":{"application/json":{"schema":{"type":"object","properties":{"type":{"type":"string","enum":["WEBHOOK","SECRET","STREAM","INVOICE","STATUS","BUSINESS_ENTITY","BUSINESS_ENTITY_IDENTIFIER","DIRECTORY","EDI_MESSAGE"],"description":"The type of the response object.","x-doc":{"text":"The type of the response object."}},"id":{"type":"string","format":"uuid","description":"The unique identifier for the created element.","x-doc":{"text":"The unique identifier for the created element."}}},"required":["type","id"],"description":"Response model for the element creation response.","x-doc":{"text":"Response model for the element creation response."}},"examples":{"businessEntityClaimExampleResponse":{"summary":"Registered identifier into network","value":{"type":"BUSINESS_ENTITY","id":"f47ac10b-58cc-4372-a567-0e02b2c3d479"}}}}},"x-doc":{"text":"Business entity configuration done"}},"400":{"description":"Validation - Request validation failure.","x-doc":{"text":"Validation - Request validation failure."}},"401":{"description":"Unauthorized - Authentication is required and has failed or has not yet been provided.","x-doc":{"text":"Unauthorized - Authentication is required and has failed or has not yet been provided."}},"403":{"description":"Forbidden - The server understood the request, but it refuses to authorize it.","x-doc":{"text":"Forbidden - The server understood the request, but it refuses to authorize it."}},"404":{"description":"Not found.\n\nPossible error codes:\n- `BUSINESS_ENTITY_NOT_FOUND` — No entity found for the given identifier scheme and value","x-doc":{"text":"Not found.\n\nPossible error codes:\n- `BUSINESS_ENTITY_NOT_FOUND` — No entity found for the given identifier scheme and value"}},"409":{"description":"Conflict.\n\nPossible error codes:\n- `BUSINESS_ENTITY_CLAIM_ALREADY_CLAIMED_BY_SELF` — The entity is already claimed by the current operator","x-doc":{"text":"Conflict.\n\nPossible error codes:\n- `BUSINESS_ENTITY_CLAIM_ALREADY_CLAIMED_BY_SELF` — The entity is already claimed by the current operator"}}},"x-doc":{"text":"🎯 **Purpose**\n\nUse this endpoint to **claim (associate) a French or international business entity**\nwith the current operator.\nIf the business entity already exists in the system, it will be **associated** with the operator;\n\nℹ️ **Already owned entities**\n\nIf the business entity was **created by the current operator**,\nthe claim is **already in place** and this endpoint **does not need to be called**.\n\n⚠️ **Important – Enrollment vs registration**\n\nThis endpoint **must NOT be used** if the business entity has already been enrolled\nthrough the **enrollment endpoint**.\nEnrollment automatically handles all creation and association."}}},"/v1/config/business/entity/{businessEntityId}/identifier":{"post":{"summary":"Create a new identifier for a given business entity","description":"Create a new identifier for a given business entity","tags":["Operator Business Entity Identifiers Management"],"security":[{"oauth2ClientCredentials":[]}],"parameters":[{"in":"header","name":"customer-id","description":"The unique identifier for the customer.","required":false,"schema":{"type":"string","format":"uuid"},"x-doc":{"text":"The unique identifier for the customer."}},{"in":"path","name":"businessEntityId","description":"Business Entity id to link with the identifier","required":true,"schema":{"type":"string","format":"uuid"},"x-doc":{"text":"Business Entity id to link with the identifier"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"scheme":{"type":"string","description":"The EAS code (Endpoint Address Scheme) identifies the type of identifier used for parties in electronic invoicing.","x-doc":{"text":"The EAS code (Endpoint Address Scheme) identifies the type of identifier used for parties in electronic invoicing.","more":"Once on the European Commission's webpage, download the latest version of the XLSX file containing the EAS codes. Example: for a French company it can be 0002 (SIREN).","link":{"placeholder":"EAS code list","link":"https://ec.europa.eu/digital-building-blocks/sites/display/DIGITAL/Registry+of+supporting+artefacts+to+implement+EN16931"}}},"value":{"type":"string","pattern":"^[a-zA-Z0-9-_.]+$","description":"Value associated with the identifier (e.g., 'SIREN').","x-doc":{"text":"Value associated with the identifier (e.g., 'SIREN')."}},"label":{"type":"string","description":"Label of the identifier.","x-doc":{"text":"Label of the identifier."}},"postalAddress":{"type":"object","properties":{"countrySubdivision":{"type":"string","description":"The country subdivision (optional).","x-doc":{"text":"The country subdivision (optional)."}},"city":{"type":"string","description":"The name of the city.","x-doc":{"text":"The name of the city."}},"postalCode":{"type":"string","description":"The postal code of the address.","x-doc":{"text":"The postal code of the address."}},"addressLine1":{"type":"string","description":"The first line of the address.","x-doc":{"text":"The first line of the address."}},"addressLine2":{"type":"string","description":"The second line of the address (optional).","x-doc":{"text":"The second line of the address (optional)."}},"addressLine3":{"type":"string","description":"The third line of the address (optional).","x-doc":{"text":"The third line of the address (optional)."}}},"required":["city","postalCode","addressLine1"],"description":"Only available on some French routing code","x-doc":{"text":"Only available on some French routing code"}},"type":{"type":"string","enum":["ROUTING_CODE","SUFFIX"],"description":"Type of identifier.","x-doc":{"text":"Type of identifier.","array":[{"code":"ROUTING_CODE","label":"Routing code used for invoice delivery."},{"code":"SUFFIX","label":"Suffix appended to an identifier for routing purposes."}]}}},"required":["value","type"],"additionalProperties":false},"examples":{"businessEntityAddIdentifierRoutingCodeExampleBody":{"summary":"Add a routing code identifier","value":{"type":"ROUTING_CODE","scheme":"0224","value":"Service_A","label":"Label Service A","postalAddress":{"countrySubdivision":"Herault","city":"Montpellier","postalCode":"34000","addressLine1":"line 1","addressLine2":"line 2","addressLine3":"line 3"}}},"businessEntityAddIdentifierSuffixExampleBody":{"summary":"Add a suffix identifier","value":{"type":"SUFFIX","scheme":"0000","value":"SUF_A"}}}}}},"responses":{"201":{"description":"Created identifier id","content":{"application/json":{"schema":{"type":"object","properties":{"type":{"type":"string","enum":["WEBHOOK","SECRET","STREAM","INVOICE","STATUS","BUSINESS_ENTITY","BUSINESS_ENTITY_IDENTIFIER","DIRECTORY","EDI_MESSAGE"],"description":"The type of the response object.","x-doc":{"text":"The type of the response object."}},"id":{"type":"string","format":"uuid","description":"The unique identifier for the created element.","x-doc":{"text":"The unique identifier for the created element."}}},"required":["type","id"],"description":"Response model for the element creation response.","x-doc":{"text":"Response model for the element creation response."}},"examples":{"businessEntityAddIdentifierExampleResponse":{"summary":"Created identifier id","value":{"type":"BUSINESS_ENTITY_IDENTIFIER","id":"f47ac10b-58cc-4372-a567-0e02b2c3d479"}}}}},"x-doc":{"text":"Created identifier id"}},"400":{"description":"Validation - Request validation failure.","x-doc":{"text":"Validation - Request validation failure."}},"401":{"description":"Unauthorized - Authentication is required and has failed or has not yet been provided.","x-doc":{"text":"Unauthorized - Authentication is required and has failed or has not yet been provided."}},"403":{"description":"Forbidden - The server understood the request, but it refuses to authorize it.","x-doc":{"text":"Forbidden - The server understood the request, but it refuses to authorize it."}},"404":{"description":"Not found or operation not allowed.\n\nPossible error codes:\n- `BUSINESS_ENTITY_NOT_FOUND` — The business entity does not exist\n- `BUSINESS_ENTITY_IDENTIFIER_ADD_NOT_CLAIMED` — The entity is not claimed by the current operator — claim it first\n- `BUSINESS_ENTITY_IDENTIFIER_ADD_OUTBOUND_FORBIDDEN` — Cannot add an identifier to an entity claimed in OUTBOUND-only mode\n- `PPF_ROUTING_CODE_ENTITY_TYPE_INVALID` — A routing code can only be linked to a French office (SIRET) entity\n- `PPF_ROUTING_CODE_SCHEME_INVALID` — Routing code identifier scheme must be 0224\n- `PPF_ROUTING_CODE_LABEL_MISSING` — A label is required when creating a routing code\n- `PPF_SUFFIX_ENTITY_TYPE_INVALID` — A suffix can only be linked to a French legal unit (SIREN) entity","x-doc":{"text":"Not found or operation not allowed.\n\nPossible error codes:\n- `BUSINESS_ENTITY_NOT_FOUND` — The business entity does not exist\n- `BUSINESS_ENTITY_IDENTIFIER_ADD_NOT_CLAIMED` — The entity is not claimed by the current operator — claim it first\n- `BUSINESS_ENTITY_IDENTIFIER_ADD_OUTBOUND_FORBIDDEN` — Cannot add an identifier to an entity claimed in OUTBOUND-only mode\n- `PPF_ROUTING_CODE_ENTITY_TYPE_INVALID` — A routing code can only be linked to a French office (SIRET) entity\n- `PPF_ROUTING_CODE_SCHEME_INVALID` — Routing code identifier scheme must be 0224\n- `PPF_ROUTING_CODE_LABEL_MISSING` — A label is required when creating a routing code\n- `PPF_SUFFIX_ENTITY_TYPE_INVALID` — A suffix can only be linked to a French legal unit (SIREN) entity"}},"409":{"description":"Conflict — A business entity identifier with the same unique key already exists.\n\nPossible error codes:\n- `BUSINESS_ENTITY_IDENTIFIER_ADD_ALREADY_EXISTS` — This scheme/value is already declared","x-doc":{"text":"Conflict — A business entity identifier with the same unique key already exists.\n\nPossible error codes:\n- `BUSINESS_ENTITY_IDENTIFIER_ADD_ALREADY_EXISTS` — This scheme/value is already declared"}}},"x-doc":{"text":"Create a new identifier for a given business entity"}}},"/v1/config/business/entity/scheme/{identifierScheme}/value/{identifierValue}/identifier":{"post":{"summary":"Create a new identifier for a given business entity","description":"Create a new identifier for a given business entity","tags":["Operator Business Entity Identifiers Management"],"security":[{"oauth2ClientCredentials":[]}],"parameters":[{"in":"header","name":"customer-id","description":"The unique identifier for the customer.","required":false,"schema":{"type":"string","format":"uuid"},"x-doc":{"text":"The unique identifier for the customer."}},{"in":"path","name":"identifierScheme","description":"The business entity identifier scheme.","required":true,"schema":{"type":"string","minLength":4,"maxLength":4},"x-doc":{"text":"The business entity identifier scheme."}},{"in":"path","name":"identifierValue","description":"Value associated with the identifier (e.g., 'SIREN').","required":true,"schema":{"type":"string"},"x-doc":{"text":"Value associated with the identifier (e.g., 'SIREN')."}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"scheme":{"type":"string","description":"The EAS code (Endpoint Address Scheme) identifies the type of identifier used for parties in electronic invoicing.","x-doc":{"text":"The EAS code (Endpoint Address Scheme) identifies the type of identifier used for parties in electronic invoicing.","more":"Once on the European Commission's webpage, download the latest version of the XLSX file containing the EAS codes. Example: for a French company it can be 0002 (SIREN).","link":{"placeholder":"EAS code list","link":"https://ec.europa.eu/digital-building-blocks/sites/display/DIGITAL/Registry+of+supporting+artefacts+to+implement+EN16931"}}},"value":{"type":"string","pattern":"^[a-zA-Z0-9-_.]+$","description":"Value associated with the identifier (e.g., 'SIREN').","x-doc":{"text":"Value associated with the identifier (e.g., 'SIREN')."}},"label":{"type":"string","description":"Label of the identifier.","x-doc":{"text":"Label of the identifier."}},"postalAddress":{"type":"object","properties":{"countrySubdivision":{"type":"string","description":"The country subdivision (optional).","x-doc":{"text":"The country subdivision (optional)."}},"city":{"type":"string","description":"The name of the city.","x-doc":{"text":"The name of the city."}},"postalCode":{"type":"string","description":"The postal code of the address.","x-doc":{"text":"The postal code of the address."}},"addressLine1":{"type":"string","description":"The first line of the address.","x-doc":{"text":"The first line of the address."}},"addressLine2":{"type":"string","description":"The second line of the address (optional).","x-doc":{"text":"The second line of the address (optional)."}},"addressLine3":{"type":"string","description":"The third line of the address (optional).","x-doc":{"text":"The third line of the address (optional)."}}},"required":["city","postalCode","addressLine1"],"description":"Only available on some French routing code","x-doc":{"text":"Only available on some French routing code"}},"type":{"type":"string","enum":["ROUTING_CODE","SUFFIX"],"description":"Type of identifier.","x-doc":{"text":"Type of identifier.","array":[{"code":"ROUTING_CODE","label":"Routing code used for invoice delivery."},{"code":"SUFFIX","label":"Suffix appended to an identifier for routing purposes."}]}}},"required":["value","type"],"additionalProperties":false},"examples":{"businessEntityAddIdentifierRoutingCodeExampleBody":{"summary":"Add a routing code identifier","value":{"type":"ROUTING_CODE","scheme":"0224","value":"Service_A","label":"Label Service A","postalAddress":{"countrySubdivision":"Herault","city":"Montpellier","postalCode":"34000","addressLine1":"line 1","addressLine2":"line 2","addressLine3":"line 3"}}},"businessEntityAddIdentifierSuffixExampleBody":{"summary":"Add a suffix identifier","value":{"type":"SUFFIX","scheme":"0000","value":"SUF_A"}}}}}},"responses":{"201":{"description":"Created identifier id","content":{"application/json":{"schema":{"type":"object","properties":{"type":{"type":"string","enum":["WEBHOOK","SECRET","STREAM","INVOICE","STATUS","BUSINESS_ENTITY","BUSINESS_ENTITY_IDENTIFIER","DIRECTORY","EDI_MESSAGE"],"description":"The type of the response object.","x-doc":{"text":"The type of the response object."}},"id":{"type":"string","format":"uuid","description":"The unique identifier for the created element.","x-doc":{"text":"The unique identifier for the created element."}}},"required":["type","id"],"description":"Response model for the element creation response.","x-doc":{"text":"Response model for the element creation response."}},"examples":{"businessEntityAddIdentifierExampleResponse":{"summary":"Created identifier id","value":{"type":"BUSINESS_ENTITY_IDENTIFIER","id":"f47ac10b-58cc-4372-a567-0e02b2c3d479"}}}}},"x-doc":{"text":"Created identifier id"}},"400":{"description":"Validation - Request validation failure.","x-doc":{"text":"Validation - Request validation failure."}},"401":{"description":"Unauthorized - Authentication is required and has failed or has not yet been provided.","x-doc":{"text":"Unauthorized - Authentication is required and has failed or has not yet been provided."}},"403":{"description":"Forbidden - The server understood the request, but it refuses to authorize it.","x-doc":{"text":"Forbidden - The server understood the request, but it refuses to authorize it."}},"404":{"description":"Not found or operation not allowed.\n\nPossible error codes:\n- `BUSINESS_ENTITY_NOT_FOUND` — No entity found for the given identifier scheme and value, or the entity does not exist\n- `BUSINESS_ENTITY_IDENTIFIER_ADD_NOT_CLAIMED` — The entity is not claimed by the current operator — claim it first\n- `BUSINESS_ENTITY_IDENTIFIER_ADD_OUTBOUND_FORBIDDEN` — Cannot add an identifier to an entity claimed in OUTBOUND-only mode\n- `PPF_ROUTING_CODE_ENTITY_TYPE_INVALID` — A routing code can only be linked to a French office (SIRET) entity\n- `PPF_ROUTING_CODE_SCHEME_INVALID` — Routing code identifier scheme must be 0224\n- `PPF_ROUTING_CODE_LABEL_MISSING` — A label is required when creating a routing code\n- `PPF_SUFFIX_ENTITY_TYPE_INVALID` — A suffix can only be linked to a French legal unit (SIREN) entity","x-doc":{"text":"Not found or operation not allowed.\n\nPossible error codes:\n- `BUSINESS_ENTITY_NOT_FOUND` — No entity found for the given identifier scheme and value, or the entity does not exist\n- `BUSINESS_ENTITY_IDENTIFIER_ADD_NOT_CLAIMED` — The entity is not claimed by the current operator — claim it first\n- `BUSINESS_ENTITY_IDENTIFIER_ADD_OUTBOUND_FORBIDDEN` — Cannot add an identifier to an entity claimed in OUTBOUND-only mode\n- `PPF_ROUTING_CODE_ENTITY_TYPE_INVALID` — A routing code can only be linked to a French office (SIRET) entity\n- `PPF_ROUTING_CODE_SCHEME_INVALID` — Routing code identifier scheme must be 0224\n- `PPF_ROUTING_CODE_LABEL_MISSING` — A label is required when creating a routing code\n- `PPF_SUFFIX_ENTITY_TYPE_INVALID` — A suffix can only be linked to a French legal unit (SIREN) entity"}},"409":{"description":"Conflict — A business entity identifier with the same unique key already exists.\n\nPossible error codes:\n- `BUSINESS_ENTITY_IDENTIFIER_ADD_ALREADY_EXISTS` — This scheme/value is already declared","x-doc":{"text":"Conflict — A business entity identifier with the same unique key already exists.\n\nPossible error codes:\n- `BUSINESS_ENTITY_IDENTIFIER_ADD_ALREADY_EXISTS` — This scheme/value is already declared"}}},"x-doc":{"text":"Create a new identifier for a given business entity"}}},"/v1/config/business/entity/identifier/{businessEntityIdentifierId}":{"delete":{"summary":"Remove a business entity identifier","tags":["Operator Business Entity Identifiers Management"],"security":[{"oauth2ClientCredentials":[]}],"parameters":[{"in":"header","name":"customer-id","description":"The unique identifier for the customer.","required":false,"schema":{"type":"string","format":"uuid"},"x-doc":{"text":"The unique identifier for the customer."}},{"in":"path","name":"businessEntityIdentifierId","required":true,"schema":{"type":"string","format":"uuid"}}],"responses":{"204":{"description":"Business identifier entity removed","x-doc":{"text":"Business identifier entity removed"}},"400":{"description":"Validation - Request validation failure.","x-doc":{"text":"Validation - Request validation failure."}},"401":{"description":"Unauthorized - Authentication is required and has failed or has not yet been provided.","x-doc":{"text":"Unauthorized - Authentication is required and has failed or has not yet been provided."}},"403":{"description":"Forbidden - The server understood the request, but it refuses to authorize it.","x-doc":{"text":"Forbidden - The server understood the request, but it refuses to authorize it."}},"404":{"description":"Not found or removal not allowed.\n\nPossible error codes:\n- `BUSINESS_ENTITY_IDENTIFIER_NOT_FOUND` — The business entity identifier does not exist\n- `BUSINESS_ENTITY_IDENTIFIER_REMOVE_STILL_REGISTERED` — The identifier is still registered in a network — unregister it first\n- `BUSINESS_ENTITY_IDENTIFIER_REMOVE_LEGAL_FORBIDDEN` — Legal unit (SIREN) and office (SIRET) base identifiers cannot be removed","x-doc":{"text":"Not found or removal not allowed.\n\nPossible error codes:\n- `BUSINESS_ENTITY_IDENTIFIER_NOT_FOUND` — The business entity identifier does not exist\n- `BUSINESS_ENTITY_IDENTIFIER_REMOVE_STILL_REGISTERED` — The identifier is still registered in a network — unregister it first\n- `BUSINESS_ENTITY_IDENTIFIER_REMOVE_LEGAL_FORBIDDEN` — Legal unit (SIREN) and office (SIRET) base identifiers cannot be removed"}}}}},"/v1/config/business/entity/identifier/{businessEntityIdentifierId}/network/{networkIdentifier}":{"post":{"summary":"Register identifier in a network","description":"🎯 **Purpose**\n\nExecute the **registration of a business entity** in the **target network** using the provided identifier.\n\n🌐 **Network behavior**\n\n- **International network**:\n  - Registers the entity in the **PEPPOL SML (SMK in PreProduction)**\n  - Updates the **PEPPOL Directory**\n- **French domestic network**:\n  - Only **French business entities** can be registered\n  - Performs the same PEPPOL registrations\n  - Additionally updates the French **PPF directory**\n\n🇫🇷 **French network scope**\n\nRegistration in the **French domestic network** is **restricted to French-to-French invoicing**.\nTo **send or receive invoices with international PEPPOL participants**,\nthe business entity **must also be registered in the international network**.\n\n⚠️ **Important – Enrollment vs registration**\n\nThis endpoint **must NOT be used** if the business entity has already been enrolled\nthrough the **enrollment endpoint**.\nEnrollment automatically handles all required registrations.\n\n🔑 **Identifier requirement**\n\n- The **`businessEntityIdentifierId`** must be used to perform the registration.\n- The **`businessEntityId` must NOT be used** for this operation.\n\n⏱️ **Timeout requirement**\n\nImplementers **must configure a timeout of at least 30 seconds** for this endpoint.\n\nThis operation performs calls to the **PEPPOL Directory API**.\nThe PEPPOL Directory service is **known to be intermittently unavailable or slow**,\nwhich can legitimately lead to **long response times**.\n\nUsing a shorter timeout may result in **false failures** even though the registration\nis still being processed successfully.","tags":["Operator Business Entity Registration"],"security":[{"oauth2ClientCredentials":[]}],"parameters":[{"in":"header","name":"customer-id","description":"The unique identifier for the customer.","required":false,"schema":{"type":"string","format":"uuid"},"x-doc":{"text":"The unique identifier for the customer."}},{"in":"path","name":"businessEntityIdentifierId","description":"The unique Iopole Id representing an identifier","required":true,"schema":{"type":"string","format":"uuid"},"x-doc":{"text":"The unique Iopole Id representing an identifier"}},{"in":"path","name":"networkIdentifier","required":true,"description":"Network to register the identifier on.","schema":{"type":"string","enum":["DOMESTIC_FR","PEPPOL_INTERNATIONAL"]},"x-doc":{"text":"Network to register the identifier on.","array":[{"code":"DOMESTIC_FR","label":"French domestic e-invoicing network (PPF/PDP)."},{"code":"PEPPOL_INTERNATIONAL","label":"Peppol international e-invoicing network."}]}},{"in":"query","name":"targetDirectoryId","description":"To be used only when multiple validity periods already exist","required":false,"schema":{"type":"string","format":"uuid"},"x-doc":{"text":"To be used only when multiple validity periods already exist"}}],"requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object","properties":{"validityStartDate":{"type":"string","description":"The date when the business entity will start to be considered as yours (only valid for French entities).","x-doc":{"text":"The date when the business entity will start to be considered as yours (only valid for French entities).","valueDescription":"YYYY-MM-DD","defaultValue":"If omitted, the default value is tomorrow","more":"Must be a future date."}},"validityEndDate":{"type":"string","description":"The date when the business entity will no longer be considered as yours (only valid for French entities).","x-doc":{"text":"The date when the business entity will no longer be considered as yours (only valid for French entities).","valueDescription":"YYYY-MM-DD","defaultValue":"If omitted, no end date is set (i.e. the registration remains valid indefinitely)","more":"Must be greater than validity start date."}},"peppolMigrationKey":{"type":"string","description":"Migration Key to be used for migration from another SMP","x-doc":{"text":"Migration Key to be used for migration from another SMP"}},"allowRequestMigrationKey":{"type":"boolean","description":"If true, the system will try to retrieve a migration key from remote SMP","x-doc":{"text":"If true, the system will try to retrieve a migration key from remote SMP"}},"selfBilling":{"type":"boolean","description":"Enable self-billing invoice reception for this registration","x-doc":{"text":"Enable self-billing invoice reception for this registration"}}}},"examples":{"businessEntityNetworkRegisterNoDataBodyExample":{"summary":"[Default] No date (Body can be omitted)","value":{}},"businessEntityNetworkRegisterWithPeppolMigrationAutoBodyExample":{"summary":"[Default][Peppol] With automatic peppol migration feature (only for Hermes)","value":{"allowRequestMigrationKey":true}},"businessEntityNetworkRegisterWithPeppolMigrationKeyBodyExample":{"summary":"[Default][Peppol] With peppol migration from migration key","value":{"peppolMigrationKey":"migrationKey-Value"}},"businessEntityNetworkRegisterAllDateBodyExample":{"summary":"[French] Start and End Date","value":{"validityStartDate":"2026-03-02","validityEndDate":"2027-08-12"}},"businessEntityNetworkRegisterStartDateBodyExample":{"summary":"[French] Start Date Only","value":{"validityStartDate":"2026-03-02"}},"businessEntityNetworkRegisterEndDateBodyExample":{"summary":"[French] End Date Only","value":{"validityEndDate":"2027-08-12"}},"businessEntityNetworkRegisterWithSelfBillingBodyExample":{"summary":"With self-billing enabled","value":{"selfBilling":true}}}}}},"responses":{"201":{"description":"Business entity registered","content":{"application/json":{"schema":{"type":"object","properties":{"type":{"type":"string","enum":["WEBHOOK","SECRET","STREAM","INVOICE","STATUS","BUSINESS_ENTITY","BUSINESS_ENTITY_IDENTIFIER","DIRECTORY","EDI_MESSAGE"],"description":"The type of the response object.","x-doc":{"text":"The type of the response object."}},"id":{"type":"string","format":"uuid","description":"The unique identifier for the created element.","x-doc":{"text":"The unique identifier for the created element."}}},"required":["type","id"],"description":"Response model for the element creation response.","x-doc":{"text":"Response model for the element creation response."}},"examples":{"businessEntityNetworkRegisterExampleResponse":{"summary":"Registered identifier into network","value":{"type":"DIRECTORY","id":"f47ac10b-58cc-4372-a567-0e02b2c3d479"}}}}},"x-doc":{"text":"Business entity registered"}},"400":{"description":"Validation.\n\nPossible error codes:\n- `BUSINESS_ENTITY_REGISTER_IDENTIFIER_ID_MISSING` — businessEntityIdentifierId is required\n- `BUSINESS_ENTITY_REGISTER_NETWORK_IDENTIFIER_MISSING` — networkIdentifier is required\n- `BUSINESS_ENTITY_REGISTER_INVALID_DATES` — End date must be strictly after start date\n- `DOMESTIC_FR_REGISTER_INVALID_VALIDITY_DATE` — Start/end date must be at least tomorrow (DOMESTIC_FR)\n- `PEPPOL_REGISTER_VALIDITY_DATE_NOT_SUPPORTED` — Validity dates are not supported for PEPPOL_INTERNATIONAL","x-doc":{"text":"Validation.\n\nPossible error codes:\n- `BUSINESS_ENTITY_REGISTER_IDENTIFIER_ID_MISSING` — businessEntityIdentifierId is required\n- `BUSINESS_ENTITY_REGISTER_NETWORK_IDENTIFIER_MISSING` — networkIdentifier is required\n- `BUSINESS_ENTITY_REGISTER_INVALID_DATES` — End date must be strictly after start date\n- `DOMESTIC_FR_REGISTER_INVALID_VALIDITY_DATE` — Start/end date must be at least tomorrow (DOMESTIC_FR)\n- `PEPPOL_REGISTER_VALIDITY_DATE_NOT_SUPPORTED` — Validity dates are not supported for PEPPOL_INTERNATIONAL"}},"401":{"description":"Unauthorized - Authentication is required and has failed or has not yet been provided.","x-doc":{"text":"Unauthorized - Authentication is required and has failed or has not yet been provided."}},"403":{"description":"Forbidden - The server understood the request, but it refuses to authorize it.","x-doc":{"text":"Forbidden - The server understood the request, but it refuses to authorize it."}},"404":{"description":"Not found or registration not allowed.\n\nPossible error codes:\n- `BUSINESS_ENTITY_IDENTIFIER_NOT_FOUND` — The identifier does not exist\n- `BUSINESS_ENTITY_REGISTER_NETWORK_NOT_FOUND` — The target network is not public or does not exist\n- `BUSINESS_ENTITY_NOT_FOUND` — The business entity related to the identifier was not found\n- `BUSINESS_ENTITY_REGISTER_DIRECTION_NOT_INBOUND` — Entity must be claimed with INBOUND or BOTH direction\n- `DOMESTIC_FR_REGISTER_NON_FRENCH_ENTITY_FORBIDDEN` — Only French entities can register in DOMESTIC_FR\n- `DOMESTIC_FR_REGISTER_DIRECTORY_ALREADY_UP_TO_DATE` — No changes required, directory is already up to date\n- `DOMESTIC_FR_REGISTER_INVALID_IDENTIFIER_SCHEME` — Scheme 0224/0000 cannot be used directly; use 0225 with a full address\n- `DOMESTIC_FR_REGISTER_ADDRESS_PARSE_ERROR` — The provided address could not be parsed\n- `DOMESTIC_FR_REGISTER_DB_INTEGRITY_ERROR` — Directory update failed due to a database integrity constraint\n- `PEPPOL_REGISTER_DIRECTORY_ALREADY_UP_TO_DATE` — No changes required, Peppol directory is already up to date\n- `PEPPOL_REGISTER_NO_ACCESS_POINT_CONFIGURED` — No Peppol access point is configured for the current operator\n- `PEPPOL_PARTICIPANT_ALREADY_REGISTERED_ON_OTHER_SMP` — Participant is on a different SMP; provide a migration key","x-doc":{"text":"Not found or registration not allowed.\n\nPossible error codes:\n- `BUSINESS_ENTITY_IDENTIFIER_NOT_FOUND` — The identifier does not exist\n- `BUSINESS_ENTITY_REGISTER_NETWORK_NOT_FOUND` — The target network is not public or does not exist\n- `BUSINESS_ENTITY_NOT_FOUND` — The business entity related to the identifier was not found\n- `BUSINESS_ENTITY_REGISTER_DIRECTION_NOT_INBOUND` — Entity must be claimed with INBOUND or BOTH direction\n- `DOMESTIC_FR_REGISTER_NON_FRENCH_ENTITY_FORBIDDEN` — Only French entities can register in DOMESTIC_FR\n- `DOMESTIC_FR_REGISTER_DIRECTORY_ALREADY_UP_TO_DATE` — No changes required, directory is already up to date\n- `DOMESTIC_FR_REGISTER_INVALID_IDENTIFIER_SCHEME` — Scheme 0224/0000 cannot be used directly; use 0225 with a full address\n- `DOMESTIC_FR_REGISTER_ADDRESS_PARSE_ERROR` — The provided address could not be parsed\n- `DOMESTIC_FR_REGISTER_DB_INTEGRITY_ERROR` — Directory update failed due to a database integrity constraint\n- `PEPPOL_REGISTER_DIRECTORY_ALREADY_UP_TO_DATE` — No changes required, Peppol directory is already up to date\n- `PEPPOL_REGISTER_NO_ACCESS_POINT_CONFIGURED` — No Peppol access point is configured for the current operator\n- `PEPPOL_PARTICIPANT_ALREADY_REGISTERED_ON_OTHER_SMP` — Participant is on a different SMP; provide a migration key"}},"409":{"description":"Conflict.\n\nPossible error codes:\n- `BUSINESS_ENTITY_REGISTER_IDENTIFIER_HELD_BY_OTHER_OPERATOR` — Another operator still holds a directory entry for this identifier. Supply the `peppolMigrationKey` that operator handed out","x-doc":{"text":"Conflict.\n\nPossible error codes:\n- `BUSINESS_ENTITY_REGISTER_IDENTIFIER_HELD_BY_OTHER_OPERATOR` — Another operator still holds a directory entry for this identifier. Supply the `peppolMigrationKey` that operator handed out"}},"500":{"description":"PEPPOL SMP access point failure.\n\nPossible error codes:\n- `PEPPOL_PARTICIPANT_MIGRATION_FAILED` — SMP call to migrate the participant from the previous SMP failed\n- `PEPPOL_PARTICIPANT_REGISTRATION_FAILED` — SMP call to register the participant failed\n- `PEPPOL_PARTICIPANT_ADD_METADATA_FAILED` — SMP call to add service metadata failed\n- `PEPPOL_ACCESSPOINT_HTTP_FAILURE` — The PEPPOL access point returned an unexpected HTTP error","x-doc":{"text":"PEPPOL SMP access point failure.\n\nPossible error codes:\n- `PEPPOL_PARTICIPANT_MIGRATION_FAILED` — SMP call to migrate the participant from the previous SMP failed\n- `PEPPOL_PARTICIPANT_REGISTRATION_FAILED` — SMP call to register the participant failed\n- `PEPPOL_PARTICIPANT_ADD_METADATA_FAILED` — SMP call to add service metadata failed\n- `PEPPOL_ACCESSPOINT_HTTP_FAILURE` — The PEPPOL access point returned an unexpected HTTP error"}}},"x-doc":{"text":"🎯 **Purpose**\n\nExecute the **registration of a business entity** in the **target network** using the provided identifier.\n\n🌐 **Network behavior**\n\n- **International network**:\n  - Registers the entity in the **PEPPOL SML (SMK in PreProduction)**\n  - Updates the **PEPPOL Directory**\n- **French domestic network**:\n  - Only **French business entities** can be registered\n  - Performs the same PEPPOL registrations\n  - Additionally updates the French **PPF directory**\n\n🇫🇷 **French network scope**\n\nRegistration in the **French domestic network** is **restricted to French-to-French invoicing**.\nTo **send or receive invoices with international PEPPOL participants**,\nthe business entity **must also be registered in the international network**.\n\n⚠️ **Important – Enrollment vs registration**\n\nThis endpoint **must NOT be used** if the business entity has already been enrolled\nthrough the **enrollment endpoint**.\nEnrollment automatically handles all required registrations.\n\n🔑 **Identifier requirement**\n\n- The **`businessEntityIdentifierId`** must be used to perform the registration.\n- The **`businessEntityId` must NOT be used** for this operation.\n\n⏱️ **Timeout requirement**\n\nImplementers **must configure a timeout of at least 30 seconds** for this endpoint.\n\nThis operation performs calls to the **PEPPOL Directory API**.\nThe PEPPOL Directory service is **known to be intermittently unavailable or slow**,\nwhich can legitimately lead to **long response times**.\n\nUsing a shorter timeout may result in **false failures** even though the registration\nis still being processed successfully."}}},"/v1/config/business/entity/identifier/scheme/{identifierScheme}/value/{identifierValue}/network/{networkIdentifier}":{"post":{"summary":"Register identifier in a network","description":"🎯 **Purpose**\n\nExecute the **registration of a business entity** in the **target network** using the provided\n**identifier scheme** and **identifier value**.\n\n🌐 **Network behavior**\n\n- **International network**:\n  - Registers the entity in the **PEPPOL SML (SMK in PreProduction)**\n  - Updates the **PEPPOL Directory**\n- **French domestic network**:\n  - Only **French business entities** can be registered\n  - Performs the same PEPPOL registrations\n  - Additionally updates the French **PPF directory**\n\n🇫🇷 **French network scope**\n\nRegistration in the **French domestic network** is **restricted to French-to-French invoicing**.\nTo **send or receive invoices with international PEPPOL participants**,\nthe business entity **must also be registered in the international network**.\n\n⚠️ **Important – Enrollment vs registration**\n\nThis endpoint **must NOT be used** if the business entity has already been enrolled\nthrough the **enrollment endpoint**.\nEnrollment automatically handles all required registrations.\n\n🔑 **Identifier requirement**\n\n- This operation must be called with the **identifier `scheme` and `value`**.\n\n⏱️ **Timeout requirement**\n\nImplementers **must configure a timeout of at least 30 seconds** for this endpoint.\n\nThis operation performs calls to the **PEPPOL Directory API**.\nThe PEPPOL Directory service is **known to be intermittently unavailable or slow**,\nwhich can legitimately lead to **long response times**.\n\nUsing a shorter timeout may result in **false failures** even though the registration\nis still being processed successfully.","tags":["Operator Business Entity Registration"],"security":[{"oauth2ClientCredentials":[]}],"parameters":[{"in":"header","name":"customer-id","description":"The unique identifier for the customer.","required":false,"schema":{"type":"string","format":"uuid"},"x-doc":{"text":"The unique identifier for the customer."}},{"in":"path","name":"identifierScheme","description":"The business entity identifier scheme.","required":true,"schema":{"type":"string","minLength":4,"maxLength":4},"x-doc":{"text":"The business entity identifier scheme."}},{"in":"path","name":"identifierValue","description":"Value associated with the identifier (e.g., 'SIREN').","required":true,"schema":{"type":"string"},"x-doc":{"text":"Value associated with the identifier (e.g., 'SIREN')."}},{"in":"path","name":"networkIdentifier","required":true,"description":"Network to register the identifier on.","schema":{"type":"string","enum":["DOMESTIC_FR","PEPPOL_INTERNATIONAL"]},"x-doc":{"text":"Network to register the identifier on.","array":[{"code":"DOMESTIC_FR","label":"French domestic e-invoicing network (PPF/PDP)."},{"code":"PEPPOL_INTERNATIONAL","label":"Peppol international e-invoicing network."}]}},{"in":"query","name":"targetStartDate","description":"To be used only when multiple validity periods already exist","required":false,"schema":{"type":"string"},"x-doc":{"text":"To be used only when multiple validity periods already exist"}}],"requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object","properties":{"validityStartDate":{"type":"string","description":"The date when the business entity will start to be considered as yours (only valid for French entities).","x-doc":{"text":"The date when the business entity will start to be considered as yours (only valid for French entities).","valueDescription":"YYYY-MM-DD","defaultValue":"If omitted, the default value is tomorrow","more":"Must be a future date."}},"validityEndDate":{"type":"string","description":"The date when the business entity will no longer be considered as yours (only valid for French entities).","x-doc":{"text":"The date when the business entity will no longer be considered as yours (only valid for French entities).","valueDescription":"YYYY-MM-DD","defaultValue":"If omitted, no end date is set (i.e. the registration remains valid indefinitely)","more":"Must be greater than validity start date."}},"peppolMigrationKey":{"type":"string","description":"Migration Key to be used for migration from another SMP","x-doc":{"text":"Migration Key to be used for migration from another SMP"}},"allowRequestMigrationKey":{"type":"boolean","description":"If true, the system will try to retrieve a migration key from remote SMP","x-doc":{"text":"If true, the system will try to retrieve a migration key from remote SMP"}},"selfBilling":{"type":"boolean","description":"Enable self-billing invoice reception for this registration","x-doc":{"text":"Enable self-billing invoice reception for this registration"}}}},"examples":{"businessEntityNetworkRegisterNoDataBodyExample":{"summary":"[Default] No date (Body can be omitted)","value":{}},"businessEntityNetworkRegisterWithPeppolMigrationAutoBodyExample":{"summary":"[Default][Peppol] With automatic peppol migration feature (only for Hermes)","value":{"allowRequestMigrationKey":true}},"businessEntityNetworkRegisterWithPeppolMigrationKeyBodyExample":{"summary":"[Default][Peppol] With peppol migration from migration key","value":{"peppolMigrationKey":"migrationKey-Value"}},"businessEntityNetworkRegisterAllDateBodyExample":{"summary":"[French] Start and End Date","value":{"validityStartDate":"2026-03-02","validityEndDate":"2027-08-12"}},"businessEntityNetworkRegisterStartDateBodyExample":{"summary":"[French] Start Date Only","value":{"validityStartDate":"2026-03-02"}},"businessEntityNetworkRegisterEndDateBodyExample":{"summary":"[French] End Date Only","value":{"validityEndDate":"2027-08-12"}},"businessEntityNetworkRegisterWithSelfBillingBodyExample":{"summary":"With self-billing enabled","value":{"selfBilling":true}}}}}},"responses":{"201":{"description":"Business entity registered","content":{"application/json":{"schema":{"type":"object","properties":{"type":{"type":"string","enum":["WEBHOOK","SECRET","STREAM","INVOICE","STATUS","BUSINESS_ENTITY","BUSINESS_ENTITY_IDENTIFIER","DIRECTORY","EDI_MESSAGE"],"description":"The type of the response object.","x-doc":{"text":"The type of the response object."}},"id":{"type":"string","format":"uuid","description":"The unique identifier for the created element.","x-doc":{"text":"The unique identifier for the created element."}}},"required":["type","id"],"description":"Response model for the element creation response.","x-doc":{"text":"Response model for the element creation response."}},"examples":{"businessEntityNetworkRegisterByValueExampleResponse":{"summary":"Registered identifier into network","value":{"type":"DIRECTORY","id":"f47ac10b-58cc-4372-a567-0e02b2c3d479"}}}}},"x-doc":{"text":"Business entity registered"}},"400":{"description":"Validation.\n\nPossible error codes:\n- `BUSINESS_ENTITY_REGISTER_SCHEME_MISSING` — identifierScheme is required\n- `BUSINESS_ENTITY_REGISTER_VALUE_MISSING` — identifierValue is required\n- `BUSINESS_ENTITY_REGISTER_NETWORK_IDENTIFIER_MISSING` — networkIdentifier is required\n- `BUSINESS_ENTITY_REGISTER_INVALID_DATES` — End date must be strictly after start date\n- `DOMESTIC_FR_REGISTER_INVALID_VALIDITY_DATE` — Start/end date must be at least tomorrow (DOMESTIC_FR)\n- `PEPPOL_REGISTER_VALIDITY_DATE_NOT_SUPPORTED` — Validity dates are not supported for PEPPOL_INTERNATIONAL","x-doc":{"text":"Validation.\n\nPossible error codes:\n- `BUSINESS_ENTITY_REGISTER_SCHEME_MISSING` — identifierScheme is required\n- `BUSINESS_ENTITY_REGISTER_VALUE_MISSING` — identifierValue is required\n- `BUSINESS_ENTITY_REGISTER_NETWORK_IDENTIFIER_MISSING` — networkIdentifier is required\n- `BUSINESS_ENTITY_REGISTER_INVALID_DATES` — End date must be strictly after start date\n- `DOMESTIC_FR_REGISTER_INVALID_VALIDITY_DATE` — Start/end date must be at least tomorrow (DOMESTIC_FR)\n- `PEPPOL_REGISTER_VALIDITY_DATE_NOT_SUPPORTED` — Validity dates are not supported for PEPPOL_INTERNATIONAL"}},"401":{"description":"Unauthorized - Authentication is required and has failed or has not yet been provided.","x-doc":{"text":"Unauthorized - Authentication is required and has failed or has not yet been provided."}},"403":{"description":"Forbidden - The server understood the request, but it refuses to authorize it.","x-doc":{"text":"Forbidden - The server understood the request, but it refuses to authorize it."}},"404":{"description":"Not found or registration not allowed.\n\nPossible error codes:\n- `BUSINESS_ENTITY_IDENTIFIER_NOT_FOUND` — No identifier found for the given scheme/value, or identifier not found in database\n- `BUSINESS_ENTITY_REGISTER_NETWORK_NOT_FOUND` — The target network is not public or does not exist\n- `BUSINESS_ENTITY_NOT_FOUND` — The business entity related to the identifier was not found\n- `BUSINESS_ENTITY_REGISTER_DIRECTION_NOT_INBOUND` — Entity must be claimed with INBOUND or BOTH direction\n- `DOMESTIC_FR_REGISTER_NON_FRENCH_ENTITY_FORBIDDEN` — Only French entities can register in DOMESTIC_FR\n- `DOMESTIC_FR_REGISTER_DIRECTORY_ALREADY_UP_TO_DATE` — No changes required, directory is already up to date\n- `DOMESTIC_FR_REGISTER_INVALID_IDENTIFIER_SCHEME` — Scheme 0224/0000 cannot be used directly; use 0225 with a full address\n- `DOMESTIC_FR_REGISTER_ADDRESS_PARSE_ERROR` — The provided address could not be parsed\n- `DOMESTIC_FR_REGISTER_DB_INTEGRITY_ERROR` — Directory update failed due to a database integrity constraint\n- `PEPPOL_REGISTER_DIRECTORY_ALREADY_UP_TO_DATE` — No changes required, Peppol directory is already up to date\n- `PEPPOL_REGISTER_NO_ACCESS_POINT_CONFIGURED` — No Peppol access point is configured for the current operator\n- `PEPPOL_PARTICIPANT_ALREADY_REGISTERED_ON_OTHER_SMP` — Participant is on a different SMP; provide a migration key","x-doc":{"text":"Not found or registration not allowed.\n\nPossible error codes:\n- `BUSINESS_ENTITY_IDENTIFIER_NOT_FOUND` — No identifier found for the given scheme/value, or identifier not found in database\n- `BUSINESS_ENTITY_REGISTER_NETWORK_NOT_FOUND` — The target network is not public or does not exist\n- `BUSINESS_ENTITY_NOT_FOUND` — The business entity related to the identifier was not found\n- `BUSINESS_ENTITY_REGISTER_DIRECTION_NOT_INBOUND` — Entity must be claimed with INBOUND or BOTH direction\n- `DOMESTIC_FR_REGISTER_NON_FRENCH_ENTITY_FORBIDDEN` — Only French entities can register in DOMESTIC_FR\n- `DOMESTIC_FR_REGISTER_DIRECTORY_ALREADY_UP_TO_DATE` — No changes required, directory is already up to date\n- `DOMESTIC_FR_REGISTER_INVALID_IDENTIFIER_SCHEME` — Scheme 0224/0000 cannot be used directly; use 0225 with a full address\n- `DOMESTIC_FR_REGISTER_ADDRESS_PARSE_ERROR` — The provided address could not be parsed\n- `DOMESTIC_FR_REGISTER_DB_INTEGRITY_ERROR` — Directory update failed due to a database integrity constraint\n- `PEPPOL_REGISTER_DIRECTORY_ALREADY_UP_TO_DATE` — No changes required, Peppol directory is already up to date\n- `PEPPOL_REGISTER_NO_ACCESS_POINT_CONFIGURED` — No Peppol access point is configured for the current operator\n- `PEPPOL_PARTICIPANT_ALREADY_REGISTERED_ON_OTHER_SMP` — Participant is on a different SMP; provide a migration key"}},"409":{"description":"Conflict.\n\nPossible error codes:\n- `BUSINESS_ENTITY_REGISTER_IDENTIFIER_HELD_BY_OTHER_OPERATOR` — Another operator still holds a directory entry for this identifier. Supply the `peppolMigrationKey` that operator handed out","x-doc":{"text":"Conflict.\n\nPossible error codes:\n- `BUSINESS_ENTITY_REGISTER_IDENTIFIER_HELD_BY_OTHER_OPERATOR` — Another operator still holds a directory entry for this identifier. Supply the `peppolMigrationKey` that operator handed out"}},"500":{"description":"PEPPOL SMP access point failure.\n\nPossible error codes:\n- `PEPPOL_PARTICIPANT_MIGRATION_FAILED` — SMP call to migrate the participant from the previous SMP failed\n- `PEPPOL_PARTICIPANT_REGISTRATION_FAILED` — SMP call to register the participant failed\n- `PEPPOL_PARTICIPANT_ADD_METADATA_FAILED` — SMP call to add service metadata failed\n- `PEPPOL_ACCESSPOINT_HTTP_FAILURE` — The PEPPOL access point returned an unexpected HTTP error","x-doc":{"text":"PEPPOL SMP access point failure.\n\nPossible error codes:\n- `PEPPOL_PARTICIPANT_MIGRATION_FAILED` — SMP call to migrate the participant from the previous SMP failed\n- `PEPPOL_PARTICIPANT_REGISTRATION_FAILED` — SMP call to register the participant failed\n- `PEPPOL_PARTICIPANT_ADD_METADATA_FAILED` — SMP call to add service metadata failed\n- `PEPPOL_ACCESSPOINT_HTTP_FAILURE` — The PEPPOL access point returned an unexpected HTTP error"}}},"x-doc":{"text":"🎯 **Purpose**\n\nExecute the **registration of a business entity** in the **target network** using the provided\n**identifier scheme** and **identifier value**.\n\n🌐 **Network behavior**\n\n- **International network**:\n  - Registers the entity in the **PEPPOL SML (SMK in PreProduction)**\n  - Updates the **PEPPOL Directory**\n- **French domestic network**:\n  - Only **French business entities** can be registered\n  - Performs the same PEPPOL registrations\n  - Additionally updates the French **PPF directory**\n\n🇫🇷 **French network scope**\n\nRegistration in the **French domestic network** is **restricted to French-to-French invoicing**.\nTo **send or receive invoices with international PEPPOL participants**,\nthe business entity **must also be registered in the international network**.\n\n⚠️ **Important – Enrollment vs registration**\n\nThis endpoint **must NOT be used** if the business entity has already been enrolled\nthrough the **enrollment endpoint**.\nEnrollment automatically handles all required registrations.\n\n🔑 **Identifier requirement**\n\n- This operation must be called with the **identifier `scheme` and `value`**.\n\n⏱️ **Timeout requirement**\n\nImplementers **must configure a timeout of at least 30 seconds** for this endpoint.\n\nThis operation performs calls to the **PEPPOL Directory API**.\nThe PEPPOL Directory service is **known to be intermittently unavailable or slow**,\nwhich can legitimately lead to **long response times**.\n\nUsing a shorter timeout may result in **false failures** even though the registration\nis still being processed successfully."}}},"/v1/config/business/entity/identifier/directory/{directoryId}":{"delete":{"summary":"Unregister identifier from a network","description":"🎯 **Purpose**\n\nRemove a previously registered **identifier** from the target network using the provided\n**directoryId** (available in the operator internal directory data).\n\n🌐 **Network behavior**\n\n- **International network**:\n  - Removes the identifier from the **PEPPOL SML (SMK in PreProduction)**\n  - Updates the **PEPPOL Directory**\n- **French domestic network**:\n  - Performs the same PEPPOL removal operations\n  - Additionally removes the entry from the French **PPF directory**\n\n⚠️ **Important notes**\n\n- The `directoryId` must reference an **existing registration** owned by the operator.\n- Removing a registration immediately makes the identifier **unreachable on the corresponding network**.\n- This operation does **not delete the business entity**, only its **network registration**.\n\n⏱️ **Timeout requirement**\n\nImplementers **must configure a timeout of at least 30 seconds** for this endpoint.\n\nThis operation performs calls to the **PEPPOL Directory API**.\nThe PEPPOL Directory service is **known to be intermittently unavailable or slow**,\nwhich can legitimately lead to **long response times**.\n\nUsing a shorter timeout may result in **false failures** even though the registration\nis still being processed successfully.","tags":["Operator Directory Entries Management"],"security":[{"oauth2ClientCredentials":[]}],"parameters":[{"in":"header","name":"customer-id","description":"The unique identifier for the customer.","required":false,"schema":{"type":"string","format":"uuid"},"x-doc":{"text":"The unique identifier for the customer."}},{"in":"path","name":"directoryId","required":true,"schema":{"type":"string","format":"uuid"}}],"responses":{"204":{"description":"Successfully removed the business entity identifier from network.","x-doc":{"text":"Successfully removed the business entity identifier from network."}},"401":{"description":"Unauthorized - Authentication is required and has failed or has not yet been provided.","x-doc":{"text":"Unauthorized - Authentication is required and has failed or has not yet been provided."}},"403":{"description":"Forbidden - The server understood the request, but it refuses to authorize it.","x-doc":{"text":"Forbidden - The server understood the request, but it refuses to authorize it."}},"404":{"description":"Not found.\n\nPossible error codes:\n- `BUSINESS_ENTITY_IDENTIFIER_NOT_FOUND` — The identifier does not exist in the target network\n- `DIRECTORY_ENTRY_NOT_FOUND` — The directory entry for the given id was not found\n- `PEPPOL_UNREGISTER_NO_ACCESS_POINT_CONFIGURED` — No Peppol access point is configured for the current operator","x-doc":{"text":"Not found.\n\nPossible error codes:\n- `BUSINESS_ENTITY_IDENTIFIER_NOT_FOUND` — The identifier does not exist in the target network\n- `DIRECTORY_ENTRY_NOT_FOUND` — The directory entry for the given id was not found\n- `PEPPOL_UNREGISTER_NO_ACCESS_POINT_CONFIGURED` — No Peppol access point is configured for the current operator"}},"500":{"description":"PEPPOL SMP access point failure.\n\nPossible error codes:\n- `PEPPOL_PARTICIPANT_REMOVE_METADATA_FAILED` — SMP call to remove service metadata failed\n- `PEPPOL_PARTICIPANT_UNREGISTRATION_FAILED` — SMP call to unregister the participant failed\n- `PEPPOL_ACCESSPOINT_HTTP_FAILURE` — The PEPPOL access point returned an unexpected HTTP error","x-doc":{"text":"PEPPOL SMP access point failure.\n\nPossible error codes:\n- `PEPPOL_PARTICIPANT_REMOVE_METADATA_FAILED` — SMP call to remove service metadata failed\n- `PEPPOL_PARTICIPANT_UNREGISTRATION_FAILED` — SMP call to unregister the participant failed\n- `PEPPOL_ACCESSPOINT_HTTP_FAILURE` — The PEPPOL access point returned an unexpected HTTP error"}}},"x-doc":{"text":"🎯 **Purpose**\n\nRemove a previously registered **identifier** from the target network using the provided\n**directoryId** (available in the operator internal directory data).\n\n🌐 **Network behavior**\n\n- **International network**:\n  - Removes the identifier from the **PEPPOL SML (SMK in PreProduction)**\n  - Updates the **PEPPOL Directory**\n- **French domestic network**:\n  - Performs the same PEPPOL removal operations\n  - Additionally removes the entry from the French **PPF directory**\n\n⚠️ **Important notes**\n\n- The `directoryId` must reference an **existing registration** owned by the operator.\n- Removing a registration immediately makes the identifier **unreachable on the corresponding network**.\n- This operation does **not delete the business entity**, only its **network registration**.\n\n⏱️ **Timeout requirement**\n\nImplementers **must configure a timeout of at least 30 seconds** for this endpoint.\n\nThis operation performs calls to the **PEPPOL Directory API**.\nThe PEPPOL Directory service is **known to be intermittently unavailable or slow**,\nwhich can legitimately lead to **long response times**.\n\nUsing a shorter timeout may result in **false failures** even though the registration\nis still being processed successfully."}}},"/v1/config/business/entity/identifier/directory/{directoryId}/self-billing":{"post":{"summary":"Activate self-billing reception for a registered identifier","description":"🎯 **Purpose**\n\nActivate the ability for a business entity to **receive self-billing invoices**\non a given network registration.\n\n📋 **What is self-billing?**\n\nSelf-billing is an invoicing arrangement where the **buyer** issues the invoice on behalf of the supplier.\nWhen activated, the supplier declares to the network that it accepts self-billing invoices.\n\n⚠️ **Important**\n\n- The `directoryId` must identify an active network registration for the operator.\n- Self-billing activation is permanent for this registration. Contact support to deactivate.\n- The current self-billing status can be checked via the `isSelfBilling` field returned\n  in the **GET business entity** response, under each network registration entry.\n\n⏱️ **Timeout requirement**\n\nImplementers **must configure a timeout of at least 30 seconds** for this endpoint.\nThis operation interacts with external network services that may respond slowly.","tags":["Operator Directory Entries Management"],"security":[{"oauth2ClientCredentials":[]}],"parameters":[{"in":"header","name":"customer-id","description":"The unique identifier for the customer.","required":false,"schema":{"type":"string","format":"uuid"},"x-doc":{"text":"The unique identifier for the customer."}},{"in":"path","name":"directoryId","description":"The unique Iopole identifier of the network registration entry.","required":true,"schema":{"type":"string","format":"uuid"},"x-doc":{"text":"The unique Iopole identifier of the network registration entry."}}],"responses":{"200":{"description":"Self-billing activated successfully","content":{"application/json":{"schema":{"type":"object","properties":{"directoryId":{"type":"string","format":"uuid","description":"The unique Iopole identifier of the network registration entry.","x-doc":{"text":"The unique Iopole identifier of the network registration entry."}},"selfBilling":{"type":"boolean","description":"Whether self-billing is active for this network registration (always true after activation).","x-doc":{"text":"Whether self-billing is active for this network registration (always true after activation)."}}},"required":["directoryId","selfBilling"]}}},"x-doc":{"text":"Self-billing activated successfully"}},"401":{"description":"Unauthorized - Authentication is required and has failed or has not yet been provided.","x-doc":{"text":"Unauthorized - Authentication is required and has failed or has not yet been provided."}},"403":{"description":"Forbidden - The server understood the request, but it refuses to authorize it.","x-doc":{"text":"Forbidden - The server understood the request, but it refuses to authorize it."}},"404":{"description":"Not found - Network registration entry not found or not owned by this operator","x-doc":{"text":"Not found - Network registration entry not found or not owned by this operator"}}},"x-doc":{"text":"🎯 **Purpose**\n\nActivate the ability for a business entity to **receive self-billing invoices**\non a given network registration.\n\n📋 **What is self-billing?**\n\nSelf-billing is an invoicing arrangement where the **buyer** issues the invoice on behalf of the supplier.\nWhen activated, the supplier declares to the network that it accepts self-billing invoices.\n\n⚠️ **Important**\n\n- The `directoryId` must identify an active network registration for the operator.\n- Self-billing activation is permanent for this registration. Contact support to deactivate.\n- The current self-billing status can be checked via the `isSelfBilling` field returned\n  in the **GET business entity** response, under each network registration entry.\n\n⏱️ **Timeout requirement**\n\nImplementers **must configure a timeout of at least 30 seconds** for this endpoint.\nThis operation interacts with external network services that may respond slowly."}}},"/v1/config/business/entity/identifier/directory/scheme/{identifierScheme}/value/{identifierValue}/self-billing":{"post":{"summary":"Activate self-billing reception by identifier across networks","description":"🎯 **Purpose**\n\nActivate the ability for a business entity to **receive self-billing invoices**, identified by\nits `identifierScheme` and `identifierValue`, across one or more networks in a single call.\n\n📋 **What is self-billing?**\n\nSelf-billing is an invoicing arrangement where the **buyer** issues the invoice on behalf of the supplier.\nWhen activated, the supplier declares to the network that it accepts self-billing invoices.\n\n🌐 **Networks**\n\n- By default every network the identifier is registered on is activated.\n- Use the optional `networks` query parameter to restrict to specific networks (comma-separated, e.g. `DOMESTIC_FR,PEPPOL_INTERNATIONAL`).\n- A requested network where the identifier is not registered is reported as `skipped`.\n\n⚠️ **Important**\n\n- Self-billing activation is permanent for each network registration. Contact support to deactivate.\n- The current self-billing status can be checked via the `isSelfBilling` field returned\n  in the **GET business entity** response, under each network registration entry.\n\n⏱️ **Timeout requirement**\n\nImplementers **must configure a timeout of at least 30 seconds** for this endpoint.\nThis operation interacts with external network services that may respond slowly.","tags":["Operator Directory Entries Management"],"security":[{"oauth2ClientCredentials":[]}],"parameters":[{"in":"header","name":"customer-id","description":"The unique identifier for the customer.","required":false,"schema":{"type":"string","format":"uuid"},"x-doc":{"text":"The unique identifier for the customer."}},{"in":"path","name":"identifierScheme","description":"ISO 6523 scheme of the identifier (e.g. 0002 for SIREN, 0009 for SIRET).","required":true,"schema":{"type":"string"},"x-doc":{"text":"ISO 6523 scheme of the identifier (e.g. 0002 for SIREN, 0009 for SIRET)."}},{"in":"path","name":"identifierValue","description":"The identifier value to activate self-billing for.","required":true,"schema":{"type":"string"},"x-doc":{"text":"The identifier value to activate self-billing for."}},{"in":"query","name":"networks","description":"Networks to activate self-billing on. Defaults to every network the identifier is registered on.","required":false,"schema":{"type":"string","example":"DOMESTIC_FR,PEPPOL_INTERNATIONAL"},"x-doc":{"text":"Networks to activate self-billing on. Defaults to every network the identifier is registered on."}}],"responses":{"200":{"description":"Self-billing activation processed (see per-network results)","content":{"application/json":{"schema":{"type":"object","properties":{"identifierScheme":{"type":"string","description":"The identifier scheme that was targeted.","x-doc":{"text":"The identifier scheme that was targeted."}},"identifierValue":{"type":"string","description":"The identifier value that was targeted.","x-doc":{"text":"The identifier value that was targeted."}},"results":{"type":"array","items":{"type":"object","properties":{"networkIdentifier":{"type":"string","enum":["DOMESTIC_FR","PEPPOL_INTERNATIONAL"],"description":"The network this result refers to.","x-doc":{"text":"The network this result refers to."}},"directoryId":{"type":"string","format":"uuid","description":"The network registration entry that was activated (absent when skipped).","x-doc":{"text":"The network registration entry that was activated (absent when skipped)."}},"selfBilling":{"type":"boolean","enum":[true],"description":"Self-billing target state.","x-doc":{"text":"Self-billing target state."}},"status":{"type":"string","enum":["activated","skipped"],"description":"activated when the registration was updated, skipped when the identifier is not registered on this network.","x-doc":{"text":"activated when the registration was updated, skipped when the identifier is not registered on this network."}}},"required":["networkIdentifier","selfBilling","status"]},"description":"Per-network activation result.","x-doc":{"text":"Per-network activation result."}}},"required":["identifierScheme","identifierValue","results"]}}},"x-doc":{"text":"Self-billing activation processed (see per-network results)"}},"401":{"description":"Unauthorized - Authentication is required and has failed or has not yet been provided.","x-doc":{"text":"Unauthorized - Authentication is required and has failed or has not yet been provided."}},"403":{"description":"Forbidden - The server understood the request, but it refuses to authorize it.","x-doc":{"text":"Forbidden - The server understood the request, but it refuses to authorize it."}},"404":{"description":"Not found - Identifier not found, or not registered on any of the requested networks","x-doc":{"text":"Not found - Identifier not found, or not registered on any of the requested networks"}}},"x-doc":{"text":"🎯 **Purpose**\n\nActivate the ability for a business entity to **receive self-billing invoices**, identified by\nits `identifierScheme` and `identifierValue`, across one or more networks in a single call.\n\n📋 **What is self-billing?**\n\nSelf-billing is an invoicing arrangement where the **buyer** issues the invoice on behalf of the supplier.\nWhen activated, the supplier declares to the network that it accepts self-billing invoices.\n\n🌐 **Networks**\n\n- By default every network the identifier is registered on is activated.\n- Use the optional `networks` query parameter to restrict to specific networks (comma-separated, e.g. `DOMESTIC_FR,PEPPOL_INTERNATIONAL`).\n- A requested network where the identifier is not registered is reported as `skipped`.\n\n⚠️ **Important**\n\n- Self-billing activation is permanent for each network registration. Contact support to deactivate.\n- The current self-billing status can be checked via the `isSelfBilling` field returned\n  in the **GET business entity** response, under each network registration entry.\n\n⏱️ **Timeout requirement**\n\nImplementers **must configure a timeout of at least 30 seconds** for this endpoint.\nThis operation interacts with external network services that may respond slowly."}}},"/v1/config/business/entity/identifier/scheme/{identifierScheme}/value/{identifierValue}/self-billing":{"post":{"summary":"[Deprecated] Activate self-billing reception by identifier across networks","description":"⚠️ **Deprecated** - use `POST /v1/config/business/entity/identifier/directory/scheme/{identifierScheme}/value/{identifierValue}/self-billing` instead.\n\n🎯 **Purpose**\n\nActivate the ability for a business entity to **receive self-billing invoices**, identified by\nits `identifierScheme` and `identifierValue`, across one or more networks in a single call.\n\n📋 **What is self-billing?**\n\nSelf-billing is an invoicing arrangement where the **buyer** issues the invoice on behalf of the supplier.\nWhen activated, the supplier declares to the network that it accepts self-billing invoices.\n\n🌐 **Networks**\n\n- By default every network the identifier is registered on is activated.\n- Use the optional `networks` query parameter to restrict to specific networks (comma-separated, e.g. `DOMESTIC_FR,PEPPOL_INTERNATIONAL`).\n- A requested network where the identifier is not registered is reported as `skipped`.\n\n⚠️ **Important**\n\n- Self-billing activation is permanent for each network registration. Contact support to deactivate.\n- The current self-billing status can be checked via the `isSelfBilling` field returned\n  in the **GET business entity** response, under each network registration entry.\n\n⏱️ **Timeout requirement**\n\nImplementers **must configure a timeout of at least 30 seconds** for this endpoint.\nThis operation interacts with external network services that may respond slowly.","tags":["Operator Directory Entries Management"],"security":[{"oauth2ClientCredentials":[]}],"parameters":[{"in":"header","name":"customer-id","description":"The unique identifier for the customer.","required":false,"schema":{"type":"string","format":"uuid"},"x-doc":{"text":"The unique identifier for the customer."}},{"in":"path","name":"identifierScheme","description":"ISO 6523 scheme of the identifier (e.g. 0002 for SIREN, 0009 for SIRET).","required":true,"schema":{"type":"string"},"x-doc":{"text":"ISO 6523 scheme of the identifier (e.g. 0002 for SIREN, 0009 for SIRET)."}},{"in":"path","name":"identifierValue","description":"The identifier value to activate self-billing for.","required":true,"schema":{"type":"string"},"x-doc":{"text":"The identifier value to activate self-billing for."}},{"in":"query","name":"networks","description":"Networks to activate self-billing on. Defaults to every network the identifier is registered on.","required":false,"schema":{"type":"string","example":"DOMESTIC_FR,PEPPOL_INTERNATIONAL"},"x-doc":{"text":"Networks to activate self-billing on. Defaults to every network the identifier is registered on."}}],"deprecated":true,"responses":{"200":{"description":"Self-billing activation processed (see per-network results)","content":{"application/json":{"schema":{"type":"object","properties":{"identifierScheme":{"type":"string","description":"The identifier scheme that was targeted.","x-doc":{"text":"The identifier scheme that was targeted."}},"identifierValue":{"type":"string","description":"The identifier value that was targeted.","x-doc":{"text":"The identifier value that was targeted."}},"results":{"type":"array","items":{"type":"object","properties":{"networkIdentifier":{"type":"string","enum":["DOMESTIC_FR","PEPPOL_INTERNATIONAL"],"description":"The network this result refers to.","x-doc":{"text":"The network this result refers to."}},"directoryId":{"type":"string","format":"uuid","description":"The network registration entry that was activated (absent when skipped).","x-doc":{"text":"The network registration entry that was activated (absent when skipped)."}},"selfBilling":{"type":"boolean","enum":[true],"description":"Self-billing target state.","x-doc":{"text":"Self-billing target state."}},"status":{"type":"string","enum":["activated","skipped"],"description":"activated when the registration was updated, skipped when the identifier is not registered on this network.","x-doc":{"text":"activated when the registration was updated, skipped when the identifier is not registered on this network."}}},"required":["networkIdentifier","selfBilling","status"]},"description":"Per-network activation result.","x-doc":{"text":"Per-network activation result."}}},"required":["identifierScheme","identifierValue","results"]}}},"x-doc":{"text":"Self-billing activation processed (see per-network results)"}},"401":{"description":"Unauthorized - Authentication is required and has failed or has not yet been provided.","x-doc":{"text":"Unauthorized - Authentication is required and has failed or has not yet been provided."}},"403":{"description":"Forbidden - The server understood the request, but it refuses to authorize it.","x-doc":{"text":"Forbidden - The server understood the request, but it refuses to authorize it."}},"404":{"description":"Not found - Identifier not found, or not registered on any of the requested networks","x-doc":{"text":"Not found - Identifier not found, or not registered on any of the requested networks"}}},"x-doc":{"text":"⚠️ **Deprecated** - use `POST /v1/config/business/entity/identifier/directory/scheme/{identifierScheme}/value/{identifierValue}/self-billing` instead.\n\n🎯 **Purpose**\n\nActivate the ability for a business entity to **receive self-billing invoices**, identified by\nits `identifierScheme` and `identifierValue`, across one or more networks in a single call.\n\n📋 **What is self-billing?**\n\nSelf-billing is an invoicing arrangement where the **buyer** issues the invoice on behalf of the supplier.\nWhen activated, the supplier declares to the network that it accepts self-billing invoices.\n\n🌐 **Networks**\n\n- By default every network the identifier is registered on is activated.\n- Use the optional `networks` query parameter to restrict to specific networks (comma-separated, e.g. `DOMESTIC_FR,PEPPOL_INTERNATIONAL`).\n- A requested network where the identifier is not registered is reported as `skipped`.\n\n⚠️ **Important**\n\n- Self-billing activation is permanent for each network registration. Contact support to deactivate.\n- The current self-billing status can be checked via the `isSelfBilling` field returned\n  in the **GET business entity** response, under each network registration entry.\n\n⏱️ **Timeout requirement**\n\nImplementers **must configure a timeout of at least 30 seconds** for this endpoint.\nThis operation interacts with external network services that may respond slowly."}}},"/v1/config/business/entity/identifier/directory/scheme/{identifierScheme}/value/{identifierValue}/peppol/migrate":{"post":{"summary":"Trigger outbound Peppol participant migration to Iopole's SMP","description":"🎯 **Purpose**\n\nTrigger an **outbound** migration: move a Peppol participant that is currently registered on **Iopole's SMP** to another SMP provider, identified by its electronic address `identifierScheme` and `identifierValue`.\n\n🔒 **Ownership**\n\nOnly the operator owning the address's active directory line may trigger this. \n\n❌ **Cancelling**\n\nUse `DELETE` on this same path to cancel a running (`MIGRATING`) migration.\n\n","tags":["Operator Directory Entries Management"],"security":[{"oauth2ClientCredentials":[]}],"parameters":[{"in":"header","name":"customer-id","description":"The unique identifier for the customer.","required":false,"schema":{"type":"string","format":"uuid"},"x-doc":{"text":"The unique identifier for the customer."}},{"in":"path","name":"identifierScheme","description":"ISO 6523 scheme of the identifier (e.g. 0208 for Belgium, 0225 for French, ...).","required":true,"schema":{"type":"string"},"x-doc":{"text":"ISO 6523 scheme of the identifier (e.g. 0208 for Belgium, 0225 for French, ...)."}},{"in":"path","name":"identifierValue","description":"The identifier value to trigger outbound migration for.","required":true,"schema":{"type":"string"},"x-doc":{"text":"The identifier value to trigger outbound migration for."}}],"responses":{"200":{"description":"Migration started, or already in progress (idempotent)","content":{"application/json":{"schema":{"type":"object","properties":{"migrationKey":{"type":"string","description":"Migration key returned by the SMP. Idempotent while migration is in progress.","x-doc":{"text":"Migration key returned by the SMP. Idempotent while migration is in progress."}},"electronicAddress":{"type":"string","description":"Peppol electronic address ({identifierScheme}:{identifierValue}) being migrated.","x-doc":{"text":"Peppol electronic address ({identifierScheme}:{identifierValue}) being migrated."}}},"required":["migrationKey","electronicAddress"]}}},"x-doc":{"text":"Migration started, or already in progress (idempotent)"}},"401":{"description":"Unauthorized - Authentication is required and has failed or has not yet been provided.","x-doc":{"text":"Unauthorized - Authentication is required and has failed or has not yet been provided."}},"403":{"description":"Forbidden - The server understood the request, but it refuses to authorize it.\n\nPossible error codes:\n- `PEPPOL_PARTICIPANT_MIGRATION_FAILED` — Outbound Peppol migration is not available for this environment","x-doc":{"text":"Forbidden - The server understood the request, but it refuses to authorize it.\n\nPossible error codes:\n- `PEPPOL_PARTICIPANT_MIGRATION_FAILED` — Outbound Peppol migration is not available for this environment"}},"404":{"description":"Not found.\n\nPossible error codes:\n- `PEPPOL_OUTBOUND_MIGRATION_ADDRESS_NOT_FOUND` — The identifier does not exist, has no active Peppol directory registration, or that registration is owned by another operator — a line owned by someone else is reported as not found, never as forbidden\n- `PEPPOL_REGISTER_NO_ACCESS_POINT_CONFIGURED` — No Peppol access point is configured for the current operator","x-doc":{"text":"Not found.\n\nPossible error codes:\n- `PEPPOL_OUTBOUND_MIGRATION_ADDRESS_NOT_FOUND` — The identifier does not exist, has no active Peppol directory registration, or that registration is owned by another operator — a line owned by someone else is reported as not found, never as forbidden\n- `PEPPOL_REGISTER_NO_ACCESS_POINT_CONFIGURED` — No Peppol access point is configured for the current operator"}},"409":{"description":"Conflict.\n\nPossible error codes:\n- `BUSINESS_ENTITY_OP_STILL_RUNNING` — Another request is already running for this electronic address; retry once it completes","x-doc":{"text":"Conflict.\n\nPossible error codes:\n- `BUSINESS_ENTITY_OP_STILL_RUNNING` — Another request is already running for this electronic address; retry once it completes"}},"500":{"description":"PEPPOL SMP access point failure.\n\nPossible error codes:\n- `PEPPOL_PARTICIPANT_MIGRATION_FAILED` — SMP call to start the outbound migration failed, or returned no migration key\n- `PEPPOL_ACCESSPOINT_HTTP_FAILURE` — The PEPPOL access point returned an unexpected HTTP error","x-doc":{"text":"PEPPOL SMP access point failure.\n\nPossible error codes:\n- `PEPPOL_PARTICIPANT_MIGRATION_FAILED` — SMP call to start the outbound migration failed, or returned no migration key\n- `PEPPOL_ACCESSPOINT_HTTP_FAILURE` — The PEPPOL access point returned an unexpected HTTP error"}}},"x-doc":{"text":"🎯 **Purpose**\n\nTrigger an **outbound** migration: move a Peppol participant that is currently registered on **Iopole's SMP** to another SMP provider, identified by its electronic address `identifierScheme` and `identifierValue`.\n\n🔒 **Ownership**\n\nOnly the operator owning the address's active directory line may trigger this. \n\n❌ **Cancelling**\n\nUse `DELETE` on this same path to cancel a running (`MIGRATING`) migration.\n\n"}},"delete":{"summary":"Cancel an in-progress outbound Peppol participant migration","description":"🎯 **Purpose**\n\nCancel a **running** (`MIGRATING`) outbound Peppol migration for the electronic address, identified by its `identifierScheme` and `identifierValue`.\n\n🔒 **Ownership**\n\nOnly the operator owning the address's active directory line may trigger this. \n\n⚠️ Returns `404` if no migration is currently in progress for this address (nothing to cancel).","tags":["Operator Directory Entries Management"],"security":[{"oauth2ClientCredentials":[]}],"parameters":[{"in":"header","name":"customer-id","description":"The unique identifier for the customer.","required":false,"schema":{"type":"string","format":"uuid"},"x-doc":{"text":"The unique identifier for the customer."}},{"in":"path","name":"identifierScheme","description":"ISO 6523 scheme of the identifier (e.g. 0208 for Belgium, 0225 for French, ...).","required":true,"schema":{"type":"string"},"x-doc":{"text":"ISO 6523 scheme of the identifier (e.g. 0208 for Belgium, 0225 for French, ...)."}},{"in":"path","name":"identifierValue","description":"The identifier value to trigger outbound migration for.","required":true,"schema":{"type":"string"},"x-doc":{"text":"The identifier value to trigger outbound migration for."}}],"responses":{"204":{"description":"Migration successfully canceled.","x-doc":{"text":"Migration successfully canceled."}},"401":{"description":"Unauthorized - Authentication is required and has failed or has not yet been provided.","x-doc":{"text":"Unauthorized - Authentication is required and has failed or has not yet been provided."}},"403":{"description":"Forbidden - The server understood the request, but it refuses to authorize it.\n\nPossible error codes:\n- `PEPPOL_PARTICIPANT_MIGRATION_FAILED` — Outbound Peppol migration is not available for this environment","x-doc":{"text":"Forbidden - The server understood the request, but it refuses to authorize it.\n\nPossible error codes:\n- `PEPPOL_PARTICIPANT_MIGRATION_FAILED` — Outbound Peppol migration is not available for this environment"}},"404":{"description":"Not found.\n\nPossible error codes:\n- `PEPPOL_OUTBOUND_MIGRATION_ADDRESS_NOT_FOUND` — The identifier does not exist, has no active Peppol directory registration, or that registration is owned by another operator — a line owned by someone else is reported as not found, never as forbidden\n- `PEPPOL_OUTBOUND_MIGRATION_NOT_IN_PROGRESS` — No outbound migration is currently running (`MIGRATING`) for this address, so there is nothing to cancel\n- `PEPPOL_REGISTER_NO_ACCESS_POINT_CONFIGURED` — No Peppol access point is configured for the current operator","x-doc":{"text":"Not found.\n\nPossible error codes:\n- `PEPPOL_OUTBOUND_MIGRATION_ADDRESS_NOT_FOUND` — The identifier does not exist, has no active Peppol directory registration, or that registration is owned by another operator — a line owned by someone else is reported as not found, never as forbidden\n- `PEPPOL_OUTBOUND_MIGRATION_NOT_IN_PROGRESS` — No outbound migration is currently running (`MIGRATING`) for this address, so there is nothing to cancel\n- `PEPPOL_REGISTER_NO_ACCESS_POINT_CONFIGURED` — No Peppol access point is configured for the current operator"}},"409":{"description":"Conflict.\n\nPossible error codes:\n- `BUSINESS_ENTITY_OP_STILL_RUNNING` — Another request is already running for this electronic address; retry once it completes","x-doc":{"text":"Conflict.\n\nPossible error codes:\n- `BUSINESS_ENTITY_OP_STILL_RUNNING` — Another request is already running for this electronic address; retry once it completes"}},"500":{"description":"PEPPOL SMP access point failure.\n\nPossible error codes:\n- `PEPPOL_PARTICIPANT_MIGRATION_FAILED` — SMP call to cancel the outbound migration failed\n- `PEPPOL_ACCESSPOINT_HTTP_FAILURE` — The PEPPOL access point returned an unexpected HTTP error","x-doc":{"text":"PEPPOL SMP access point failure.\n\nPossible error codes:\n- `PEPPOL_PARTICIPANT_MIGRATION_FAILED` — SMP call to cancel the outbound migration failed\n- `PEPPOL_ACCESSPOINT_HTTP_FAILURE` — The PEPPOL access point returned an unexpected HTTP error"}}},"x-doc":{"text":"🎯 **Purpose**\n\nCancel a **running** (`MIGRATING`) outbound Peppol migration for the electronic address, identified by its `identifierScheme` and `identifierValue`.\n\n🔒 **Ownership**\n\nOnly the operator owning the address's active directory line may trigger this. \n\n⚠️ Returns `404` if no migration is currently in progress for this address (nothing to cancel)."}}},"/v1/config/business/entity/batch":{"post":{"summary":"Update Business Entity Directory as Batch","description":"📦 **Batch business entity operations**\n\n⚠️ **Not production ready**\n\nThis endpoint is **not production-ready** and must **not be used in production environments**.\nIts behavior and contract may change without notice.","tags":["Business Entity Batch"],"security":[{"oauth2ClientCredentials":[]}],"parameters":[{"in":"header","name":"customer-id","description":"The unique identifier for the customer.","required":false,"schema":{"type":"string","format":"uuid"},"x-doc":{"text":"The unique identifier for the customer."}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"businessEntity":{"type":"array","items":{"type":"object","properties":{"action":{"type":"string","enum":["CLAIM"]},"references":{"type":"object","properties":{"scheme":{"type":"string","minLength":4,"maxLength":4},"value":{"type":"string"}},"required":["scheme","value"],"description":"Reference of business entity (Legal unit or Office) to claim","x-doc":{"text":"Reference of business entity (Legal unit or Office) to claim"}},"operatorRelation":{"type":"object","nullable":true,"properties":{"data":{"type":"object","properties":{"header":{"type":"array","items":{"type":"object","properties":{"key":{"type":"string","minLength":1,"pattern":"^[!#$%&'*+.^_`|~0-9A-Za-z-]+$"},"value":{"type":"string","minLength":1,"pattern":"^\\S+$"}},"required":["key","value"]},"maxItems":5,"description":"Will be added to the webhook request into the header.","x-doc":{"text":"Will be added to the webhook request into the header."}},"query":{"type":"array","items":{"type":"object","properties":{"key":{"type":"string","minLength":1,"pattern":"^[!#$%&'*+.^_`|~0-9A-Za-z-]+$"},"value":{"type":"string","minLength":1,"pattern":"^\\S+$"}},"required":["key","value"]},"maxItems":5,"description":"Will be added to the webhook request as query parameter.","x-doc":{"text":"Will be added to the webhook request as query parameter."}},"param":{"type":"array","items":{"type":"object","properties":{"key":{"type":"string","pattern":"^:"},"value":{"type":"string","minLength":1,"pattern":"^\\S+$"}},"required":["key","value"]},"maxItems":3,"description":"Will be added to the webhook request as path parameter.","x-doc":{"text":"Will be added to the webhook request as path parameter.","more":"Use the :$key format for keys. Example: { key: \":companyId\", value: \"123456789\" }"}},"custom":{"type":"object","additionalProperties":{"nullable":true}}},"description":"Any kind of specific data","x-doc":{"text":"Any kind of specific data","more":"Included in the webhook payload sent to your endpoint."}},"direction":{"type":"string","nullable":true,"enum":["OUTBOUND","INBOUND"],"description":"Optional direction filter for the business entity relation (bidirectional if null or omitted).","x-doc":{"text":"Optional direction filter for the business entity relation (bidirectional if null or omitted).","array":[{"code":"OUTBOUND","label":"An invoice or status issued to a customer or client"},{"code":"INBOUND","label":"An invoice or status received from a supplier or vendor"}]}}}}},"required":["action","references"]}},"businessEntityIdentifiers":{"type":"array","items":{"type":"object","properties":{"action":{"type":"string","enum":["CREATE"]},"references":{"type":"object","properties":{"scheme":{"type":"string","minLength":4,"maxLength":4},"value":{"type":"string"}},"required":["scheme","value"],"description":"Reference of business entity (Legal unit or Office) to link the ROUTING_CODE / SUFFIX with","x-doc":{"text":"Reference of business entity (Legal unit or Office) to link the ROUTING_CODE / SUFFIX with"}},"data":{"type":"object","properties":{"type":{"type":"string","enum":["ROUTING_CODE","SUFFIX"]},"scheme":{"type":"string","minLength":4,"maxLength":4,"description":"Must be '0000' or omitted for SUFFIX, '0224' or omitted for ROUTING_CODE","x-doc":{"text":"Must be '0000' or omitted for SUFFIX, '0224' or omitted for ROUTING_CODE"}},"value":{"type":"string"},"label":{"type":"string"},"postalAddress":{"type":"object","properties":{"countrySubdivision":{"type":"string","description":"The country subdivision (optional).","x-doc":{"text":"The country subdivision (optional)."}},"city":{"type":"string","description":"The name of the city.","x-doc":{"text":"The name of the city."}},"postalCode":{"type":"string","description":"The postal code of the address.","x-doc":{"text":"The postal code of the address."}},"addressLine1":{"type":"string","description":"The first line of the address.","x-doc":{"text":"The first line of the address."}},"addressLine2":{"type":"string","description":"The second line of the address (optional).","x-doc":{"text":"The second line of the address (optional)."}},"addressLine3":{"type":"string","description":"The third line of the address (optional).","x-doc":{"text":"The third line of the address (optional)."}}},"required":["city","postalCode","addressLine1"]}},"required":["type","value"]}},"required":["action","references","data"]}},"businessEntityRegistrations":{"type":"array","items":{"type":"object","properties":{"action":{"type":"string","enum":["REGISTER","UNREGISTER"]},"references":{"type":"object","properties":{"networkIdentifier":{"type":"string","enum":["DOMESTIC_FR","PEPPOL_INTERNATIONAL"],"description":"Network","x-doc":{"text":"Network","array":[{"code":"DOMESTIC_FR","label":"French domestic e-invoicing network (PPF/PDP)."},{"code":"PEPPOL_INTERNATIONAL","label":"Peppol international e-invoicing network."}]}},"targetStartDate":{"type":"string","description":"Targeted directory line start date (Mandatory only when multiple lines exist for the same address)","x-doc":{"text":"Targeted directory line start date (Mandatory only when multiple lines exist for the same address)"}},"address":{"type":"object","properties":{"scheme":{"type":"string","minLength":4,"maxLength":4},"value":{"type":"string"}},"required":["scheme","value"],"description":"Reference of identifier to register/unregister (For routing code or suffix registration, scheme 0225 with electronic address must be used)","x-doc":{"text":"Reference of identifier to register/unregister (For routing code or suffix registration, scheme 0225 with electronic address must be used)"}}},"required":["networkIdentifier","address"]},"data":{"type":"object","properties":{"validityStartDate":{"type":"string","description":"The date when the business entity will start to be considered as yours (only valid for French entities).","x-doc":{"text":"The date when the business entity will start to be considered as yours (only valid for French entities).","valueDescription":"YYYY-MM-DD","defaultValue":"If omitted, the default value is tomorrow","more":"Must be a future date."}},"validityEndDate":{"type":"string","description":"The date when the business entity will no longer be considered as yours (only valid for French entities).","x-doc":{"text":"The date when the business entity will no longer be considered as yours (only valid for French entities).","valueDescription":"YYYY-MM-DD","defaultValue":"If omitted, no end date is set (i.e. the registration remains valid indefinitely)","more":"Must be greater than validity start date."}}},"description":"To be used only for French entities","x-doc":{"text":"To be used only for French entities"}}},"required":["action","references"]}}}},"examples":{"businessEntityBatchSirenClaimOnlyInboundDirectionDataExampleBody":{"summary":"Claim a Business Entity only for inbound direction ","value":{"businessEntity":[{"action":"CLAIM","references":{"scheme":"0002","value":"012345678"},"operatorRelation":{"direction":"INBOUND"}}]}},"businessEntityBatchSirenClaimWithOperatorDataExampleBody":{"summary":"Claim a Business Entity and link custom user data ","value":{"businessEntity":[{"action":"CLAIM","references":{"scheme":"0002","value":"012345678"},"operatorRelation":{"data":{"comment":"Free json object can be added here","ex":{"externalId":"123456789..."}}}}]}},"businessEntityBatchSirenClaimAndRegisterExampleBody":{"summary":"[FR] Claim a Siren and register from tomorrow without limit date ","value":{"businessEntity":[{"action":"CLAIM","references":{"scheme":"0002","value":"012345678"}}],"businessEntityRegistrations":[{"action":"REGISTER","references":{"networkIdentifier":"DOMESTIC_FR","address":{"scheme":"0002","value":"012345678"}}}]}},"businessEntityBatchSirenClaimAndRegisterTimeWindowExampleBody":{"summary":"[FR] Claim a Siren and register within a time window","value":{"businessEntity":[{"action":"CLAIM","references":{"scheme":"0002","value":"012345678"}}],"businessEntityRegistrations":[{"action":"REGISTER","references":{"networkIdentifier":"DOMESTIC_FR","address":{"scheme":"0002","value":"012345678"}},"data":{"validityStartDate":"2025-10-15","validityEndDate":"2026-06-10"}}]}},"businessEntityBatchSirenClaimCreateSuffixAndRegisterExampleBody":{"summary":"[FR] Claim a Siren, create a suffix and register it from tomorrow without limit date ","value":{"businessEntity":[{"action":"CLAIM","references":{"scheme":"0002","value":"012345678"}}],"businessEntityIdentifiers":[{"action":"CREATE","references":{"scheme":"0002","value":"012345678"},"data":{"type":"SUFFIX","scheme":"0000","value":"SUFFIX_A"}}],"businessEntityRegistrations":[{"action":"REGISTER","references":{"networkIdentifier":"DOMESTIC_FR","address":{"scheme":"0225","value":"012345678_SUFFIX_A"}}}]}},"businessEntityBatchSiretClaimAndRegisterFromDateExampleBody":{"summary":"[FR] Claim a Siret, and register it from a specific date without limit date","value":{"businessEntity":[{"action":"CLAIM","references":{"scheme":"0009","value":"01234567800010"}}],"businessEntityRegistrations":[{"action":"REGISTER","references":{"networkIdentifier":"DOMESTIC_FR","address":{"scheme":"0009","value":"01234567800010"}},"data":{"validityStartDate":"2028-01-01"}}]}},"businessEntityBatchSiretClaimCreateRoutingCodeAndRegisterExampleBody":{"summary":"[FR] Claim a Siret, create a routing code and register it from tomorrow to a limit date ","value":{"businessEntity":[{"action":"CLAIM","references":{"scheme":"0009","value":"01234567800010"}}],"businessEntityIdentifiers":[{"action":"CREATE","references":{"scheme":"0009","value":"01234567800010"},"data":{"type":"ROUTING_CODE","scheme":"0224","value":"Service_Juridique","label":"Label du service juridique","postalAddress":{"countrySubdivision":"Herault","city":"Claret","postalCode":"34270","addressLine1":"10 rue des oliviers"}}}],"businessEntityRegistrations":[{"action":"REGISTER","references":{"networkIdentifier":"DOMESTIC_FR","address":{"scheme":"0225","value":"012345678_01234567800010_Service_Juridique"}},"data":{"validityEndDate":"2026-01-01"}}]}}}}}},"responses":{"204":{"description":"Business entity batch processed","x-doc":{"text":"Business entity batch processed"}},"401":{"description":"Unauthorized - Authentication is required and has failed or has not yet been provided.","x-doc":{"text":"Unauthorized - Authentication is required and has failed or has not yet been provided."}},"403":{"description":"Forbidden - The server understood the request, but it refuses to authorize it.","x-doc":{"text":"Forbidden - The server understood the request, but it refuses to authorize it."}},"404":{"description":"Not available.\n\nPossible error codes:\n- `BATCH_NOT_AVAILABLE_IN_PRODUCTION` — Batch directory update is not yet implemented in the production environment","x-doc":{"text":"Not available.\n\nPossible error codes:\n- `BATCH_NOT_AVAILABLE_IN_PRODUCTION` — Batch directory update is not yet implemented in the production environment"}}},"x-doc":{"text":"📦 **Batch business entity operations**\n\n⚠️ **Not production ready**\n\nThis endpoint is **not production-ready** and must **not be used in production environments**.\nIts behavior and contract may change without notice."}}},"/v1/config/french/enrollment":{"put":{"deprecated":true,"summary":"[DEPRECATED] Enroll a french business entity","description":"⚠️ **This endpoint is deprecated.** Use `POST /v1/config/french/enrollment` instead.\n\nℹ️ **Automatic 🇫🇷French entity Enrollment**\n\nThis endpoint **generates an enrollment link** for the end user.\nThrough this link, the end user completes the **enrollment process**, including\n**KYC / KYB / mandate steps.**\n\nThe exact enrollment flow and required steps **depend on the operator configuration options**.\n\n🚨 The enrollment process is only **fully automatic** BY DEFAULT.\n\nThe operator **does not need to create, claim, or register anything manually**.\nOnce the **end-user enrollment is completed**, the system automatically:\n- creates all required resources,\n- performs the necessary registrations,\n- links them to the operator when applicable.\n\n**No additional API call is required from the operator.**\n**To change this default behavior, the operator can adjust the enrollment configuration options** to fit their specific needs and preferences.**Or contact the support**\n\n**Registration Strategy**: You can override the operator-level registration configuration by providing the `registrationStrategy` field:\n- `AUTO`: Registration is triggered immediately when enrollment is accepted (default)\n- `MANUAL`: Registration must be triggered manually\n- `NONE`: No automatic registration","tags":["Operator Business Entity Enrollment"],"security":[{"oauth2ClientCredentials":[]}],"parameters":[{"name":"customer-id","in":"header","required":false,"schema":{"type":"string","format":"uuid"}}],"requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object","properties":{"siren":{"type":"string","pattern":"^[0-9]{9}$","description":"The SIREN number (9-digit identifier) of the business entity","x-doc":{"text":"The SIREN number (9-digit identifier) of the business entity"}},"registerInPeppolInternational":{"type":"boolean"},"selfBilling":{"type":"boolean","description":"Enable self-billing invoice reception at enrollment time. When true, self-billing document types are automatically registered in the SMP on enrollment completion.","x-doc":{"text":"Enable self-billing invoice reception at enrollment time. When true, self-billing document types are automatically registered in the SMP on enrollment completion."}},"registrationStrategy":{"type":"string","enum":["AUTO","MANUAL","NONE"],"description":"Electronic address registration mode.","x-doc":{"text":"Electronic address registration mode.","more":"If not provided, uses operator-level configuration or defaults to AUTO.","array":[{"code":"AUTO","label":"Electronic address registration is triggered automatically on acceptance."},{"code":"MANUAL","label":"Electronic address registration requires a manual trigger."},{"code":"NONE","label":"No electronic address registration is performed."}]}},"businessEntityDetails":{"type":"object","properties":{"readonly":{"type":"boolean"},"vatRegime":{"type":"string","enum":["REAL_MONTHLY_TAX_REGIME","REAL_QUARTERLY_TAX_REGIME","SIMPLIFIED_TAX_REGIME","VAT_EXEMPTION_REGIME"],"description":"French VAT regime of the business entity.","x-doc":{"text":"French VAT regime of the business entity.","array":[{"code":"REAL_MONTHLY_TAX_REGIME","label":"Real normal tax regime with monthly VAT declarations."},{"code":"REAL_QUARTERLY_TAX_REGIME","label":"Real normal tax regime with quarterly VAT declarations."},{"code":"SIMPLIFIED_TAX_REGIME","label":"Simplified tax regime with annual VAT declarations."},{"code":"VAT_EXEMPTION_REGIME","label":"VAT exemption regime (franchise en base de TVA)."}]}},"contactEmail":{"type":"string","minLength":1,"format":"email"},"address":{"type":"string","minLength":1}},"required":["contactEmail","address"]},"legalRepresentative":{"type":"object","properties":{"readonly":{"type":"boolean"},"firstName":{"type":"string","minLength":1},"lastName":{"type":"string","minLength":1},"position":{"type":"string","minLength":1}},"required":["firstName","lastName","position"]},"eInvoicingAddresses":{"type":"object","properties":{"readonly":{"type":"boolean"},"value":{"type":"array","items":{"type":"object","properties":{"electronicAddress":{"type":"string","pattern":"^0225:[a-zA-Z0-9_-]+$"},"addressType":{"type":"string","enum":["SIREN","SUFFIX"]}},"required":["electronicAddress","addressType"]}}},"required":["value"]},"operatorRelation":{"type":"object","properties":{"data":{"type":"object","properties":{"header":{"type":"array","items":{"type":"object","properties":{"key":{"type":"string","minLength":1,"pattern":"^[!#$%&'*+.^_`|~0-9A-Za-z-]+$"},"value":{"type":"string","minLength":1,"pattern":"^\\S+$"}},"required":["key","value"]},"maxItems":5,"description":"Will be added to the webhook request into the header.","x-doc":{"text":"Will be added to the webhook request into the header."}},"query":{"type":"array","items":{"type":"object","properties":{"key":{"type":"string","minLength":1,"pattern":"^[!#$%&'*+.^_`|~0-9A-Za-z-]+$"},"value":{"type":"string","minLength":1,"pattern":"^\\S+$"}},"required":["key","value"]},"maxItems":5,"description":"Will be added to the webhook request as query parameter.","x-doc":{"text":"Will be added to the webhook request as query parameter."}},"param":{"type":"array","items":{"type":"object","properties":{"key":{"type":"string","pattern":"^:"},"value":{"type":"string","minLength":1,"pattern":"^\\S+$"}},"required":["key","value"]},"maxItems":3,"description":"Will be added to the webhook request as path parameter.","x-doc":{"text":"Will be added to the webhook request as path parameter.","more":"Use the :$key format for keys. Example: { key: \":companyId\", value: \"123456789\" }"}},"custom":{"type":"object","additionalProperties":{"nullable":true}}},"description":"Any kind of specific data","x-doc":{"text":"Any kind of specific data","more":"Included in the webhook payload sent to your endpoint."}},"direction":{"type":"string","nullable":true,"enum":["OUTBOUND","INBOUND"],"description":"Optional direction filter for the business entity relation (bidirectional if null or omitted).","x-doc":{"text":"Optional direction filter for the business entity relation (bidirectional if null or omitted).","array":[{"code":"OUTBOUND","label":"An invoice or status issued to a customer or client"},{"code":"INBOUND","label":"An invoice or status received from a supplier or vendor"}]}}}}},"required":["siren"]},"examples":{"enrollFrExampleBody":{"summary":"Enroll a French business entity","value":{"siren":"922304308"}},"enrollFrWithPeppolRegistrationExampleBody":{"summary":"Enroll a French business entity with additional registration in peppol international","value":{"siren":"922304308","registerInPeppolInternational":true}},"enrollFrWithSelfBillingExampleBody":{"summary":"Enroll a French business entity with self-billing enabled","value":{"siren":"922304308","selfBilling":true}},"enrollFrOutboundExampleBody":{"summary":"Enroll a French business entity (Outbound only)","value":{"siren":"922304308","operatorRelation":{"direction":"OUTBOUND"}}},"enrollFrWithDataExampleBody":{"summary":"Enroll a French business entity with custom data","value":{"siren":"922304308","operatorRelation":{"data":{"header":[{"key":"X-Client-ID","value":"12345"}],"query":[{"key":"resourceID","value":"67890"},{"key":"priority","value":"high"}],"param":[{"key":"tenantId","value":"12345"}]}}}},"enrollFrExampleWithAllDataProvidedBody":{"summary":"Enroll a French business entity with all data provided","value":{"siren":"922304308","businessEntityDetails":{"readonly":true,"vatRegime":"REAL_MONTHLY_TAX_REGIME","contactEmail":"your-email@yourcompany.com","address":"company address"},"legalRepresentative":{"readonly":true,"firstName":"John","lastName":"Doe","position":"CEO"},"eInvoicingAddresses":{"readonly":true,"value":[{"addressType":"SIREN","electronicAddress":"0225:922304308"}]}}}}}}},"responses":{"200":{"description":"Business entity enrollment done","content":{"application/json":{"schema":{"type":"object","properties":{"enrollmentId":{"type":"string"},"onboardingUrl":{"type":"string"}},"required":["enrollmentId","onboardingUrl"]},"examples":{"enrollFrResponseBody":{"summary":"Enroll a French business entity","value":{"enrollmentId":"a159d048-658b-4a00-baa7-ae1c005df9b2","onboardingUrl":"https://admin.iopole.fr/onboarding"}}}}},"x-doc":{"text":"Business entity enrollment done"}},"400":{"description":"Bad Request - Request validation failure, or the `eInvoicingAddresses` payload is invalid.\n\nPossible error codes:\n- `ELECTRONIC_ADDRESS_ALREADY_USED` — Two entries of `eInvoicingAddresses` declare the same `electronicAddress`\n- `INVALID_IDENTIFIER` — The identifier part of an `electronicAddress` cannot be parsed as a SIREN or a suffix\n- `IDENTIFIER_MISMATCH` — The identifier inside an `electronicAddress` does not match the enrolled `siren`\n- `TYPE_MISMATCH` — The `addressType` does not match the identifier carried by the `electronicAddress`","x-doc":{"text":"Bad Request - Request validation failure, or the `eInvoicingAddresses` payload is invalid.\n\nPossible error codes:\n- `ELECTRONIC_ADDRESS_ALREADY_USED` — Two entries of `eInvoicingAddresses` declare the same `electronicAddress`\n- `INVALID_IDENTIFIER` — The identifier part of an `electronicAddress` cannot be parsed as a SIREN or a suffix\n- `IDENTIFIER_MISMATCH` — The identifier inside an `electronicAddress` does not match the enrolled `siren`\n- `TYPE_MISMATCH` — The `addressType` does not match the identifier carried by the `electronicAddress`"}},"401":{"description":"Unauthorized - Authentication is required and has failed or has not yet been provided.","x-doc":{"text":"Unauthorized - Authentication is required and has failed or has not yet been provided."}},"403":{"description":"Forbidden - The server understood the request, but it refuses to authorize it.\n\nPossible error codes:\n- `BUSINESS_ENTITY_NOT_ELIGIBLE_FOR_ONBOARDING` — The business entity is not eligible for onboarding; only `PRIVATE_TAX_PAYER` entities can be enrolled","x-doc":{"text":"Forbidden - The server understood the request, but it refuses to authorize it.\n\nPossible error codes:\n- `BUSINESS_ENTITY_NOT_ELIGIBLE_FOR_ONBOARDING` — The business entity is not eligible for onboarding; only `PRIVATE_TAX_PAYER` entities can be enrolled"}},"409":{"description":"Conflict - The request could not be completed. An enrollment with the same identifiers already exists.","x-doc":{"text":"Conflict - The request could not be completed. An enrollment with the same identifiers already exists."}}},"x-doc":{"text":"⚠️ **This endpoint is deprecated.** Use `POST /v1/config/french/enrollment` instead.\n\nℹ️ **Automatic 🇫🇷French entity Enrollment**\n\nThis endpoint **generates an enrollment link** for the end user.\nThrough this link, the end user completes the **enrollment process**, including\n**KYC / KYB / mandate steps.**\n\nThe exact enrollment flow and required steps **depend on the operator configuration options**.\n\n🚨 The enrollment process is only **fully automatic** BY DEFAULT.\n\nThe operator **does not need to create, claim, or register anything manually**.\nOnce the **end-user enrollment is completed**, the system automatically:\n- creates all required resources,\n- performs the necessary registrations,\n- links them to the operator when applicable.\n\n**No additional API call is required from the operator.**\n**To change this default behavior, the operator can adjust the enrollment configuration options** to fit their specific needs and preferences.**Or contact the support**\n\n**Registration Strategy**: You can override the operator-level registration configuration by providing the `registrationStrategy` field:\n- `AUTO`: Registration is triggered immediately when enrollment is accepted (default)\n- `MANUAL`: Registration must be triggered manually\n- `NONE`: No automatic registration"}},"post":{"summary":"Create a french business entity enrollment","description":"ℹ️ **Strict 🇫🇷French entity Enrollment — returns 201 Created**\n\nThis endpoint **always creates a new enrollment** for the given operator + SIREN pair.\n\nUnlike the deprecated `PUT` endpoint (which is idempotent and returns the existing enrollment on conflict),\nthis endpoint creates a fresh enrollment on every call and returns `201 Created`.\n\n**Registration Strategy**: You can override the operator-level registration configuration by providing the `registrationStrategy` field:\n- `AUTO`: Registration is triggered immediately when enrollment is accepted (default)\n- `MANUAL`: Registration must be triggered manually\n- `NONE`: No automatic registration","tags":["Operator Business Entity Enrollment"],"security":[{"oauth2ClientCredentials":[]}],"parameters":[{"name":"customer-id","in":"header","required":false,"schema":{"type":"string","format":"uuid"}}],"requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object","properties":{"siren":{"type":"string","pattern":"^[0-9]{9}$","description":"The SIREN number (9-digit identifier) of the business entity","x-doc":{"text":"The SIREN number (9-digit identifier) of the business entity"}},"registerInPeppolInternational":{"type":"boolean"},"selfBilling":{"type":"boolean","description":"Enable self-billing invoice reception at enrollment time. When true, self-billing document types are automatically registered in the SMP on enrollment completion.","x-doc":{"text":"Enable self-billing invoice reception at enrollment time. When true, self-billing document types are automatically registered in the SMP on enrollment completion."}},"registrationStrategy":{"type":"string","enum":["AUTO","MANUAL","NONE"],"description":"Electronic address registration mode.","x-doc":{"text":"Electronic address registration mode.","more":"If not provided, uses operator-level configuration or defaults to AUTO.","array":[{"code":"AUTO","label":"Electronic address registration is triggered automatically on acceptance."},{"code":"MANUAL","label":"Electronic address registration requires a manual trigger."},{"code":"NONE","label":"No electronic address registration is performed."}]}},"businessEntityDetails":{"type":"object","properties":{"readonly":{"type":"boolean"},"vatRegime":{"type":"string","enum":["REAL_MONTHLY_TAX_REGIME","REAL_QUARTERLY_TAX_REGIME","SIMPLIFIED_TAX_REGIME","VAT_EXEMPTION_REGIME"],"description":"French VAT regime of the business entity.","x-doc":{"text":"French VAT regime of the business entity.","array":[{"code":"REAL_MONTHLY_TAX_REGIME","label":"Real normal tax regime with monthly VAT declarations."},{"code":"REAL_QUARTERLY_TAX_REGIME","label":"Real normal tax regime with quarterly VAT declarations."},{"code":"SIMPLIFIED_TAX_REGIME","label":"Simplified tax regime with annual VAT declarations."},{"code":"VAT_EXEMPTION_REGIME","label":"VAT exemption regime (franchise en base de TVA)."}]}},"contactEmail":{"type":"string","minLength":1,"format":"email"},"address":{"type":"string","minLength":1}},"required":["contactEmail","address"]},"legalRepresentative":{"type":"object","properties":{"readonly":{"type":"boolean"},"firstName":{"type":"string","minLength":1},"lastName":{"type":"string","minLength":1},"position":{"type":"string","minLength":1}},"required":["firstName","lastName","position"]},"eInvoicingAddresses":{"type":"object","properties":{"readonly":{"type":"boolean"},"value":{"type":"array","items":{"type":"object","properties":{"electronicAddress":{"type":"string","pattern":"^0225:[a-zA-Z0-9_-]+$"},"addressType":{"type":"string","enum":["SIREN","SUFFIX"]}},"required":["electronicAddress","addressType"]}}},"required":["value"]},"operatorRelation":{"type":"object","properties":{"data":{"type":"object","properties":{"header":{"type":"array","items":{"type":"object","properties":{"key":{"type":"string","minLength":1,"pattern":"^[!#$%&'*+.^_`|~0-9A-Za-z-]+$"},"value":{"type":"string","minLength":1,"pattern":"^\\S+$"}},"required":["key","value"]},"maxItems":5,"description":"Will be added to the webhook request into the header.","x-doc":{"text":"Will be added to the webhook request into the header."}},"query":{"type":"array","items":{"type":"object","properties":{"key":{"type":"string","minLength":1,"pattern":"^[!#$%&'*+.^_`|~0-9A-Za-z-]+$"},"value":{"type":"string","minLength":1,"pattern":"^\\S+$"}},"required":["key","value"]},"maxItems":5,"description":"Will be added to the webhook request as query parameter.","x-doc":{"text":"Will be added to the webhook request as query parameter."}},"param":{"type":"array","items":{"type":"object","properties":{"key":{"type":"string","pattern":"^:"},"value":{"type":"string","minLength":1,"pattern":"^\\S+$"}},"required":["key","value"]},"maxItems":3,"description":"Will be added to the webhook request as path parameter.","x-doc":{"text":"Will be added to the webhook request as path parameter.","more":"Use the :$key format for keys. Example: { key: \":companyId\", value: \"123456789\" }"}},"custom":{"type":"object","additionalProperties":{"nullable":true}}},"description":"Any kind of specific data","x-doc":{"text":"Any kind of specific data","more":"Included in the webhook payload sent to your endpoint."}},"direction":{"type":"string","nullable":true,"enum":["OUTBOUND","INBOUND"],"description":"Optional direction filter for the business entity relation (bidirectional if null or omitted).","x-doc":{"text":"Optional direction filter for the business entity relation (bidirectional if null or omitted).","array":[{"code":"OUTBOUND","label":"An invoice or status issued to a customer or client"},{"code":"INBOUND","label":"An invoice or status received from a supplier or vendor"}]}}}}},"required":["siren"]},"examples":{"enrollFrExampleBody":{"summary":"Enroll a French business entity","value":{"siren":"922304308"}},"enrollFrWithPeppolRegistrationExampleBody":{"summary":"Enroll a French business entity with additional registration in peppol international","value":{"siren":"922304308","registerInPeppolInternational":true}},"enrollFrWithSelfBillingExampleBody":{"summary":"Enroll a French business entity with self-billing enabled","value":{"siren":"922304308","selfBilling":true}},"enrollFrOutboundExampleBody":{"summary":"Enroll a French business entity (Outbound only)","value":{"siren":"922304308","operatorRelation":{"direction":"OUTBOUND"}}},"enrollFrWithDataExampleBody":{"summary":"Enroll a French business entity with custom data","value":{"siren":"922304308","operatorRelation":{"data":{"header":[{"key":"X-Client-ID","value":"12345"}],"query":[{"key":"resourceID","value":"67890"},{"key":"priority","value":"high"}],"param":[{"key":"tenantId","value":"12345"}]}}}},"enrollFrExampleWithAllDataProvidedBody":{"summary":"Enroll a French business entity with all data provided","value":{"siren":"922304308","businessEntityDetails":{"readonly":true,"vatRegime":"REAL_MONTHLY_TAX_REGIME","contactEmail":"your-email@yourcompany.com","address":"company address"},"legalRepresentative":{"readonly":true,"firstName":"John","lastName":"Doe","position":"CEO"},"eInvoicingAddresses":{"readonly":true,"value":[{"addressType":"SIREN","electronicAddress":"0225:922304308"}]}}}}}}},"responses":{"201":{"description":"Business entity enrollment created","content":{"application/json":{"schema":{"type":"object","properties":{"enrollmentId":{"type":"string"},"onboardingUrl":{"type":"string"}},"required":["enrollmentId","onboardingUrl"]},"examples":{"enrollFrResponseBody":{"summary":"Enroll a French business entity","value":{"enrollmentId":"a159d048-658b-4a00-baa7-ae1c005df9b2","onboardingUrl":"https://admin.iopole.fr/onboarding"}}}}},"x-doc":{"text":"Business entity enrollment created"}},"400":{"description":"Bad Request - Request validation failure, or the `eInvoicingAddresses` payload is invalid.\n\nPossible error codes:\n- `ELECTRONIC_ADDRESS_ALREADY_USED` — Two entries of `eInvoicingAddresses` declare the same `electronicAddress`\n- `INVALID_IDENTIFIER` — The identifier part of an `electronicAddress` cannot be parsed as a SIREN or a suffix\n- `IDENTIFIER_MISMATCH` — The identifier inside an `electronicAddress` does not match the enrolled `siren`\n- `TYPE_MISMATCH` — The `addressType` does not match the identifier carried by the `electronicAddress`","x-doc":{"text":"Bad Request - Request validation failure, or the `eInvoicingAddresses` payload is invalid.\n\nPossible error codes:\n- `ELECTRONIC_ADDRESS_ALREADY_USED` — Two entries of `eInvoicingAddresses` declare the same `electronicAddress`\n- `INVALID_IDENTIFIER` — The identifier part of an `electronicAddress` cannot be parsed as a SIREN or a suffix\n- `IDENTIFIER_MISMATCH` — The identifier inside an `electronicAddress` does not match the enrolled `siren`\n- `TYPE_MISMATCH` — The `addressType` does not match the identifier carried by the `electronicAddress`"}},"401":{"description":"Unauthorized - Authentication is required and has failed or has not yet been provided.","x-doc":{"text":"Unauthorized - Authentication is required and has failed or has not yet been provided."}},"403":{"description":"Forbidden - The server understood the request, but it refuses to authorize it.\n\nPossible error codes:\n- `BUSINESS_ENTITY_NOT_ELIGIBLE_FOR_ONBOARDING` — The business entity is not eligible for onboarding; only `PRIVATE_TAX_PAYER` entities can be enrolled","x-doc":{"text":"Forbidden - The server understood the request, but it refuses to authorize it.\n\nPossible error codes:\n- `BUSINESS_ENTITY_NOT_ELIGIBLE_FOR_ONBOARDING` — The business entity is not eligible for onboarding; only `PRIVATE_TAX_PAYER` entities can be enrolled"}}},"x-doc":{"text":"ℹ️ **Strict 🇫🇷French entity Enrollment — returns 201 Created**\n\nThis endpoint **always creates a new enrollment** for the given operator + SIREN pair.\n\nUnlike the deprecated `PUT` endpoint (which is idempotent and returns the existing enrollment on conflict),\nthis endpoint creates a fresh enrollment on every call and returns `201 Created`.\n\n**Registration Strategy**: You can override the operator-level registration configuration by providing the `registrationStrategy` field:\n- `AUTO`: Registration is triggered immediately when enrollment is accepted (default)\n- `MANUAL`: Registration must be triggered manually\n- `NONE`: No automatic registration"}}},"/v1/config/international/enrollment":{"put":{"deprecated":true,"summary":"[DEPRECATED] Enroll an international business entity","description":"⚠️ **This endpoint is deprecated.** Use `POST /v1/config/international/enrollment` instead.\n\nℹ️ **Automatic International entity Enrollment**\n\nThis endpoint **generates an enrollment link** for the end user.\nThrough this link, the end user completes the **enrollment process**, including\n**KYC / KYB steps**.\n\nThe exact enrollment flow and required steps **depend on the operator configuration options**.\n\n🚨 The enrollment process is **fully automatic**.\n\nThe operator **does not need to create, claim, or register anything manually**.\nOnce the **end-user enrollment is completed**, the system automatically:\n- creates all required resources,\n- performs the necessary registrations,\n- links them to the operator when applicable.\n\n**No additional API call is required from the operator.**\n\n**Registration Strategy**: You can override the operator-level registration configuration by providing the `registrationStrategy` field:\n- `AUTO`: Registration is triggered immediately when enrollment is accepted (default)\n- `MANUAL`: Registration must be triggered manually\n- `NONE`: No automatic registration","tags":["Operator Business Entity Enrollment"],"security":[{"oauth2ClientCredentials":[]}],"parameters":[{"name":"customer-id","in":"header","required":false,"schema":{"type":"string","format":"uuid"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"identifierScheme":{"type":"string","pattern":"^\\d{4}$","description":"Scheme of the identifier.","x-doc":{"text":"Scheme of the identifier."}},"identifierValue":{"type":"string","pattern":"^[a-zA-Z0-9-_]+$","description":"Value of the identifier.","x-doc":{"text":"Value of the identifier."}},"name":{"type":"string","description":"Name of the business entity.","x-doc":{"text":"Name of the business entity."}},"country":{"type":"string","enum":["1A","AD","AE","AF","AG","AI","AL","AM","AO","AQ","AR","AS","AT","AU","AW","AX","AZ","BA","BB","BD","BE","BF","BG","BH","BI","BJ","BL","BM","BN","BO","BQ","BR","BS","BT","BV","BW","BY","BZ","CA","CC","CD","CF","CG","CH","CI","CK","CL","CM","CN","CO","CR","CU","CV","CW","CX","CY","CZ","DE","DJ","DK","DM","DO","DZ","EC","EE","EG","EH","ER","ES","ET","FI","FJ","FK","FM","FO","FR","GA","GB","GD","GE","GF","GG","GH","GI","GL","GM","GN","GP","GQ","GR","GS","GT","GU","GW","GY","HK","HM","HN","HR","HT","HU","ID","IE","IL","IM","IN","IO","IQ","IR","IS","IT","JE","JM","JO","JP","KE","KG","KH","KI","KM","KN","KP","KR","KW","KY","KZ","LA","LB","LC","LI","LK","LR","LS","LT","LU","LV","LY","MA","MC","MD","ME","MF","MG","MH","MK","ML","MM","MN","MO","MP","MQ","MR","MS","MT","MU","MV","MW","MX","MY","MZ","NA","NC","NE","NF","NG","NI","NL","NO","NP","NR","NU","NZ","OM","PA","PE","PF","PG","PH","PK","PL","PM","PN","PR","PS","PT","PW","PY","QA","RE","RO","RS","RU","RW","SA","SB","SC","SD","SE","SG","SH","SI","SJ","SK","SL","SM","SN","SO","SR","SS","ST","SV","SX","SY","SZ","TC","TD","TF","TG","TH","TJ","TK","TL","TM","TN","TO","TR","TT","TV","TW","TZ","UA","UG","UM","US","UY","UZ","VA","VC","VE","VG","VI","VN","VU","WF","WS","XI","YE","YT","ZA","ZM","ZW"]},"registrationStrategy":{"type":"string","enum":["AUTO","MANUAL","NONE"],"description":"Electronic address registration mode.","x-doc":{"text":"Electronic address registration mode.","more":"If not provided, uses operator-level configuration or defaults to AUTO.","array":[{"code":"AUTO","label":"Electronic address registration is triggered automatically on acceptance."},{"code":"MANUAL","label":"Electronic address registration requires a manual trigger."},{"code":"NONE","label":"No electronic address registration is performed."}]}},"selfBilling":{"type":"boolean","description":"Enable self-billing invoice reception at enrollment time. When true, self-billing document types are automatically registered in the SMP on enrollment completion.","x-doc":{"text":"Enable self-billing invoice reception at enrollment time. When true, self-billing document types are automatically registered in the SMP on enrollment completion."}},"operatorRelation":{"type":"object","properties":{"data":{"type":"object","properties":{"header":{"type":"array","items":{"type":"object","properties":{"key":{"type":"string","minLength":1,"pattern":"^[!#$%&'*+.^_`|~0-9A-Za-z-]+$"},"value":{"type":"string","minLength":1,"pattern":"^\\S+$"}},"required":["key","value"]},"maxItems":5,"description":"Will be added to the webhook request into the header.","x-doc":{"text":"Will be added to the webhook request into the header."}},"query":{"type":"array","items":{"type":"object","properties":{"key":{"type":"string","minLength":1,"pattern":"^[!#$%&'*+.^_`|~0-9A-Za-z-]+$"},"value":{"type":"string","minLength":1,"pattern":"^\\S+$"}},"required":["key","value"]},"maxItems":5,"description":"Will be added to the webhook request as query parameter.","x-doc":{"text":"Will be added to the webhook request as query parameter."}},"param":{"type":"array","items":{"type":"object","properties":{"key":{"type":"string","pattern":"^:"},"value":{"type":"string","minLength":1,"pattern":"^\\S+$"}},"required":["key","value"]},"maxItems":3,"description":"Will be added to the webhook request as path parameter.","x-doc":{"text":"Will be added to the webhook request as path parameter.","more":"Use the :$key format for keys. Example: { key: \":companyId\", value: \"123456789\" }"}},"custom":{"type":"object","additionalProperties":{"nullable":true}}},"description":"Any kind of specific data","x-doc":{"text":"Any kind of specific data","more":"Included in the webhook payload sent to your endpoint."}},"direction":{"type":"string","nullable":true,"enum":["OUTBOUND","INBOUND"],"description":"Optional direction filter for the business entity relation (bidirectional if null or omitted).","x-doc":{"text":"Optional direction filter for the business entity relation (bidirectional if null or omitted).","array":[{"code":"OUTBOUND","label":"An invoice or status issued to a customer or client"},{"code":"INBOUND","label":"An invoice or status received from a supplier or vendor"}]}}}},"businessEntityDetails":{"type":"object","properties":{"readonly":{"type":"boolean"},"vatRegime":{"type":"string","enum":["REAL_MONTHLY_TAX_REGIME","REAL_QUARTERLY_TAX_REGIME","SIMPLIFIED_TAX_REGIME","VAT_EXEMPTION_REGIME"],"description":"French VAT regime of the business entity.","x-doc":{"text":"French VAT regime of the business entity.","array":[{"code":"REAL_MONTHLY_TAX_REGIME","label":"Real normal tax regime with monthly VAT declarations."},{"code":"REAL_QUARTERLY_TAX_REGIME","label":"Real normal tax regime with quarterly VAT declarations."},{"code":"SIMPLIFIED_TAX_REGIME","label":"Simplified tax regime with annual VAT declarations."},{"code":"VAT_EXEMPTION_REGIME","label":"VAT exemption regime (franchise en base de TVA)."}]}},"contactEmail":{"type":"string","minLength":1,"format":"email"},"address":{"type":"string","minLength":1}},"required":["contactEmail","address"]},"legalRepresentative":{"type":"object","properties":{"readonly":{"type":"boolean"},"firstName":{"type":"string","minLength":1},"lastName":{"type":"string","minLength":1},"position":{"type":"string","minLength":1}},"required":["firstName","lastName","position"]}},"required":["identifierScheme","identifierValue","name","country"]},"examples":{"enrollBeExampleBody":{"summary":"Enroll a Belgian business entity","value":{"name":"IOPOLE Belgique","country":"BE","identifierScheme":"0208","identifierValue":"0842162017"}},"enrollInternationalWithSelfBillingExampleBody":{"summary":"Enroll an international business entity with self-billing enabled","value":{"name":"IOPOLE Belgique","country":"BE","identifierScheme":"0208","identifierValue":"0842162017","selfBilling":true}},"enrollBeOutboundExampleBody":{"summary":"Enroll a Belgian business entity (Outbound only)","value":{"name":"IOPOLE Belgique","country":"BE","identifierScheme":"0208","identifierValue":"0842162017","operatorRelation":{"direction":"OUTBOUND"}}},"enrollBeCustomDataExampleBody":{"summary":"Enroll a Belgian business entity with custom data","value":{"name":"IOPOLE Belgique","country":"BE","identifierScheme":"0208","identifierValue":"0842162017","operatorRelation":{"direction":"OUTBOUND","data":{"header":[{"key":"X-Client-ID","value":"12345"}],"query":[{"key":"resourceID","value":"67890"},{"key":"priority","value":"high"}],"param":[{"key":"tenantId","value":"12345"}]}}}},"enrollInternationalExampleWithAllDataProvidedBody":{"summary":"Enroll a Belgian business entity with all data provided","value":{"name":"IOPOLE Belgique","country":"BE","identifierScheme":"0208","identifierValue":"0842162017","businessEntityDetails":{"readonly":true,"contactEmail":"your-email@yourcompany.com","address":"company address"},"legalRepresentative":{"readonly":true,"firstName":"John","lastName":"Doe","position":"CEO"}}}}}}},"responses":{"200":{"description":"Business entity enrollment done","content":{"application/json":{"schema":{"type":"object","properties":{"enrollmentId":{"type":"string"},"onboardingUrl":{"type":"string"}},"required":["enrollmentId","onboardingUrl"]},"examples":{"enrollInternationalResponseBody":{"summary":"Enroll a \"not\" french business entity","value":{"enrollmentId":"654e7518-11e1-4f92-bd59-04682b738424","onboardingUrl":"https://admin.iopole.fr/onboarding"}}}}},"x-doc":{"text":"Business entity enrollment done"}},"401":{"description":"Unauthorized - Authentication is required and has failed or has not yet been provided.","x-doc":{"text":"Unauthorized - Authentication is required and has failed or has not yet been provided."}},"403":{"description":"Forbidden - The server understood the request, but it refuses to authorize it.","x-doc":{"text":"Forbidden - The server understood the request, but it refuses to authorize it."}},"409":{"description":"Conflict - The request could not be completed. An enrollment with the same identifiers already exists.","x-doc":{"text":"Conflict - The request could not be completed. An enrollment with the same identifiers already exists."}}},"x-doc":{"text":"⚠️ **This endpoint is deprecated.** Use `POST /v1/config/international/enrollment` instead.\n\nℹ️ **Automatic International entity Enrollment**\n\nThis endpoint **generates an enrollment link** for the end user.\nThrough this link, the end user completes the **enrollment process**, including\n**KYC / KYB steps**.\n\nThe exact enrollment flow and required steps **depend on the operator configuration options**.\n\n🚨 The enrollment process is **fully automatic**.\n\nThe operator **does not need to create, claim, or register anything manually**.\nOnce the **end-user enrollment is completed**, the system automatically:\n- creates all required resources,\n- performs the necessary registrations,\n- links them to the operator when applicable.\n\n**No additional API call is required from the operator.**\n\n**Registration Strategy**: You can override the operator-level registration configuration by providing the `registrationStrategy` field:\n- `AUTO`: Registration is triggered immediately when enrollment is accepted (default)\n- `MANUAL`: Registration must be triggered manually\n- `NONE`: No automatic registration"}},"post":{"summary":"Create an international business entity enrollment","description":"ℹ️ **Strict International entity Enrollment — returns 201 Created**\n\nThis endpoint **always creates a new enrollment** for the given operator + identifier pair.\n\nUnlike the deprecated `PUT` endpoint (which is idempotent and returns the existing enrollment on conflict),\nthis endpoint creates a fresh enrollment on every call and returns `201 Created`.\n\n**Registration Strategy**: You can override the operator-level registration configuration by providing the `registrationStrategy` field:\n- `AUTO`: Registration is triggered immediately when enrollment is accepted (default)\n- `MANUAL`: Registration must be triggered manually\n- `NONE`: No automatic registration","tags":["Operator Business Entity Enrollment"],"security":[{"oauth2ClientCredentials":[]}],"parameters":[{"name":"customer-id","in":"header","required":false,"schema":{"type":"string","format":"uuid"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"identifierScheme":{"type":"string","pattern":"^\\d{4}$","description":"Scheme of the identifier.","x-doc":{"text":"Scheme of the identifier."}},"identifierValue":{"type":"string","pattern":"^[a-zA-Z0-9-_]+$","description":"Value of the identifier.","x-doc":{"text":"Value of the identifier."}},"name":{"type":"string","description":"Name of the business entity.","x-doc":{"text":"Name of the business entity."}},"country":{"type":"string","enum":["1A","AD","AE","AF","AG","AI","AL","AM","AO","AQ","AR","AS","AT","AU","AW","AX","AZ","BA","BB","BD","BE","BF","BG","BH","BI","BJ","BL","BM","BN","BO","BQ","BR","BS","BT","BV","BW","BY","BZ","CA","CC","CD","CF","CG","CH","CI","CK","CL","CM","CN","CO","CR","CU","CV","CW","CX","CY","CZ","DE","DJ","DK","DM","DO","DZ","EC","EE","EG","EH","ER","ES","ET","FI","FJ","FK","FM","FO","FR","GA","GB","GD","GE","GF","GG","GH","GI","GL","GM","GN","GP","GQ","GR","GS","GT","GU","GW","GY","HK","HM","HN","HR","HT","HU","ID","IE","IL","IM","IN","IO","IQ","IR","IS","IT","JE","JM","JO","JP","KE","KG","KH","KI","KM","KN","KP","KR","KW","KY","KZ","LA","LB","LC","LI","LK","LR","LS","LT","LU","LV","LY","MA","MC","MD","ME","MF","MG","MH","MK","ML","MM","MN","MO","MP","MQ","MR","MS","MT","MU","MV","MW","MX","MY","MZ","NA","NC","NE","NF","NG","NI","NL","NO","NP","NR","NU","NZ","OM","PA","PE","PF","PG","PH","PK","PL","PM","PN","PR","PS","PT","PW","PY","QA","RE","RO","RS","RU","RW","SA","SB","SC","SD","SE","SG","SH","SI","SJ","SK","SL","SM","SN","SO","SR","SS","ST","SV","SX","SY","SZ","TC","TD","TF","TG","TH","TJ","TK","TL","TM","TN","TO","TR","TT","TV","TW","TZ","UA","UG","UM","US","UY","UZ","VA","VC","VE","VG","VI","VN","VU","WF","WS","XI","YE","YT","ZA","ZM","ZW"]},"registrationStrategy":{"type":"string","enum":["AUTO","MANUAL","NONE"],"description":"Electronic address registration mode.","x-doc":{"text":"Electronic address registration mode.","more":"If not provided, uses operator-level configuration or defaults to AUTO.","array":[{"code":"AUTO","label":"Electronic address registration is triggered automatically on acceptance."},{"code":"MANUAL","label":"Electronic address registration requires a manual trigger."},{"code":"NONE","label":"No electronic address registration is performed."}]}},"selfBilling":{"type":"boolean","description":"Enable self-billing invoice reception at enrollment time. When true, self-billing document types are automatically registered in the SMP on enrollment completion.","x-doc":{"text":"Enable self-billing invoice reception at enrollment time. When true, self-billing document types are automatically registered in the SMP on enrollment completion."}},"operatorRelation":{"type":"object","properties":{"data":{"type":"object","properties":{"header":{"type":"array","items":{"type":"object","properties":{"key":{"type":"string","minLength":1,"pattern":"^[!#$%&'*+.^_`|~0-9A-Za-z-]+$"},"value":{"type":"string","minLength":1,"pattern":"^\\S+$"}},"required":["key","value"]},"maxItems":5,"description":"Will be added to the webhook request into the header.","x-doc":{"text":"Will be added to the webhook request into the header."}},"query":{"type":"array","items":{"type":"object","properties":{"key":{"type":"string","minLength":1,"pattern":"^[!#$%&'*+.^_`|~0-9A-Za-z-]+$"},"value":{"type":"string","minLength":1,"pattern":"^\\S+$"}},"required":["key","value"]},"maxItems":5,"description":"Will be added to the webhook request as query parameter.","x-doc":{"text":"Will be added to the webhook request as query parameter."}},"param":{"type":"array","items":{"type":"object","properties":{"key":{"type":"string","pattern":"^:"},"value":{"type":"string","minLength":1,"pattern":"^\\S+$"}},"required":["key","value"]},"maxItems":3,"description":"Will be added to the webhook request as path parameter.","x-doc":{"text":"Will be added to the webhook request as path parameter.","more":"Use the :$key format for keys. Example: { key: \":companyId\", value: \"123456789\" }"}},"custom":{"type":"object","additionalProperties":{"nullable":true}}},"description":"Any kind of specific data","x-doc":{"text":"Any kind of specific data","more":"Included in the webhook payload sent to your endpoint."}},"direction":{"type":"string","nullable":true,"enum":["OUTBOUND","INBOUND"],"description":"Optional direction filter for the business entity relation (bidirectional if null or omitted).","x-doc":{"text":"Optional direction filter for the business entity relation (bidirectional if null or omitted).","array":[{"code":"OUTBOUND","label":"An invoice or status issued to a customer or client"},{"code":"INBOUND","label":"An invoice or status received from a supplier or vendor"}]}}}},"businessEntityDetails":{"type":"object","properties":{"readonly":{"type":"boolean"},"vatRegime":{"type":"string","enum":["REAL_MONTHLY_TAX_REGIME","REAL_QUARTERLY_TAX_REGIME","SIMPLIFIED_TAX_REGIME","VAT_EXEMPTION_REGIME"],"description":"French VAT regime of the business entity.","x-doc":{"text":"French VAT regime of the business entity.","array":[{"code":"REAL_MONTHLY_TAX_REGIME","label":"Real normal tax regime with monthly VAT declarations."},{"code":"REAL_QUARTERLY_TAX_REGIME","label":"Real normal tax regime with quarterly VAT declarations."},{"code":"SIMPLIFIED_TAX_REGIME","label":"Simplified tax regime with annual VAT declarations."},{"code":"VAT_EXEMPTION_REGIME","label":"VAT exemption regime (franchise en base de TVA)."}]}},"contactEmail":{"type":"string","minLength":1,"format":"email"},"address":{"type":"string","minLength":1}},"required":["contactEmail","address"]},"legalRepresentative":{"type":"object","properties":{"readonly":{"type":"boolean"},"firstName":{"type":"string","minLength":1},"lastName":{"type":"string","minLength":1},"position":{"type":"string","minLength":1}},"required":["firstName","lastName","position"]}},"required":["identifierScheme","identifierValue","name","country"]},"examples":{"enrollBeExampleBody":{"summary":"Enroll a Belgian business entity","value":{"name":"IOPOLE Belgique","country":"BE","identifierScheme":"0208","identifierValue":"0842162017"}},"enrollInternationalWithSelfBillingExampleBody":{"summary":"Enroll an international business entity with self-billing enabled","value":{"name":"IOPOLE Belgique","country":"BE","identifierScheme":"0208","identifierValue":"0842162017","selfBilling":true}},"enrollBeOutboundExampleBody":{"summary":"Enroll a Belgian business entity (Outbound only)","value":{"name":"IOPOLE Belgique","country":"BE","identifierScheme":"0208","identifierValue":"0842162017","operatorRelation":{"direction":"OUTBOUND"}}},"enrollBeCustomDataExampleBody":{"summary":"Enroll a Belgian business entity with custom data","value":{"name":"IOPOLE Belgique","country":"BE","identifierScheme":"0208","identifierValue":"0842162017","operatorRelation":{"direction":"OUTBOUND","data":{"header":[{"key":"X-Client-ID","value":"12345"}],"query":[{"key":"resourceID","value":"67890"},{"key":"priority","value":"high"}],"param":[{"key":"tenantId","value":"12345"}]}}}},"enrollInternationalExampleWithAllDataProvidedBody":{"summary":"Enroll a Belgian business entity with all data provided","value":{"name":"IOPOLE Belgique","country":"BE","identifierScheme":"0208","identifierValue":"0842162017","businessEntityDetails":{"readonly":true,"contactEmail":"your-email@yourcompany.com","address":"company address"},"legalRepresentative":{"readonly":true,"firstName":"John","lastName":"Doe","position":"CEO"}}}}}}},"responses":{"201":{"description":"Business entity enrollment created","content":{"application/json":{"schema":{"type":"object","properties":{"enrollmentId":{"type":"string"},"onboardingUrl":{"type":"string"}},"required":["enrollmentId","onboardingUrl"]},"examples":{"enrollInternationalResponseBody":{"summary":"Enroll a \"not\" french business entity","value":{"enrollmentId":"654e7518-11e1-4f92-bd59-04682b738424","onboardingUrl":"https://admin.iopole.fr/onboarding"}}}}},"x-doc":{"text":"Business entity enrollment created"}},"401":{"description":"Unauthorized - Authentication is required and has failed or has not yet been provided.","x-doc":{"text":"Unauthorized - Authentication is required and has failed or has not yet been provided."}},"403":{"description":"Forbidden - The server understood the request, but it refuses to authorize it.","x-doc":{"text":"Forbidden - The server understood the request, but it refuses to authorize it."}}},"x-doc":{"text":"ℹ️ **Strict International entity Enrollment — returns 201 Created**\n\nThis endpoint **always creates a new enrollment** for the given operator + identifier pair.\n\nUnlike the deprecated `PUT` endpoint (which is idempotent and returns the existing enrollment on conflict),\nthis endpoint creates a fresh enrollment on every call and returns `201 Created`.\n\n**Registration Strategy**: You can override the operator-level registration configuration by providing the `registrationStrategy` field:\n- `AUTO`: Registration is triggered immediately when enrollment is accepted (default)\n- `MANUAL`: Registration must be triggered manually\n- `NONE`: No automatic registration"}}},"/v1/config/enrollment/{enrollmentId}/evidences":{"get":{"summary":"Download enrollment evidences","description":"Downloads a ZIP archive containing the enrollment evidence files for a completed enrollment.\n\nThe archive may include:\n- **Identity verification report** (`kyc_evidence.pdf`)\n- **Signed mandate** (`signed_mandate.pdf`) and **mandate audit trail** (`mandate_evidence.pdf`)\n\nEach file is only included if the corresponding service was used during the enrollment.\n\n🔒 This endpoint is restricted to **white label operators** only.\n\nThe enrollment must be in state `REGISTERING`, `REGISTERED`, or `COMPLETED`.","tags":["Operator Business Entity Enrollment"],"security":[{"oauth2ClientCredentials":[]}],"parameters":[{"name":"enrollmentId","in":"path","required":true,"schema":{"type":"string","format":"uuid"}}],"responses":{"200":{"description":"ZIP archive containing the enrollment evidence files","content":{"application/zip":{"schema":{"type":"string","format":"binary"}}},"x-doc":{"text":"ZIP archive containing the enrollment evidence files"}},"400":{"description":"Validation - Request validation failure.","x-doc":{"text":"Validation - Request validation failure."}},"401":{"description":"Unauthorized - Authentication is required and has failed or has not yet been provided.","x-doc":{"text":"Unauthorized - Authentication is required and has failed or has not yet been provided."}},"403":{"description":"Forbidden - The server understood the request, but it refuses to authorize it.","x-doc":{"text":"Forbidden - The server understood the request, but it refuses to authorize it."}},"404":{"description":"Not Found - No enrollment exists for the given enrollmentId.","x-doc":{"text":"Not Found - No enrollment exists for the given enrollmentId."}},"409":{"description":"Conflict - The enrollment is not yet fully completed.","x-doc":{"text":"Conflict - The enrollment is not yet fully completed."}}},"x-doc":{"text":"Downloads a ZIP archive containing the enrollment evidence files for a completed enrollment.\n\nThe archive may include:\n- **Identity verification report** (`kyc_evidence.pdf`)\n- **Signed mandate** (`signed_mandate.pdf`) and **mandate audit trail** (`mandate_evidence.pdf`)\n\nEach file is only included if the corresponding service was used during the enrollment.\n\n🔒 This endpoint is restricted to **white label operators** only.\n\nThe enrollment must be in state `REGISTERING`, `REGISTERED`, or `COMPLETED`."}}},"/v1/config/enrollment/{enrollmentId}/portability":{"get":{"summary":"Get portability data and deliverable links","description":"Returns the change-of-PA (portability) situation of one enrolled customer, and a download link per outgoing PA.\n\nFor each electronic address:\n- **electronicAddress** and **addressType** — the address and its addressing level\n- **portabilityStatus** — `NOT_REQUIRED` (held by nobody), `PORTABILITY_REQUIRED` (the outgoing PA has not consented yet) or `PORTABILITY_GRANTED` (consent recorded)\n- **networks** — whether the address is registered in the French centralised directory and on Peppol\n- **holdingPlatforms** — the PA(s) currently holding the address, with their matricule\n- **futureActivationDate** — set when a registration has not started yet\n\n`portabilityDeliverables` carries one entry per outgoing PA, each with a `downloadLink` to a ZIP archive holding the signed mandate and the portability CSV for that PA. `oldPlatform.technicalContact` is a contact reported by the source directory, passed through as-is: it is not guaranteed to be an email in every case.\n\n⚠️ When an address is registered only on Peppol (not in the French directory), there is no verifiable legal identifier for the outgoing platform. Its deliverable is flagged `onlyInPeppolProblem: true`, and `oldPlatform.legalIdentifier` is a synthetic `PEPPOL_ONLY:<platform name>` placeholder, never a real matricule — the CSV `Anc_PA_matricule` column is left empty for that row. `onlyInPeppolProblem` is present (`true`) only on this edge case; it is never sent as `false`.\n\n🔒 This endpoint is restricted to **white label operators** only, and to the operator owning the enrollment.\n\nThe deliverables exist only once the customer has completed the identity, business and mandate steps and has validated their electronic addresses. Before that the endpoint answers `409` — subscribe to the `ELECTRONIC_ADDRESS_MIGRATION` onboarding webhook stage to be notified when they become available.","tags":["Operator Business Entity Enrollment"],"security":[{"oauth2ClientCredentials":[]}],"parameters":[{"name":"enrollmentId","in":"path","required":true,"schema":{"type":"string","format":"uuid"}}],"responses":{"200":{"description":"Portability data of the customer, with one download link per outgoing PA","content":{"application/json":{"schema":{"type":"object","properties":{"enrollmentId":{"type":"string","format":"uuid"},"siren":{"type":"string"},"companyName":{"type":"string","nullable":true,"description":"The customer name as recorded in the French directory.","x-doc":{"text":"The customer name as recorded in the French directory."}},"newPlatform":{"type":"object","description":"The receiving PA of the portability: the operator itself.","properties":{"name":{"type":"string","nullable":true},"legalIdentifier":{"type":"string","nullable":true},"siren":{"type":"string","nullable":true}},"x-doc":{"text":"The receiving PA of the portability: the operator itself."}},"mandate":{"type":"object","properties":{"number":{"type":"string","nullable":true},"effectiveDate":{"type":"string","nullable":true},"signingDate":{"type":"string","nullable":true}}},"addresses":{"type":"array","items":{"type":"object","properties":{"electronicAddress":{"type":"string"},"addressType":{"type":"string"},"migrationKey":{"type":"string"},"portabilityStatus":{"type":"string","enum":["NOT_REQUIRED","PORTABILITY_REQUIRED","PORTABILITY_GRANTED"]},"networks":{"type":"object","properties":{"domesticFr":{"type":"boolean"},"peppol":{"type":"boolean"}}},"holdingPlatforms":{"type":"array","items":{"type":"object","properties":{"legalIdentifier":{"type":"string"},"name":{"type":"string","nullable":true},"technicalContact":{"type":"string","nullable":true},"futureActivationDate":{"type":"string","nullable":true}}}},"futureActivationDate":{"type":"string","nullable":true}}}},"portabilityDeliverables":{"type":"array","items":{"type":"object","properties":{"oldPlatform":{"type":"object","properties":{"legalIdentifier":{"type":"string"},"name":{"type":"string","nullable":true},"technicalContact":{"type":"string","nullable":true}}},"downloadLink":{"type":"string","format":"uri"},"onlyInPeppolProblem":{"type":"boolean","description":"Present (true) only when oldPlatform is a synthetic Peppol-only placeholder with no real legal identifier. Absent, never false, otherwise.","x-doc":{"text":"Present (true) only when oldPlatform is a synthetic Peppol-only placeholder with no real legal identifier. Absent, never false, otherwise."}}}}}}}}},"x-doc":{"text":"Portability data of the customer, with one download link per outgoing PA"}},"400":{"description":"Validation - Request validation failure.","x-doc":{"text":"Validation - Request validation failure."}},"401":{"description":"Unauthorized - Authentication is required and has failed or has not yet been provided.","x-doc":{"text":"Unauthorized - Authentication is required and has failed or has not yet been provided."}},"403":{"description":"Forbidden - The server understood the request, but it refuses to authorize it.","x-doc":{"text":"Forbidden - The server understood the request, but it refuses to authorize it."}},"404":{"description":"Not Found - No enrollment exists for the given enrollmentId.","x-doc":{"text":"Not Found - No enrollment exists for the given enrollmentId."}},"409":{"description":"Conflict - The portability deliverables are not available yet.","x-doc":{"text":"Conflict - The portability deliverables are not available yet."}}},"x-doc":{"text":"Returns the change-of-PA (portability) situation of one enrolled customer, and a download link per outgoing PA.\n\nFor each electronic address:\n- **electronicAddress** and **addressType** — the address and its addressing level\n- **portabilityStatus** — `NOT_REQUIRED` (held by nobody), `PORTABILITY_REQUIRED` (the outgoing PA has not consented yet) or `PORTABILITY_GRANTED` (consent recorded)\n- **networks** — whether the address is registered in the French centralised directory and on Peppol\n- **holdingPlatforms** — the PA(s) currently holding the address, with their matricule\n- **futureActivationDate** — set when a registration has not started yet\n\n`portabilityDeliverables` carries one entry per outgoing PA, each with a `downloadLink` to a ZIP archive holding the signed mandate and the portability CSV for that PA. `oldPlatform.technicalContact` is a contact reported by the source directory, passed through as-is: it is not guaranteed to be an email in every case.\n\n⚠️ When an address is registered only on Peppol (not in the French directory), there is no verifiable legal identifier for the outgoing platform. Its deliverable is flagged `onlyInPeppolProblem: true`, and `oldPlatform.legalIdentifier` is a synthetic `PEPPOL_ONLY:<platform name>` placeholder, never a real matricule — the CSV `Anc_PA_matricule` column is left empty for that row. `onlyInPeppolProblem` is present (`true`) only on this edge case; it is never sent as `false`.\n\n🔒 This endpoint is restricted to **white label operators** only, and to the operator owning the enrollment.\n\nThe deliverables exist only once the customer has completed the identity, business and mandate steps and has validated their electronic addresses. Before that the endpoint answers `409` — subscribe to the `ELECTRONIC_ADDRESS_MIGRATION` onboarding webhook stage to be notified when they become available."}}},"/v1/config/enrollment/{enrollmentId}/portability/{oldPlatformLegalIdentifier}":{"get":{"summary":"Download the portability deliverables of one outgoing PA","description":"Downloads the ZIP archive to file with one outgoing PA for a change-of-PA request.\n\nThe archive contains:\n- the **portability request CSV** (`MOB_REQ_<id>.csv`), listing every address of the customer held by that outgoing PA\n- the **signed mandate** (`signed_mandate.pdf`), when Iopole holds one for the customer\n\nWhen the operator manages the mandate on its own side the enrollment carries none, and the archive holds the CSV alone.\n\n🔒 This endpoint is restricted to **white label operators** only, and to the operator owning the enrollment.\n\nGet the links from `GET /v1/config/enrollment/{enrollmentId}/portability` or from the `ELECTRONIC_ADDRESS_MIGRATION` onboarding webhook. `oldPlatformLegalIdentifier` is the matricule of the outgoing PA; a matricule holding none of this customer's addresses answers `404`.\n\n⚠️ For a deliverable flagged `onlyInPeppolProblem: true`, `oldPlatformLegalIdentifier` is NOT a real matricule — pass the synthetic `PEPPOL_ONLY:<platform name>` value exactly as returned in `portabilityDeliverables`.","tags":["Operator Business Entity Enrollment"],"security":[{"oauth2ClientCredentials":[]}],"parameters":[{"name":"enrollmentId","in":"path","required":true,"schema":{"type":"string","format":"uuid"}},{"name":"oldPlatformLegalIdentifier","in":"path","required":true,"description":"Matricule of the outgoing PA, or the synthetic `PEPPOL_ONLY:<platform name>` placeholder when the deliverable is flagged `onlyInPeppolProblem: true`.","schema":{"type":"string"},"x-doc":{"text":"Matricule of the outgoing PA, or the synthetic `PEPPOL_ONLY:<platform name>` placeholder when the deliverable is flagged `onlyInPeppolProblem: true`."}}],"responses":{"200":{"description":"ZIP archive holding the portability CSV and, when available, the signed mandate","content":{"application/zip":{"schema":{"type":"string","format":"binary"}}},"x-doc":{"text":"ZIP archive holding the portability CSV and, when available, the signed mandate"}},"400":{"description":"Validation - Request validation failure.","x-doc":{"text":"Validation - Request validation failure."}},"401":{"description":"Unauthorized - Authentication is required and has failed or has not yet been provided.","x-doc":{"text":"Unauthorized - Authentication is required and has failed or has not yet been provided."}},"403":{"description":"Forbidden - The server understood the request, but it refuses to authorize it.","x-doc":{"text":"Forbidden - The server understood the request, but it refuses to authorize it."}},"404":{"description":"Not Found - No enrollment for the given enrollmentId, or no deliverable for that outgoing PA.","x-doc":{"text":"Not Found - No enrollment for the given enrollmentId, or no deliverable for that outgoing PA."}},"409":{"description":"Conflict - The portability deliverables are not available yet.","x-doc":{"text":"Conflict - The portability deliverables are not available yet."}}},"x-doc":{"text":"Downloads the ZIP archive to file with one outgoing PA for a change-of-PA request.\n\nThe archive contains:\n- the **portability request CSV** (`MOB_REQ_<id>.csv`), listing every address of the customer held by that outgoing PA\n- the **signed mandate** (`signed_mandate.pdf`), when Iopole holds one for the customer\n\nWhen the operator manages the mandate on its own side the enrollment carries none, and the archive holds the CSV alone.\n\n🔒 This endpoint is restricted to **white label operators** only, and to the operator owning the enrollment.\n\nGet the links from `GET /v1/config/enrollment/{enrollmentId}/portability` or from the `ELECTRONIC_ADDRESS_MIGRATION` onboarding webhook. `oldPlatformLegalIdentifier` is the matricule of the outgoing PA; a matricule holding none of this customer's addresses answers `404`.\n\n⚠️ For a deliverable flagged `onlyInPeppolProblem: true`, `oldPlatformLegalIdentifier` is NOT a real matricule — pass the synthetic `PEPPOL_ONLY:<platform name>` value exactly as returned in `portabilityDeliverables`."}}},"/v1/config/enrollment/{enrollmentId}":{"put":{"summary":"Update an enrollment","description":"Patches an existing enrollment with the provided fields. Only present fields are updated.\n\n**Field-level guards:**\n- `legalRepresentative`: Only allowed before identity verification has been finalized.\n  Resets the identity verification process and clears any pending external service requests.\n- `businessEntityDetails`: Only allowed before the mandate process has been initiated.\n- `eInvoicingAddresses`: Only allowed before the mandate process has been initiated.\n  Resets the electronic addresses verification process.\n- `operatorRelation.direction → OUTBOUND`: Disables mandate and electronic addresses requirements,\n  recomputes enrollment progress, and triggers registration if all required steps are complete.\n\n**Global guard:** Rejected if the enrollment has already been finalized or is currently being registered.","tags":["Operator Business Entity Enrollment"],"security":[{"oauth2ClientCredentials":[]}],"parameters":[{"name":"enrollmentId","in":"path","required":true,"schema":{"type":"string","format":"uuid"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"legalRepresentative":{"type":"object","properties":{"firstName":{"type":"string"},"lastName":{"type":"string"},"position":{"type":"string"}}},"businessEntityDetails":{"type":"object","properties":{"vatRegime":{"type":"string","enum":["REAL_MONTHLY_TAX_REGIME","REAL_QUARTERLY_TAX_REGIME","SIMPLIFIED_TAX_REGIME","VAT_EXEMPTION_REGIME"],"description":"French VAT regime of the business entity.","x-doc":{"text":"French VAT regime of the business entity.","array":[{"code":"REAL_MONTHLY_TAX_REGIME","label":"Real normal tax regime with monthly VAT declarations."},{"code":"REAL_QUARTERLY_TAX_REGIME","label":"Real normal tax regime with quarterly VAT declarations."},{"code":"SIMPLIFIED_TAX_REGIME","label":"Simplified tax regime with annual VAT declarations."},{"code":"VAT_EXEMPTION_REGIME","label":"VAT exemption regime (franchise en base de TVA)."}]}},"contactEmail":{"type":"string","format":"email"},"address":{"type":"string"}}},"eInvoicingAddresses":{"type":"object","properties":{"readonly":{"type":"boolean"},"value":{"type":"array","items":{"type":"object","properties":{"electronicAddress":{"type":"string"},"addressType":{"type":"string"}},"required":["electronicAddress","addressType"]}}},"required":["value"]},"operatorRelation":{"type":"object","properties":{"direction":{"type":"string","enum":["INBOUND","OUTBOUND"]}},"required":["direction"]}}}}}},"responses":{"204":{"description":"Enrollment updated successfully","x-doc":{"text":"Enrollment updated successfully"}},"400":{"description":"Bad Request - Request validation failure.\n\nPossible error codes:\n- `ELECTRONIC_ADDRESS_ALREADY_USED` — Two entries of `eInvoicingAddresses` declare the same `electronicAddress`","x-doc":{"text":"Bad Request - Request validation failure.\n\nPossible error codes:\n- `ELECTRONIC_ADDRESS_ALREADY_USED` — Two entries of `eInvoicingAddresses` declare the same `electronicAddress`"}},"401":{"description":"Unauthorized - Authentication is required and has failed or has not yet been provided.","x-doc":{"text":"Unauthorized - Authentication is required and has failed or has not yet been provided."}},"403":{"description":"Forbidden - The server understood the request, but it refuses to authorize it.","x-doc":{"text":"Forbidden - The server understood the request, but it refuses to authorize it."}},"404":{"description":"Not Found - No enrollment exists for the given enrollmentId.","x-doc":{"text":"Not Found - No enrollment exists for the given enrollmentId."}},"409":{"description":"Conflict - The enrollment cannot be edited in its current state, or a field-level guard was violated.","x-doc":{"text":"Conflict - The enrollment cannot be edited in its current state, or a field-level guard was violated."}}},"x-doc":{"text":"Patches an existing enrollment with the provided fields. Only present fields are updated.\n\n**Field-level guards:**\n- `legalRepresentative`: Only allowed before identity verification has been finalized.\n  Resets the identity verification process and clears any pending external service requests.\n- `businessEntityDetails`: Only allowed before the mandate process has been initiated.\n- `eInvoicingAddresses`: Only allowed before the mandate process has been initiated.\n  Resets the electronic addresses verification process.\n- `operatorRelation.direction → OUTBOUND`: Disables mandate and electronic addresses requirements,\n  recomputes enrollment progress, and triggers registration if all required steps are complete.\n\n**Global guard:** Rejected if the enrollment has already been finalized or is currently being registered."}},"delete":{"summary":"Cancel an enrollment","description":"Cancels an ongoing onboarding enrollment, setting its status to `CANCELLED`.\n\nOnce cancelled, all subsequent API calls referencing this `enrollmentId` will be rejected.\n\n**Guards:**\n- The enrollment must exist and belong to the requesting operator.\n- The enrollment must not be in a terminal state (`COMPLETED`, `CANCELLED`) or actively registering (`REGISTERING`).\n\nIf the operator is subscribed to the `CANCELLED` webhook stage, an `ONBOARDING_STATE_CHANGED` event is delivered.","tags":["Operator Business Entity Enrollment"],"security":[{"oauth2ClientCredentials":[]}],"parameters":[{"name":"enrollmentId","in":"path","required":true,"schema":{"type":"string","format":"uuid"}}],"responses":{"204":{"description":"Enrollment cancelled successfully.","x-doc":{"text":"Enrollment cancelled successfully."}},"401":{"description":"Unauthorized - Authentication is required and has failed or has not yet been provided.","x-doc":{"text":"Unauthorized - Authentication is required and has failed or has not yet been provided."}},"403":{"description":"Forbidden - The server understood the request, but it refuses to authorize it.","x-doc":{"text":"Forbidden - The server understood the request, but it refuses to authorize it."}},"404":{"description":"Not Found - No enrollment exists for the given enrollmentId.","x-doc":{"text":"Not Found - No enrollment exists for the given enrollmentId."}},"422":{"description":"Unprocessable Entity - The enrollment cannot be cancelled in its current state (already `COMPLETED`, `CANCELLED`, or currently `REGISTERING`).","x-doc":{"text":"Unprocessable Entity - The enrollment cannot be cancelled in its current state (already `COMPLETED`, `CANCELLED`, or currently `REGISTERING`)."}}},"x-doc":{"text":"Cancels an ongoing onboarding enrollment, setting its status to `CANCELLED`.\n\nOnce cancelled, all subsequent API calls referencing this `enrollmentId` will be rejected.\n\n**Guards:**\n- The enrollment must exist and belong to the requesting operator.\n- The enrollment must not be in a terminal state (`COMPLETED`, `CANCELLED`) or actively registering (`REGISTERING`).\n\nIf the operator is subscribed to the `CANCELLED` webhook stage, an `ONBOARDING_STATE_CHANGED` event is delivered."}},"get":{"summary":"Get enrollment details by ID","description":"Fetches the enrollment details, identified by its enrollment ID.","tags":["Operator Business Entity Enrollment"],"security":[{"oauth2ClientCredentials":[]}],"parameters":[{"name":"enrollmentId","in":"path","required":true,"schema":{"type":"string","format":"uuid"}}],"responses":{"200":{"description":"Enrollment details found","content":{"application/json":{"schema":{"type":"object","required":["enrollmentId","identifierScheme","identifierValue","name","state","enrollmentLink"],"properties":{"enrollmentId":{"type":"string","format":"uuid"},"identifierScheme":{"type":"string"},"identifierValue":{"type":"string"},"name":{"type":"string"},"state":{"type":"string"},"enrollmentLink":{"type":"string","format":"uri"},"evidencesLink":{"type":"string","format":"uri"},"entity":{"type":"object","properties":{"contactEmail":{"type":"string","format":"email"},"vatRegime":{"type":"string","enum":["REAL_MONTHLY_TAX_REGIME","REAL_QUARTERLY_TAX_REGIME","SIMPLIFIED_TAX_REGIME","VAT_EXEMPTION_REGIME"],"description":"French VAT regime of the business entity.","x-doc":{"text":"French VAT regime of the business entity.","array":[{"code":"REAL_MONTHLY_TAX_REGIME","label":"Real normal tax regime with monthly VAT declarations."},{"code":"REAL_QUARTERLY_TAX_REGIME","label":"Real normal tax regime with quarterly VAT declarations."},{"code":"SIMPLIFIED_TAX_REGIME","label":"Simplified tax regime with annual VAT declarations."},{"code":"VAT_EXEMPTION_REGIME","label":"VAT exemption regime (franchise en base de TVA)."}]}},"address":{"type":"string"}}},"legalRepresentative":{"type":"object","properties":{"lastName":{"type":"string"},"firstName":{"type":"string"},"position":{"type":"string"}}},"mandate":{"type":"object","properties":{"number":{"type":"string"},"signingDate":{"type":"string","format":"date"},"effectiveDate":{"type":"string","format":"date"}}},"eInvoicingAddresses":{"type":"array","items":{"type":"object","properties":{"addressType":{"type":"string"},"electronicAddress":{"type":"string"}}}},"registrationNetworks":{"type":"array","items":{"type":"string"}}}},"examples":{"enrollmentConfigBaseResponse":{"summary":"Enrollment details for a standard operator","value":{"enrollmentId":"654e7518-11e1-4f92-bd59-04682b738424","identifierScheme":"0002","identifierValue":"054868089","name":"Iopole SAS","state":"ACTIVE","entity":{"vatRegime":"REAL_MONTHLY_TAX_REGIME"},"enrollmentLink":"http://localhost:8001/v1/config/enrollment/654e7518-11e1-4f92-bd59-04682b738424"}},"enrollmentConfigWhiteLabelResponse":{"summary":"Enrollment details for a white label operator","value":{"enrollmentId":"654e7518-11e1-4f92-bd59-04682b738424","identifierScheme":"0002","identifierValue":"054868089","name":"Iopole SAS","state":"ACTIVE","enrollmentLink":"http://localhost:8001/v1/config/enrollment/654e7518-11e1-4f92-bd59-04682b738424","evidencesLink":"http://localhost:8001/v1/config/enrollment/654e7518-11e1-4f92-bd59-04682b738424/evidences","entity":{"contactEmail":"contact@iopole.com","address":"1 rue de la Paix, 75002 Paris"},"legalRepresentative":{"lastName":"Doe","firstName":"John","position":"CEO"},"mandate":{"number":"M001","signingDate":"2024-01-01","effectiveDate":"2024-01-15"},"eInvoicingAddresses":[{"addressType":"SIREN","electronicAddress":"0002:054868089"}],"registrationNetworks":[]}}}}},"x-doc":{"text":"Enrollment details found"}},"401":{"description":"Unauthorized - Authentication is required and has failed or has not yet been provided.","x-doc":{"text":"Unauthorized - Authentication is required and has failed or has not yet been provided."}},"404":{"description":"Not Found - No ongoing enrollment exists for the given enrollmentId.","x-doc":{"text":"Not Found - No ongoing enrollment exists for the given enrollmentId."}}},"x-doc":{"text":"Fetches the enrollment details, identified by its enrollment ID."}}},"/v1/config/enrollment/{enrollmentId}/link":{"get":{"summary":"Get enrollment link by ID","description":"Fetches the enrollment link associated with an active enrollment, identified by its enrollment ID.","tags":["Operator Business Entity Enrollment"],"security":[{"oauth2ClientCredentials":[]}],"parameters":[{"name":"customer-id","in":"header","required":false,"schema":{"type":"string","format":"uuid"}},{"name":"enrollmentId","in":"path","required":true,"schema":{"type":"string","format":"uuid"}}],"responses":{"200":{"description":"Enrollment found","content":{"application/json":{"schema":{"type":"object","properties":{"enrollmentId":{"type":"string"},"onboardingUrl":{"type":"string"}},"required":["enrollmentId","onboardingUrl"]},"examples":{"onboardingLink":{"summary":"Onboarding link for enrollment","value":{"enrollmentId":"654e7518-11e1-4f92-bd59-04682b738424","onboardingUrl":"https://admin.iopole.fr/onboarding"}}}}},"x-doc":{"text":"Enrollment found"}},"401":{"description":"Unauthorized - Authentication is required and has failed or has not yet been provided.","x-doc":{"text":"Unauthorized - Authentication is required and has failed or has not yet been provided."}},"403":{"description":"Forbidden - The server understood the request, but it refuses to authorize it.","x-doc":{"text":"Forbidden - The server understood the request, but it refuses to authorize it."}},"404":{"description":"Not Found - No ongoing enrollment exists for the given enrollmentId.","x-doc":{"text":"Not Found - No ongoing enrollment exists for the given enrollmentId."}},"409":{"description":"Enrollment linked with enrollmentId already completed or cancelled.","x-doc":{"text":"Enrollment linked with enrollmentId already completed or cancelled."}}},"x-doc":{"text":"Fetches the enrollment link associated with an active enrollment, identified by its enrollment ID."}}},"/v1/config/enrollment/{scheme}/{identifier}/link":{"get":{"summary":"Get enrollment link by company identifier","description":"Retrieves the enrollment link of an ongoing enrollment using a company-specific identifier scheme and its corresponding value.","tags":["Operator Business Entity Enrollment"],"security":[{"oauth2ClientCredentials":[]}],"parameters":[{"name":"customer-id","in":"header","required":false,"schema":{"type":"string","format":"uuid"}},{"name":"scheme","in":"path","required":true,"schema":{"type":"string"}},{"name":"identifier","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Enrollment found","content":{"application/json":{"schema":{"type":"object","properties":{"enrollmentId":{"type":"string"},"onboardingUrl":{"type":"string"}},"required":["enrollmentId","onboardingUrl"]},"examples":{"onboardingLink":{"summary":"Onboarding link for enrollment","value":{"enrollmentId":"654e7518-11e1-4f92-bd59-04682b738424","onboardingUrl":"https://admin.iopole.fr/onboarding"}}}}},"x-doc":{"text":"Enrollment found"}},"401":{"description":"Unauthorized - Authentication is required and has failed or has not yet been provided.","x-doc":{"text":"Unauthorized - Authentication is required and has failed or has not yet been provided."}},"403":{"description":"Forbidden - The server understood the request, but it refuses to authorize it.","x-doc":{"text":"Forbidden - The server understood the request, but it refuses to authorize it."}},"404":{"description":"Not Found - No ongoing enrollment exists for the given company identifier.","x-doc":{"text":"Not Found - No ongoing enrollment exists for the given company identifier."}}},"x-doc":{"text":"Retrieves the enrollment link of an ongoing enrollment using a company-specific identifier scheme and its corresponding value."}}},"/v1/config/enrollment/{enrollmentId}/portability/{address}/migrate":{"put":{"summary":"Update an electronic address migration","description":"Sets either the migration key or the old-platform consent (exactly one, not both) on a French business entity electronic address that is under migration. A migration key is only accepted if the address is registered in the Peppol directory; otherwise the request is rejected.\n\nOnce every address on the enrollment is free to migrate, the electronic addresses check state is advanced to `SUBMITTED`, which in turn advances the enrollment to `REGISTERING` and starts the registration process.\n\n🔒 This endpoint is restricted to **white label operators** only.\n\nThe enrollment electronic addresses check state must be `MIGRATION` or `ACTION_REQUIRED`. A migration key may also be corrected while the check state is `SUBMITTED`.","tags":["Operator Business Entity Enrollment"],"security":[{"oauth2ClientCredentials":[]}],"parameters":[{"name":"enrollmentId","in":"path","required":true,"schema":{"type":"string","format":"uuid"}},{"name":"address","in":"path","required":true,"description":"The electronic address under migration, exactly as returned in the `addresses` of `GET /v1/config/enrollment/{enrollmentId}/portability`.","schema":{"type":"string"},"x-doc":{"text":"The electronic address under migration, exactly as returned in the `addresses` of `GET /v1/config/enrollment/{enrollmentId}/portability`."}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"migrationKey":{"type":"string","minLength":1},"consent":{"type":"boolean"}},"additionalProperties":false}}}},"responses":{"204":{"description":"Address migration updated successfully","x-doc":{"text":"Address migration updated successfully"}},"400":{"description":"Validation - The enrollment is not a French business entity, the check state does not allow the requested update, the address is not a French migration address, neither or both of migrationKey/consent were provided, or the migration key was rejected because the address is not registered in the Peppol directory.","x-doc":{"text":"Validation - The enrollment is not a French business entity, the check state does not allow the requested update, the address is not a French migration address, neither or both of migrationKey/consent were provided, or the migration key was rejected because the address is not registered in the Peppol directory."}},"401":{"description":"Unauthorized - Authentication is required and has failed or has not yet been provided.","x-doc":{"text":"Unauthorized - Authentication is required and has failed or has not yet been provided."}},"403":{"description":"Forbidden - The server understood the request, but it refuses to authorize it.\n\nPossible causes:\n- The current operator is not a white label operator\n- The enrollment belongs to another operator","x-doc":{"text":"Forbidden - The server understood the request, but it refuses to authorize it.\n\nPossible causes:\n- The current operator is not a white label operator\n- The enrollment belongs to another operator"}},"404":{"description":"Not Found - No enrollment exists for the given enrollmentId.","x-doc":{"text":"Not Found - No enrollment exists for the given enrollmentId."}}},"x-doc":{"text":"Sets either the migration key or the old-platform consent (exactly one, not both) on a French business entity electronic address that is under migration. A migration key is only accepted if the address is registered in the Peppol directory; otherwise the request is rejected.\n\nOnce every address on the enrollment is free to migrate, the electronic addresses check state is advanced to `SUBMITTED`, which in turn advances the enrollment to `REGISTERING` and starts the registration process.\n\n🔒 This endpoint is restricted to **white label operators** only.\n\nThe enrollment electronic addresses check state must be `MIGRATION` or `ACTION_REQUIRED`. A migration key may also be corrected while the check state is `SUBMITTED`."}}},"/v1/config/webhook/{webhookId}":{"get":{"summary":"Retrieve webhook details","description":"📄 **Retrieve webhook configuration**\n\nReturns the **details of a single webhook** identified by `webhookId`, as long as it is **linked to the authenticated user**.\nThe response includes the webhook configuration.\n\n🔐 **Security & secrets**\n\nSensitive authentication values are **never returned in full clear text**.\nWhen present, secret fields are returned in a **masked form**:\n- the **first 5 characters** are shown\n- the remaining characters are replaced with `****`\n\nExample: `abcd1****`\n\nℹ️ **Notes**\n\n- This endpoint is **read-only**.\n- The returned payload represents the **current stored configuration** for each webhook.","tags":["Webhook"],"security":[{"oauth2ClientCredentials":[]}],"parameters":[{"in":"header","name":"customer-id","description":"The unique identifier for the customer.","required":false,"schema":{"type":"string","format":"uuid"},"x-doc":{"text":"The unique identifier for the customer."}},{"name":"webhookId","in":"path","required":true,"schema":{"type":"string","format":"uuid"}}],"responses":{"200":{"description":"Returns webhook details","content":{"application/json":{"schema":{"type":"object","properties":{"webhookId":{"type":"string","format":"uuid","description":"Unique webhook identifier","x-doc":{"text":"Unique webhook identifier"}},"filterStreamDirection":{"type":"string","nullable":true,"enum":["OUTBOUND","INBOUND"],"description":"Optional direction filter for the webhook stream (bidirectional if null or omitted).","x-doc":{"text":"Optional direction filter for the webhook stream (bidirectional if null or omitted).","array":[{"code":"OUTBOUND","label":"An invoice or status issued to a customer or client"},{"code":"INBOUND","label":"An invoice or status received from a supplier or vendor"}]}},"status":{"type":"string","enum":["ACTIVE","INACTIVE"],"default":"ACTIVE","description":"Status of the webhook, either ACTIVE or INACTIVE","x-doc":{"text":"Status of the webhook, either ACTIVE or INACTIVE"}},"adapterCode":{"type":"string","default":"standardAdapter","description":"The adapter code to use for the webhook, default is \"standardAdapter\"","x-doc":{"text":"The adapter code to use for the webhook, default is \"standardAdapter\""}},"label":{"type":"string","minLength":3,"description":"An optional label for the webhook","x-doc":{"text":"An optional label for the webhook"}},"interopData":{"type":"object","properties":{"endpoints":{"type":"object","properties":{"status":{"type":"object","properties":{"callbackUrl":{"type":"string","format":"uri","description":"The callback URL for status updates","x-doc":{"text":"The callback URL for status updates"}},"idPath":{"type":"string","description":"The json field in the response to be used as external id (under format fieldA.fieldB...","x-doc":{"text":"The json field in the response to be used as external id (under format fieldA.fieldB..."}}},"required":["callbackUrl"],"description":"Endpoints related to status updates","x-doc":{"text":"Endpoints related to status updates"}},"invoice":{"type":"object","properties":{"callbackUrl":{"type":"string","format":"uri","description":"The callback URL for invoice data","x-doc":{"text":"The callback URL for invoice data"}},"idPath":{"type":"string","description":"The json field in the response to be used as external id (under format fieldA.fieldB...","x-doc":{"text":"The json field in the response to be used as external id (under format fieldA.fieldB..."}}},"required":["callbackUrl"],"description":"Endpoints related to invoices","x-doc":{"text":"Endpoints related to invoices"}},"onboarding":{"type":"object","properties":{"callbackUrl":{"type":"string","format":"uri","description":"The callback URL for the onboarding events","x-doc":{"text":"The callback URL for the onboarding events"}},"stages":{"type":"array","items":{"type":"string","enum":["STARTED","ACTION_REQUIRED","ACCEPTED","IDENTITY_CHECK_STARTED","IDENTITY_CHECK_SUBMITTED","IDENTITY_CHECK_ACTION_REQUIRED","IDENTITY_CHECK_ACCEPTED","BUSINESS_VERIFICATION_STARTED","BUSINESS_VERIFICATION_ACTION_REQUIRED","BUSINESS_VERIFICATION_ACCEPTED","MANDATE_SIGNED","ELECTRONIC_ADDRESS_MIGRATION","REGISTERING","REGISTERED","COMPLETED","CANCELLED","REOPEN"],"description":"Onboarding stage.","x-doc":{"text":"Onboarding stage.","array":[{"code":"STARTED","label":"The customer has started the onboarding process."},{"code":"ACTION_REQUIRED","label":"The onboarding process requires manual review or action before it can continue."},{"code":"ACCEPTED","label":"Replaced by REGISTERING but still sent.","deprecated":true},{"code":"IDENTITY_CHECK_STARTED","label":"The customer has started the identity check stage of the onboarding process."},{"code":"IDENTITY_CHECK_SUBMITTED","label":"Replaced by IDENTITY_CHECK_ACTION_REQUIRED but still sent.","deprecated":true},{"code":"IDENTITY_CHECK_ACTION_REQUIRED","label":"The customer has completed the identity check stage, but the identity requires manual review and approval."},{"code":"IDENTITY_CHECK_ACCEPTED","label":"The customer's identity has been successfully verified and accepted."},{"code":"BUSINESS_VERIFICATION_STARTED","label":"The business verification (KYB) process has started."},{"code":"BUSINESS_VERIFICATION_ACTION_REQUIRED","label":"The customer has submitted all required KYB evidences and the business verification requires manual review and approval."},{"code":"BUSINESS_VERIFICATION_ACCEPTED","label":"The business verification (KYB) has been successfully validated and accepted."},{"code":"MANDATE_SIGNED","label":"The customer has signed the mandate."},{"code":"ELECTRONIC_ADDRESS_MIGRATION","label":"At least one of the customer electronic addresses is held by another platform and requires a change-of-PA request. The deliverables to file with each outgoing platform are available for download."},{"code":"REGISTERING","label":"Electronic addresses are currently in the process of being registered on the necessary networks."},{"code":"REGISTERED","label":"All electronic addresses have now been registered on the necessary networks."},{"code":"COMPLETED","label":"The onboarding process is fully completed. This event marks the end of the onboarding lifecycle."},{"code":"CANCELLED","label":"The onboarding process has been cancelled before completion."},{"code":"REOPEN","label":"The onboarding process was reopened after manual review."}]}},"description":"The onboarding stages to subscribe to for callback events.","x-doc":{"text":"The onboarding stages to subscribe to for callback events."}}},"required":["callbackUrl"],"description":"Endpoints related to onboarding","x-doc":{"text":"Endpoints related to onboarding"}},"events":{"type":"object","nullable":true,"properties":{"callbackUrl":{"type":"string","format":"uri","description":"The callback URL for generic operator events","x-doc":{"text":"The callback URL for generic operator events"}},"subscribedEvents":{"type":"array","items":{"type":"string","enum":["INVOICE_INBOUND_INVALID","OUTBOUND_INVOICE_NOT_DELIVERED","OUTBOUND_STATUS_NOT_DELIVERED","PEPPOL_MIGRATION_COMPLETED","EREPORTING_TRANSACTION_ATTACHED","EREPORTING_PAYMENT_ATTACHED","EREPORTING_PERIOD_OPENED","EREPORTING_PERIOD_CLOSED","EREPORTING_ERROR"],"description":"Type of operator event","x-doc":{"text":"Type of operator event"}},"description":"List of event types to subscribe to","x-doc":{"text":"List of event types to subscribe to","array":[{"code":"INVOICE_INBOUND_INVALID","label":"An inbound invoice that failed validation"},{"code":"OUTBOUND_INVOICE_NOT_DELIVERED","label":"An outbound invoice that could not be delivered to the platform"},{"code":"OUTBOUND_STATUS_NOT_DELIVERED","label":"An outbound status that could not be delivered to the platform"},{"code":"PEPPOL_MIGRATION_COMPLETED","label":"An end-user's electronic address finished migrating to another platform"},{"code":"EREPORTING_TRANSACTION_ATTACHED","label":"🚧 Work In Progress - A transaction has been attached to a Report"},{"code":"EREPORTING_PAYMENT_ATTACHED","label":"🚧 Work In Progress - A payment has been attached to a Report"},{"code":"EREPORTING_PERIOD_OPENED","label":"🚧 Work In Progress - An e-reporting period has opened"},{"code":"EREPORTING_PERIOD_CLOSED","label":"🚧 Work In Progress - An e-reporting period has closed"},{"code":"EREPORTING_ERROR","label":"🚧 Work In Progress - A submitted transaction or payment failed validation"}]}}},"required":["callbackUrl"],"description":"Endpoints related to generic operator events (e.g., invalid invoices). Set to null to remove.","x-doc":{"text":"Endpoints related to generic operator events (e.g., invalid invoices). Set to null to remove."}},"authentication":{"type":"object","properties":{"basic":{"type":"object","properties":{"username":{"type":"string","description":"The username for basic authentication.","x-doc":{"text":"The username for basic authentication."}},"password":{"type":"string","minLength":12,"maxLength":256,"description":"The password for basic authentication.","x-doc":{"text":"The password for basic authentication."}}},"required":["username","password"]},"hmac":{"type":"object","properties":{"secretKey":{"type":"string","minLength":32,"maxLength":512}},"required":["secretKey"],"description":"Requests are signed with an HMAC-SHA256 signature.","x-doc":{"text":"Requests are signed with an HMAC-SHA256 signature.","valueDescription":"min: 32 char","more":"- Canonical string format is: `{timestamp}\\n{HTTP_METHOD}\\n{path_with_query}\\n{checksum}`\n  * `timestamp` → UNIX epoch in milliseconds (sent as `X-Timestamp`)\n  * `HTTP_METHOD` → request method in uppercase (e.g., `POST`)\n  * `path_with_query` → URL path + query string (e.g., `/webhook/notify?type=invoice`)\n  * `checksum` → SHA-256 hex digest of the payload (`file` field for multipart or body for `application/json`)"}},"oauth2Password":{"type":"object","properties":{"callbackUrl":{"type":"string","format":"uri","description":"The URL where the token will be fetched.","x-doc":{"text":"The URL where the token will be fetched."}},"clientId":{"type":"string","description":"The client ID.","x-doc":{"text":"The client ID."}},"clientSecret":{"type":"string","minLength":24,"maxLength":512,"description":"The client secret.","x-doc":{"text":"The client secret."}},"username":{"type":"string","description":"The username (resource owner).","x-doc":{"text":"The username (resource owner)."}},"password":{"type":"string","description":"The password (resource owner).","x-doc":{"text":"The password (resource owner)."}},"scope":{"type":"string","nullable":true,"description":"The requested OAuth2 scopes (space-separated).","x-doc":{"text":"The requested OAuth2 scopes (space-separated)."}}},"required":["callbackUrl","clientId","clientSecret","username","password"]},"oauth2ClientCredentials":{"type":"object","properties":{"callbackUrl":{"type":"string","format":"uri","description":"The URL where the token will be fetched.","x-doc":{"text":"The URL where the token will be fetched."}},"clientId":{"type":"string","description":"The client ID.","x-doc":{"text":"The client ID."}},"clientSecret":{"type":"string","minLength":24,"maxLength":512,"description":"The client secret.","x-doc":{"text":"The client secret."}},"scope":{"type":"string","nullable":true,"description":"The requested OAuth2 scopes (space-separated).","x-doc":{"text":"The requested OAuth2 scopes (space-separated)."}}},"required":["callbackUrl","clientId","clientSecret"]},"perRequestHeaders":{"type":"object","properties":{"ocpApimSubscriptionKey":{"type":"string","description":"Required HTTP header in Azure API Management that provides the subscription key for authenticating API calls.","x-doc":{"text":"Required HTTP header in Azure API Management that provides the subscription key for authenticating API calls."}}}}},"description":"Authentication mechanisms for webhooks","x-doc":{"text":"Authentication mechanisms for webhooks"}}},"additionalProperties":false,"description":"The endpoints related to webhooks","x-doc":{"text":"The endpoints related to webhooks"}},"workflowConfig":{"type":"object","additionalProperties":{"nullable":true}}},"required":["endpoints"],"description":"The interop data that configures webhook behavior","x-doc":{"text":"The interop data that configures webhook behavior"}}},"required":["webhookId","interopData"]}}},"x-doc":{"text":"Returns webhook details"}},"401":{"description":"Unauthorized - Authentication is required and has failed or has not yet been provided.","x-doc":{"text":"Unauthorized - Authentication is required and has failed or has not yet been provided."}},"403":{"description":"Forbidden - The server understood the request, but it refuses to authorize it.","x-doc":{"text":"Forbidden - The server understood the request, but it refuses to authorize it."}}},"x-doc":{"text":"📄 **Retrieve webhook configuration**\n\nReturns the **details of a single webhook** identified by `webhookId`, as long as it is **linked to the authenticated user**.\nThe response includes the webhook configuration.\n\n🔐 **Security & secrets**\n\nSensitive authentication values are **never returned in full clear text**.\nWhen present, secret fields are returned in a **masked form**:\n- the **first 5 characters** are shown\n- the remaining characters are replaced with `****`\n\nExample: `abcd1****`\n\nℹ️ **Notes**\n\n- This endpoint is **read-only**.\n- The returned payload represents the **current stored configuration** for each webhook."}},"put":{"summary":"Update an existing webhook","description":"📝 **Update webhook**\n\nThis endpoint updates an existing webhook using a **mixed update strategy** depending on the data provided.\n\n🔄 **Differential update (top-level fields)**\n\nThe following fields are updated **only if they are explicitly provided**:\n- `active`\n\n- `label`\n\n- `filterStreamDirection`\n\n- `adapterCode`\n\n\nIf any of these fields are omitted from the request, their existing values are **preserved**.\n\n🔁 **Differential update (`interopData.endpoints`)**\n\n> If `interopData.endpoints` is provided, each of the following endpoint configurations is processed independently:\n> - `invoice`\n\n> - `status`\n\n> - `onboarding`\n\n> - `events`\n\n> - `authentication`\n\n> \n> For each endpoint field:\n> - **Omitted** → the existing configuration is **kept**\n> - **Provided** → the configuration is **fully replaced**\n> \n> ⚠️ **Important – no partial update inside an endpoint block**\n> \n> Updates are **not partial** within a given endpoint configuration.\n> If you provide an endpoint block (e.g., `authentication`), it must be **complete**: any sub-field not included in the request may be **lost/overwritten**.\n> For example, providing `authentication` replaces the whole authentication configuration (callbacks and credentials) with the payload you send.\n","tags":["Webhook"],"security":[{"oauth2ClientCredentials":[]}],"parameters":[{"in":"header","name":"customer-id","description":"The unique identifier for the customer.","required":false,"schema":{"type":"string","format":"uuid"},"x-doc":{"text":"The unique identifier for the customer."}},{"name":"webhookId","in":"path","required":true,"schema":{"type":"string","format":"uuid"}}],"requestBody":{"description":"Update format to use","required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"filterStreamDirection":{"type":"string","nullable":true,"enum":["OUTBOUND","INBOUND"],"description":"Optional direction filter for the webhook stream (bidirectional if null or omitted).","x-doc":{"text":"Optional direction filter for the webhook stream (bidirectional if null or omitted).","array":[{"code":"OUTBOUND","label":"An invoice or status issued to a customer or client"},{"code":"INBOUND","label":"An invoice or status received from a supplier or vendor"}]}},"status":{"type":"string","enum":["ACTIVE","INACTIVE"],"default":"ACTIVE","description":"Status of the webhook, either ACTIVE or INACTIVE","x-doc":{"text":"Status of the webhook, either ACTIVE or INACTIVE"}},"adapterCode":{"type":"string","default":"standardAdapter","description":"The adapter code to use for the webhook, default is \"standardAdapter\"","x-doc":{"text":"The adapter code to use for the webhook, default is \"standardAdapter\""}},"label":{"type":"string","minLength":3,"description":"An optional label for the webhook","x-doc":{"text":"An optional label for the webhook"}},"interopData":{"type":"object","properties":{"endpoints":{"type":"object","properties":{"status":{"type":"object","properties":{"callbackUrl":{"type":"string","format":"uri","description":"The callback URL for status updates","x-doc":{"text":"The callback URL for status updates"}},"idPath":{"type":"string","description":"The json field in the response to be used as external id (under format fieldA.fieldB...","x-doc":{"text":"The json field in the response to be used as external id (under format fieldA.fieldB..."}}},"required":["callbackUrl"],"description":"Endpoints related to status updates","x-doc":{"text":"Endpoints related to status updates"}},"invoice":{"type":"object","properties":{"callbackUrl":{"type":"string","format":"uri","description":"The callback URL for invoice data","x-doc":{"text":"The callback URL for invoice data"}},"idPath":{"type":"string","description":"The json field in the response to be used as external id (under format fieldA.fieldB...","x-doc":{"text":"The json field in the response to be used as external id (under format fieldA.fieldB..."}}},"required":["callbackUrl"],"description":"Endpoints related to invoices","x-doc":{"text":"Endpoints related to invoices"}},"onboarding":{"type":"object","properties":{"callbackUrl":{"type":"string","format":"uri","description":"The callback URL for the onboarding events","x-doc":{"text":"The callback URL for the onboarding events"}},"stages":{"type":"array","items":{"type":"string","enum":["STARTED","ACTION_REQUIRED","ACCEPTED","IDENTITY_CHECK_STARTED","IDENTITY_CHECK_SUBMITTED","IDENTITY_CHECK_ACTION_REQUIRED","IDENTITY_CHECK_ACCEPTED","BUSINESS_VERIFICATION_STARTED","BUSINESS_VERIFICATION_ACTION_REQUIRED","BUSINESS_VERIFICATION_ACCEPTED","MANDATE_SIGNED","ELECTRONIC_ADDRESS_MIGRATION","REGISTERING","REGISTERED","COMPLETED","CANCELLED","REOPEN"],"description":"Onboarding stage.","x-doc":{"text":"Onboarding stage.","array":[{"code":"STARTED","label":"The customer has started the onboarding process."},{"code":"ACTION_REQUIRED","label":"The onboarding process requires manual review or action before it can continue."},{"code":"ACCEPTED","label":"Replaced by REGISTERING but still sent.","deprecated":true},{"code":"IDENTITY_CHECK_STARTED","label":"The customer has started the identity check stage of the onboarding process."},{"code":"IDENTITY_CHECK_SUBMITTED","label":"Replaced by IDENTITY_CHECK_ACTION_REQUIRED but still sent.","deprecated":true},{"code":"IDENTITY_CHECK_ACTION_REQUIRED","label":"The customer has completed the identity check stage, but the identity requires manual review and approval."},{"code":"IDENTITY_CHECK_ACCEPTED","label":"The customer's identity has been successfully verified and accepted."},{"code":"BUSINESS_VERIFICATION_STARTED","label":"The business verification (KYB) process has started."},{"code":"BUSINESS_VERIFICATION_ACTION_REQUIRED","label":"The customer has submitted all required KYB evidences and the business verification requires manual review and approval."},{"code":"BUSINESS_VERIFICATION_ACCEPTED","label":"The business verification (KYB) has been successfully validated and accepted."},{"code":"MANDATE_SIGNED","label":"The customer has signed the mandate."},{"code":"ELECTRONIC_ADDRESS_MIGRATION","label":"At least one of the customer electronic addresses is held by another platform and requires a change-of-PA request. The deliverables to file with each outgoing platform are available for download."},{"code":"REGISTERING","label":"Electronic addresses are currently in the process of being registered on the necessary networks."},{"code":"REGISTERED","label":"All electronic addresses have now been registered on the necessary networks."},{"code":"COMPLETED","label":"The onboarding process is fully completed. This event marks the end of the onboarding lifecycle."},{"code":"CANCELLED","label":"The onboarding process has been cancelled before completion."},{"code":"REOPEN","label":"The onboarding process was reopened after manual review."}]}},"description":"The onboarding stages to subscribe to for callback events.","x-doc":{"text":"The onboarding stages to subscribe to for callback events."}}},"required":["callbackUrl"],"description":"Endpoints related to onboarding","x-doc":{"text":"Endpoints related to onboarding"}},"events":{"type":"object","nullable":true,"properties":{"callbackUrl":{"type":"string","format":"uri","description":"The callback URL for generic operator events","x-doc":{"text":"The callback URL for generic operator events"}},"subscribedEvents":{"type":"array","items":{"type":"string","enum":["INVOICE_INBOUND_INVALID","OUTBOUND_INVOICE_NOT_DELIVERED","OUTBOUND_STATUS_NOT_DELIVERED","PEPPOL_MIGRATION_COMPLETED","EREPORTING_TRANSACTION_ATTACHED","EREPORTING_PAYMENT_ATTACHED","EREPORTING_PERIOD_OPENED","EREPORTING_PERIOD_CLOSED","EREPORTING_ERROR"],"description":"Type of operator event","x-doc":{"text":"Type of operator event"}},"description":"List of event types to subscribe to","x-doc":{"text":"List of event types to subscribe to","array":[{"code":"INVOICE_INBOUND_INVALID","label":"An inbound invoice that failed validation"},{"code":"OUTBOUND_INVOICE_NOT_DELIVERED","label":"An outbound invoice that could not be delivered to the platform"},{"code":"OUTBOUND_STATUS_NOT_DELIVERED","label":"An outbound status that could not be delivered to the platform"},{"code":"PEPPOL_MIGRATION_COMPLETED","label":"An end-user's electronic address finished migrating to another platform"},{"code":"EREPORTING_TRANSACTION_ATTACHED","label":"🚧 Work In Progress - A transaction has been attached to a Report"},{"code":"EREPORTING_PAYMENT_ATTACHED","label":"🚧 Work In Progress - A payment has been attached to a Report"},{"code":"EREPORTING_PERIOD_OPENED","label":"🚧 Work In Progress - An e-reporting period has opened"},{"code":"EREPORTING_PERIOD_CLOSED","label":"🚧 Work In Progress - An e-reporting period has closed"},{"code":"EREPORTING_ERROR","label":"🚧 Work In Progress - A submitted transaction or payment failed validation"}]}}},"required":["callbackUrl"],"description":"Endpoints related to generic operator events (e.g., invalid invoices). Set to null to remove.","x-doc":{"text":"Endpoints related to generic operator events (e.g., invalid invoices). Set to null to remove."}},"authentication":{"type":"object","properties":{"basic":{"type":"object","properties":{"username":{"type":"string","description":"The username for basic authentication.","x-doc":{"text":"The username for basic authentication."}},"password":{"type":"string","minLength":12,"maxLength":256,"description":"The password for basic authentication.","x-doc":{"text":"The password for basic authentication."}}},"required":["username","password"]},"hmac":{"type":"object","properties":{"secretKey":{"type":"string","minLength":32,"maxLength":512}},"required":["secretKey"],"description":"Requests are signed with an HMAC-SHA256 signature.","x-doc":{"text":"Requests are signed with an HMAC-SHA256 signature.","valueDescription":"min: 32 char","more":"- Canonical string format is: `{timestamp}\\n{HTTP_METHOD}\\n{path_with_query}\\n{checksum}`\n  * `timestamp` → UNIX epoch in milliseconds (sent as `X-Timestamp`)\n  * `HTTP_METHOD` → request method in uppercase (e.g., `POST`)\n  * `path_with_query` → URL path + query string (e.g., `/webhook/notify?type=invoice`)\n  * `checksum` → SHA-256 hex digest of the payload (`file` field for multipart or body for `application/json`)"}},"oauth2Password":{"type":"object","properties":{"callbackUrl":{"type":"string","format":"uri","description":"The URL where the token will be fetched.","x-doc":{"text":"The URL where the token will be fetched."}},"clientId":{"type":"string","description":"The client ID.","x-doc":{"text":"The client ID."}},"clientSecret":{"type":"string","minLength":24,"maxLength":512,"description":"The client secret.","x-doc":{"text":"The client secret."}},"username":{"type":"string","description":"The username (resource owner).","x-doc":{"text":"The username (resource owner)."}},"password":{"type":"string","description":"The password (resource owner).","x-doc":{"text":"The password (resource owner)."}},"scope":{"type":"string","nullable":true,"description":"The requested OAuth2 scopes (space-separated).","x-doc":{"text":"The requested OAuth2 scopes (space-separated)."}}},"required":["callbackUrl","clientId","clientSecret","username","password"]},"oauth2ClientCredentials":{"type":"object","properties":{"callbackUrl":{"type":"string","format":"uri","description":"The URL where the token will be fetched.","x-doc":{"text":"The URL where the token will be fetched."}},"clientId":{"type":"string","description":"The client ID.","x-doc":{"text":"The client ID."}},"clientSecret":{"type":"string","minLength":24,"maxLength":512,"description":"The client secret.","x-doc":{"text":"The client secret."}},"scope":{"type":"string","nullable":true,"description":"The requested OAuth2 scopes (space-separated).","x-doc":{"text":"The requested OAuth2 scopes (space-separated)."}}},"required":["callbackUrl","clientId","clientSecret"]},"perRequestHeaders":{"type":"object","properties":{"ocpApimSubscriptionKey":{"type":"string","description":"Required HTTP header in Azure API Management that provides the subscription key for authenticating API calls.","x-doc":{"text":"Required HTTP header in Azure API Management that provides the subscription key for authenticating API calls."}}}}},"description":"Authentication mechanisms for webhooks","x-doc":{"text":"Authentication mechanisms for webhooks"}}},"additionalProperties":false,"description":"The endpoints related to webhooks","x-doc":{"text":"The endpoints related to webhooks"}},"workflowConfig":{"type":"object","additionalProperties":{"nullable":true}}},"required":["endpoints"],"description":"The interop data that configures webhook behavior","x-doc":{"text":"The interop data that configures webhook behavior"}}},"additionalProperties":false},"examples":{"ex1":{"summary":"Update only the registration status (differential top-level update)","description":"Only updates the `status` field. All other top-level fields remain unchanged.","value":{"status":"INACTIVE"},"x-doc":{"text":"Only updates the `status` field. All other top-level fields remain unchanged."}},"ex2":{"summary":"Update only the label (differential top-level update)","description":"Only updates the `label` field. All other top-level fields remain unchanged.","value":{"label":"My new webhook label"},"x-doc":{"text":"Only updates the `label` field. All other top-level fields remain unchanged."}},"ex3":{"summary":"Replace multiple interop endpoints at once (values provided are replaced)","description":"Because `interopData.endpoints` is provided, each provided endpoint (`invoice`, `status`, `authentication`) is replaced with the given configuration. Omitted endpoint fields (e.g., `onboarding`) are kept as-is.","value":{"interopData":{"endpoints":{"status":{"callbackUrl":"https://myenpoint.com/status"},"invoice":{"callbackUrl":"https://myenpoint.com/invoice"},"authentication":{"oauth2ClientCredentials":{"callbackUrl":"https://myauthorizationServer.com/auth","clientId":"myClientId","clientSecret":"myClientSecret","scope":"myScope"}}}}},"x-doc":{"text":"Because `interopData.endpoints` is provided, each provided endpoint (`invoice`, `status`, `authentication`) is replaced with the given configuration. Omitted endpoint fields (e.g., `onboarding`) are kept as-is."}},"ex4":{"summary":"Update only the invoice endpoint configuration (other endpoints kept)","description":"Only replaces `interopData.endpoints.invoice`. Existing `status`, `onboarding`, and `authentication` endpoint configurations are preserved.","value":{"interopData":{"endpoints":{"invoice":{"callbackUrl":"https://myenpoint.com/invoice"}}}},"x-doc":{"text":"Only replaces `interopData.endpoints.invoice`. Existing `status`, `onboarding`, and `authentication` endpoint configurations are preserved."}},"ex5":{"summary":"Update only the authentication configuration (other endpoints kept)","description":"Only replaces `interopData.endpoints.authentication`. Existing `invoice`, `status`, `onboarding`, and `events` endpoint configurations are preserved.","value":{"interopData":{"endpoints":{"authentication":{"oauth2ClientCredentials":{"callbackUrl":"https://myauthorizationServer.com/auth","clientId":"myClientId","clientSecret":"myClientSecret","scope":"myScope"}}}}},"x-doc":{"text":"Only replaces `interopData.endpoints.authentication`. Existing `invoice`, `status`, `onboarding`, and `events` endpoint configurations are preserved."}},"ex6":{"summary":"Add/Update events endpoint (subscribe to specific events)","description":"Configures the `events` endpoint to receive operator notifications. Only `INVOICE_INBOUND_INVALID` events will be delivered. Other endpoint configurations are preserved.","value":{"interopData":{"endpoints":{"events":{"callbackUrl":"https://myenpoint.com/events","subscribedEvents":["INVOICE_INBOUND_INVALID"]}}}},"x-doc":{"text":"Configures the `events` endpoint to receive operator notifications. Only `INVOICE_INBOUND_INVALID` events will be delivered. Other endpoint configurations are preserved."}},"ex7":{"summary":"Add/Update events endpoint (subscribe to all events)","description":"Configures the `events` endpoint to receive ALL operator event types. Omitting `subscribedEvents` means all events are delivered. Other endpoint configurations are preserved.","value":{"interopData":{"endpoints":{"events":{"callbackUrl":"https://myenpoint.com/events"}}}},"x-doc":{"text":"Configures the `events` endpoint to receive ALL operator event types. Omitting `subscribedEvents` means all events are delivered. Other endpoint configurations are preserved."}},"ex8":{"summary":"Remove events endpoint subscription","description":"Removes the `events` endpoint configuration by setting it to `null`. The operator will no longer receive event notifications. Other endpoint configurations are preserved.","value":{"interopData":{"endpoints":{"events":null}}},"x-doc":{"text":"Removes the `events` endpoint configuration by setting it to `null`. The operator will no longer receive event notifications. Other endpoint configurations are preserved."}}}}},"x-doc":{"text":"Update format to use"}},"responses":{"201":{"description":"Returns updated webhook id","content":{"application/json":{"schema":{"type":"object","properties":{"type":{"type":"string","enum":["WEBHOOK","SECRET","STREAM","INVOICE","STATUS","BUSINESS_ENTITY","BUSINESS_ENTITY_IDENTIFIER","DIRECTORY","EDI_MESSAGE"],"description":"The type of the response object.","x-doc":{"text":"The type of the response object."}},"id":{"type":"string","format":"uuid","description":"The unique identifier for the created element.","x-doc":{"text":"The unique identifier for the created element."}}},"required":["type","id"],"description":"Response model for the element creation response.","x-doc":{"text":"Response model for the element creation response."}},"examples":{"example1":{"summary":"Returns updated webhook id","value":{"type":"WEBHOOK","id":"f47ac10b-58cc-4372-a567-0e02b2c3d479"}}}}},"x-doc":{"text":"Returns updated webhook id"}},"401":{"description":"Unauthorized - Authentication is required and has failed or has not yet been provided.","x-doc":{"text":"Unauthorized - Authentication is required and has failed or has not yet been provided."}},"403":{"description":"Forbidden - The server understood the request, but it refuses to authorize it.","x-doc":{"text":"Forbidden - The server understood the request, but it refuses to authorize it."}},"404":{"description":"Error - No webhook found for given id","x-doc":{"text":"Error - No webhook found for given id"}}},"x-doc":{"text":"📝 **Update webhook**\n\nThis endpoint updates an existing webhook using a **mixed update strategy** depending on the data provided.\n\n🔄 **Differential update (top-level fields)**\n\nThe following fields are updated **only if they are explicitly provided**:\n- `active`\n\n- `label`\n\n- `filterStreamDirection`\n\n- `adapterCode`\n\n\nIf any of these fields are omitted from the request, their existing values are **preserved**.\n\n🔁 **Differential update (`interopData.endpoints`)**\n\n> If `interopData.endpoints` is provided, each of the following endpoint configurations is processed independently:\n> - `invoice`\n\n> - `status`\n\n> - `onboarding`\n\n> - `events`\n\n> - `authentication`\n\n> \n> For each endpoint field:\n> - **Omitted** → the existing configuration is **kept**\n> - **Provided** → the configuration is **fully replaced**\n> \n> ⚠️ **Important – no partial update inside an endpoint block**\n> \n> Updates are **not partial** within a given endpoint configuration.\n> If you provide an endpoint block (e.g., `authentication`), it must be **complete**: any sub-field not included in the request may be **lost/overwritten**.\n> For example, providing `authentication` replaces the whole authentication configuration (callbacks and credentials) with the payload you send.\n"}},"delete":{"summary":"Remove a webhook","description":"🗑️ **Remove webhook (permanent deletion)**\n\nThis endpoint **permanently removes** a webhook identified by `webhookId`.\nOnce deleted, the webhook configuration and all associated data are **physically removed** from the system and **cannot be recovered**.\n\n⚠️ **Important – irreversible operation**\n\nUse this endpoint **only if you no longer need the webhook**.\nIf you want to **temporarily disable** a webhook while keeping it for future use, use the **PUT update endpoint** and set `active = false` instead.\n\nℹ️ **Notes**\n\n- This operation is **destructive and final**.\n- If the `webhookId` does not exist or is not linked to the authenticated user, a **404** is returned.","tags":["Webhook"],"security":[{"oauth2ClientCredentials":[]}],"parameters":[{"in":"header","name":"customer-id","description":"The unique identifier for the customer.","required":false,"schema":{"type":"string","format":"uuid"},"x-doc":{"text":"The unique identifier for the customer."}},{"name":"webhookId","in":"path","required":true,"schema":{"type":"string","format":"uuid"}}],"responses":{"200":{"description":"Returns deleted webhook id.","content":{"application/json":{"schema":{"type":"object","properties":{"type":{"type":"string","enum":["WEBHOOK","SECRET","STREAM","INVOICE","STATUS","BUSINESS_ENTITY","BUSINESS_ENTITY_IDENTIFIER","DIRECTORY","EDI_MESSAGE"],"description":"The type of the response object.","x-doc":{"text":"The type of the response object."}},"id":{"type":"string","format":"uuid","description":"The unique identifier for the created element.","x-doc":{"text":"The unique identifier for the created element."}}},"required":["type","id"],"description":"Response model for the element creation response.","x-doc":{"text":"Response model for the element creation response."}},"examples":{"example1":{"summary":"Return deleted webhook id","value":{"type":"WEBHOOK","id":"f47ac10b-58cc-4372-a567-0e02b2c3d479"}}}}},"x-doc":{"text":"Returns deleted webhook id."}},"401":{"description":"Unauthorized - Authentication is required and has failed or has not yet been provided.","x-doc":{"text":"Unauthorized - Authentication is required and has failed or has not yet been provided."}},"403":{"description":"Forbidden - The server understood the request, but it refuses to authorize it.","x-doc":{"text":"Forbidden - The server understood the request, but it refuses to authorize it."}},"404":{"description":"Error - No webhook found for given id","x-doc":{"text":"Error - No webhook found for given id"}}},"x-doc":{"text":"🗑️ **Remove webhook (permanent deletion)**\n\nThis endpoint **permanently removes** a webhook identified by `webhookId`.\nOnce deleted, the webhook configuration and all associated data are **physically removed** from the system and **cannot be recovered**.\n\n⚠️ **Important – irreversible operation**\n\nUse this endpoint **only if you no longer need the webhook**.\nIf you want to **temporarily disable** a webhook while keeping it for future use, use the **PUT update endpoint** and set `active = false` instead.\n\nℹ️ **Notes**\n\n- This operation is **destructive and final**.\n- If the `webhookId` does not exist or is not linked to the authenticated user, a **404** is returned."}}},"/v1/config/webhook":{"get":{"summary":"Retrieve list of configured webhooks","description":"📄 **Retrieve webhooks**\n\nReturns the list of **all webhooks linked to the authenticated user**, including their configuration.\n\n🔐 **Security & secrets**\n\nSensitive authentication values are **never returned in full clear text**.\nWhen present, secret fields are returned in a **masked form**:\n- the **first 5 characters** are shown\n- the remaining characters are replaced with `****`\n\nExample: `abcd1****`\n\nℹ️ **Notes**\n\n- This endpoint is **read-only**.\n- The returned payload represents the **current stored configuration** for each webhook.","tags":["Webhook"],"security":[{"oauth2ClientCredentials":[]}],"parameters":[{"in":"header","name":"customer-id","description":"The unique identifier for the customer.","required":false,"schema":{"type":"string","format":"uuid"},"x-doc":{"text":"The unique identifier for the customer."}}],"responses":{"200":{"description":"Returns list of configured webhooks","content":{"application/json":{"schema":{"type":"array","items":{"type":"object","properties":{"webhookId":{"type":"string","format":"uuid","description":"Unique webhook identifier","x-doc":{"text":"Unique webhook identifier"}},"filterStreamDirection":{"type":"string","nullable":true,"enum":["OUTBOUND","INBOUND"],"description":"Optional direction filter for the webhook stream (bidirectional if null or omitted).","x-doc":{"text":"Optional direction filter for the webhook stream (bidirectional if null or omitted).","array":[{"code":"OUTBOUND","label":"An invoice or status issued to a customer or client"},{"code":"INBOUND","label":"An invoice or status received from a supplier or vendor"}]}},"status":{"type":"string","enum":["ACTIVE","INACTIVE"],"default":"ACTIVE","description":"Status of the webhook, either ACTIVE or INACTIVE","x-doc":{"text":"Status of the webhook, either ACTIVE or INACTIVE"}},"adapterCode":{"type":"string","default":"standardAdapter","description":"The adapter code to use for the webhook, default is \"standardAdapter\"","x-doc":{"text":"The adapter code to use for the webhook, default is \"standardAdapter\""}},"label":{"type":"string","minLength":3,"description":"An optional label for the webhook","x-doc":{"text":"An optional label for the webhook"}},"interopData":{"type":"object","properties":{"endpoints":{"type":"object","properties":{"status":{"type":"object","properties":{"callbackUrl":{"type":"string","format":"uri","description":"The callback URL for status updates","x-doc":{"text":"The callback URL for status updates"}},"idPath":{"type":"string","description":"The json field in the response to be used as external id (under format fieldA.fieldB...","x-doc":{"text":"The json field in the response to be used as external id (under format fieldA.fieldB..."}}},"required":["callbackUrl"],"description":"Endpoints related to status updates","x-doc":{"text":"Endpoints related to status updates"}},"invoice":{"type":"object","properties":{"callbackUrl":{"type":"string","format":"uri","description":"The callback URL for invoice data","x-doc":{"text":"The callback URL for invoice data"}},"idPath":{"type":"string","description":"The json field in the response to be used as external id (under format fieldA.fieldB...","x-doc":{"text":"The json field in the response to be used as external id (under format fieldA.fieldB..."}}},"required":["callbackUrl"],"description":"Endpoints related to invoices","x-doc":{"text":"Endpoints related to invoices"}},"onboarding":{"type":"object","properties":{"callbackUrl":{"type":"string","format":"uri","description":"The callback URL for the onboarding events","x-doc":{"text":"The callback URL for the onboarding events"}},"stages":{"type":"array","items":{"type":"string","enum":["STARTED","ACTION_REQUIRED","ACCEPTED","IDENTITY_CHECK_STARTED","IDENTITY_CHECK_SUBMITTED","IDENTITY_CHECK_ACTION_REQUIRED","IDENTITY_CHECK_ACCEPTED","BUSINESS_VERIFICATION_STARTED","BUSINESS_VERIFICATION_ACTION_REQUIRED","BUSINESS_VERIFICATION_ACCEPTED","MANDATE_SIGNED","ELECTRONIC_ADDRESS_MIGRATION","REGISTERING","REGISTERED","COMPLETED","CANCELLED","REOPEN"],"description":"Onboarding stage.","x-doc":{"text":"Onboarding stage.","array":[{"code":"STARTED","label":"The customer has started the onboarding process."},{"code":"ACTION_REQUIRED","label":"The onboarding process requires manual review or action before it can continue."},{"code":"ACCEPTED","label":"Replaced by REGISTERING but still sent.","deprecated":true},{"code":"IDENTITY_CHECK_STARTED","label":"The customer has started the identity check stage of the onboarding process."},{"code":"IDENTITY_CHECK_SUBMITTED","label":"Replaced by IDENTITY_CHECK_ACTION_REQUIRED but still sent.","deprecated":true},{"code":"IDENTITY_CHECK_ACTION_REQUIRED","label":"The customer has completed the identity check stage, but the identity requires manual review and approval."},{"code":"IDENTITY_CHECK_ACCEPTED","label":"The customer's identity has been successfully verified and accepted."},{"code":"BUSINESS_VERIFICATION_STARTED","label":"The business verification (KYB) process has started."},{"code":"BUSINESS_VERIFICATION_ACTION_REQUIRED","label":"The customer has submitted all required KYB evidences and the business verification requires manual review and approval."},{"code":"BUSINESS_VERIFICATION_ACCEPTED","label":"The business verification (KYB) has been successfully validated and accepted."},{"code":"MANDATE_SIGNED","label":"The customer has signed the mandate."},{"code":"ELECTRONIC_ADDRESS_MIGRATION","label":"At least one of the customer electronic addresses is held by another platform and requires a change-of-PA request. The deliverables to file with each outgoing platform are available for download."},{"code":"REGISTERING","label":"Electronic addresses are currently in the process of being registered on the necessary networks."},{"code":"REGISTERED","label":"All electronic addresses have now been registered on the necessary networks."},{"code":"COMPLETED","label":"The onboarding process is fully completed. This event marks the end of the onboarding lifecycle."},{"code":"CANCELLED","label":"The onboarding process has been cancelled before completion."},{"code":"REOPEN","label":"The onboarding process was reopened after manual review."}]}},"description":"The onboarding stages to subscribe to for callback events.","x-doc":{"text":"The onboarding stages to subscribe to for callback events."}}},"required":["callbackUrl"],"description":"Endpoints related to onboarding","x-doc":{"text":"Endpoints related to onboarding"}},"events":{"type":"object","nullable":true,"properties":{"callbackUrl":{"type":"string","format":"uri","description":"The callback URL for generic operator events","x-doc":{"text":"The callback URL for generic operator events"}},"subscribedEvents":{"type":"array","items":{"type":"string","enum":["INVOICE_INBOUND_INVALID","OUTBOUND_INVOICE_NOT_DELIVERED","OUTBOUND_STATUS_NOT_DELIVERED","PEPPOL_MIGRATION_COMPLETED","EREPORTING_TRANSACTION_ATTACHED","EREPORTING_PAYMENT_ATTACHED","EREPORTING_PERIOD_OPENED","EREPORTING_PERIOD_CLOSED","EREPORTING_ERROR"],"description":"Type of operator event","x-doc":{"text":"Type of operator event"}},"description":"List of event types to subscribe to","x-doc":{"text":"List of event types to subscribe to","array":[{"code":"INVOICE_INBOUND_INVALID","label":"An inbound invoice that failed validation"},{"code":"OUTBOUND_INVOICE_NOT_DELIVERED","label":"An outbound invoice that could not be delivered to the platform"},{"code":"OUTBOUND_STATUS_NOT_DELIVERED","label":"An outbound status that could not be delivered to the platform"},{"code":"PEPPOL_MIGRATION_COMPLETED","label":"An end-user's electronic address finished migrating to another platform"},{"code":"EREPORTING_TRANSACTION_ATTACHED","label":"🚧 Work In Progress - A transaction has been attached to a Report"},{"code":"EREPORTING_PAYMENT_ATTACHED","label":"🚧 Work In Progress - A payment has been attached to a Report"},{"code":"EREPORTING_PERIOD_OPENED","label":"🚧 Work In Progress - An e-reporting period has opened"},{"code":"EREPORTING_PERIOD_CLOSED","label":"🚧 Work In Progress - An e-reporting period has closed"},{"code":"EREPORTING_ERROR","label":"🚧 Work In Progress - A submitted transaction or payment failed validation"}]}}},"required":["callbackUrl"],"description":"Endpoints related to generic operator events (e.g., invalid invoices). Set to null to remove.","x-doc":{"text":"Endpoints related to generic operator events (e.g., invalid invoices). Set to null to remove."}},"authentication":{"type":"object","properties":{"basic":{"type":"object","properties":{"username":{"type":"string","description":"The username for basic authentication.","x-doc":{"text":"The username for basic authentication."}},"password":{"type":"string","minLength":12,"maxLength":256,"description":"The password for basic authentication.","x-doc":{"text":"The password for basic authentication."}}},"required":["username","password"]},"hmac":{"type":"object","properties":{"secretKey":{"type":"string","minLength":32,"maxLength":512}},"required":["secretKey"],"description":"Requests are signed with an HMAC-SHA256 signature.","x-doc":{"text":"Requests are signed with an HMAC-SHA256 signature.","valueDescription":"min: 32 char","more":"- Canonical string format is: `{timestamp}\\n{HTTP_METHOD}\\n{path_with_query}\\n{checksum}`\n  * `timestamp` → UNIX epoch in milliseconds (sent as `X-Timestamp`)\n  * `HTTP_METHOD` → request method in uppercase (e.g., `POST`)\n  * `path_with_query` → URL path + query string (e.g., `/webhook/notify?type=invoice`)\n  * `checksum` → SHA-256 hex digest of the payload (`file` field for multipart or body for `application/json`)"}},"oauth2Password":{"type":"object","properties":{"callbackUrl":{"type":"string","format":"uri","description":"The URL where the token will be fetched.","x-doc":{"text":"The URL where the token will be fetched."}},"clientId":{"type":"string","description":"The client ID.","x-doc":{"text":"The client ID."}},"clientSecret":{"type":"string","minLength":24,"maxLength":512,"description":"The client secret.","x-doc":{"text":"The client secret."}},"username":{"type":"string","description":"The username (resource owner).","x-doc":{"text":"The username (resource owner)."}},"password":{"type":"string","description":"The password (resource owner).","x-doc":{"text":"The password (resource owner)."}},"scope":{"type":"string","nullable":true,"description":"The requested OAuth2 scopes (space-separated).","x-doc":{"text":"The requested OAuth2 scopes (space-separated)."}}},"required":["callbackUrl","clientId","clientSecret","username","password"]},"oauth2ClientCredentials":{"type":"object","properties":{"callbackUrl":{"type":"string","format":"uri","description":"The URL where the token will be fetched.","x-doc":{"text":"The URL where the token will be fetched."}},"clientId":{"type":"string","description":"The client ID.","x-doc":{"text":"The client ID."}},"clientSecret":{"type":"string","minLength":24,"maxLength":512,"description":"The client secret.","x-doc":{"text":"The client secret."}},"scope":{"type":"string","nullable":true,"description":"The requested OAuth2 scopes (space-separated).","x-doc":{"text":"The requested OAuth2 scopes (space-separated)."}}},"required":["callbackUrl","clientId","clientSecret"]},"perRequestHeaders":{"type":"object","properties":{"ocpApimSubscriptionKey":{"type":"string","description":"Required HTTP header in Azure API Management that provides the subscription key for authenticating API calls.","x-doc":{"text":"Required HTTP header in Azure API Management that provides the subscription key for authenticating API calls."}}}}},"description":"Authentication mechanisms for webhooks","x-doc":{"text":"Authentication mechanisms for webhooks"}}},"additionalProperties":false,"description":"The endpoints related to webhooks","x-doc":{"text":"The endpoints related to webhooks"}},"workflowConfig":{"type":"object","additionalProperties":{"nullable":true}}},"required":["endpoints"],"description":"The interop data that configures webhook behavior","x-doc":{"text":"The interop data that configures webhook behavior"}}},"required":["webhookId","interopData"]}}}},"x-doc":{"text":"Returns list of configured webhooks"}},"401":{"description":"Unauthorized - Authentication is required and has failed or has not yet been provided.","x-doc":{"text":"Unauthorized - Authentication is required and has failed or has not yet been provided."}},"403":{"description":"Forbidden - The server understood the request, but it refuses to authorize it.","x-doc":{"text":"Forbidden - The server understood the request, but it refuses to authorize it."}}},"x-doc":{"text":"📄 **Retrieve webhooks**\n\nReturns the list of **all webhooks linked to the authenticated user**, including their configuration.\n\n🔐 **Security & secrets**\n\nSensitive authentication values are **never returned in full clear text**.\nWhen present, secret fields are returned in a **masked form**:\n- the **first 5 characters** are shown\n- the remaining characters are replaced with `****`\n\nExample: `abcd1****`\n\nℹ️ **Notes**\n\n- This endpoint is **read-only**.\n- The returned payload represents the **current stored configuration** for each webhook."}},"post":{"summary":"Create a new webhook configuration.","description":"🎯 **Purpose**\n\nThis endpoint is used by the **operator to configure a callback URL**.\nThe configured callback will later be **called by the platform** to notify the operator system\nabout asynchronous events (e.g., enrollment completion, inbound invoices, inbound/outbound status).\n\n↔️ **Direction handling**\n\n- In most cases, a **single bidirectional callback** is sufficient.\n- The **direction** refers to the **invoice flow direction** (INBOUND / OUTBOUND). not the callback direction:\n  - **INBOUND** → statuses related to **inbound invoices**\n  - **OUTBOUND** → statuses related to **outbound invoices**\n\n✅ **Callback requirements** (If not met, the notification may be retried as failed)\n\n- The callback endpoint must accept **HTTP POST requests** for workflow execution.\n- The callback endpoint **must return an HTTP 2xx** status code to acknowledge receipt.\n- The callback endpoint **must NOT** return plain text / test text *(e.g., OK, received, test)*.\n- The callback response **must be empty** *(no body)* **or** a **valid JSON** body.\n- The callback endpoint **must respond within 60 seconds**.\n- The callback endpoint should accept data **up to 100Mb**.\n\n🔒 **Callback URL validation** (If checks fail, the callback configuration is rejected)\n\n- Only **HTTPS** URLs are accepted.\n- The hostname must be **DNS-resolvable**.\n- The resolved IP address **must not be private or internal**.\n- The endpoint must be **reachable via an HTTP GET request** (used for probe).\n- **HTTP redirects are allowed** (up to a limited number).\n- The endpoint must respond within a **short timeout**.\n\nℹ️ **Callback details**\n\nDetailed information about the **callback payloads, headers, and delivery behavior**\nis available in the **Callbacks section of this Swagger specification**.\n\n🔐 **Security (production)**\n\nIn production environments, the configured callback endpoint **MUST be protected by an authentication mechanism**\n(e.g., HMAC, OAuth2, ...).\n\nAll authentication secrets are **validated for strength and security**:\n- Weak, common, or repetitive values are **rejected** (e.g., `password`, `test`, `changeme`).\n- Secrets must meet **minimum length and entropy requirements**.\n- **Machine-generated secrets** (hex or base64) are strongly recommended and fully supported.\n\n🔁 **Retry strategy (production)**\n\nThe operator **should configure a retry strategy** using the **dedicated retry configuration endpoint**\nto ensure reliable delivery in case of temporary failures or downstream unavailability.","tags":["Webhook"],"security":[{"oauth2ClientCredentials":[]}],"parameters":[{"in":"header","name":"customer-id","description":"The unique identifier for the customer.","required":false,"schema":{"type":"string","format":"uuid"},"x-doc":{"text":"The unique identifier for the customer."}}],"callbacks":{"authentication.auth2ClientCredentials":{"{$request.body#/interopData/endpoints/authentication/oauth2ClientCredentials/callbackUrl}":{"post":{"summary":"OAuth2 token callback (client_credentials)","description":"Callback invoked by the platform to obtain an **OAuth2 access token** using the **client_credentials** grant.","requestBody":{"required":true,"content":{"application/x-www-form-urlencoded":{"schema":{"type":"object","properties":{"clientId":{"type":"string","example":"myClientId","description":"OAuth2 client identifier","x-doc":{"text":"OAuth2 client identifier"}},"clientSecret":{"type":"string","example":"myClientSecret","description":"OAuth2 client secret","x-doc":{"text":"OAuth2 client secret"}},"grant_type":{"type":"string","example":"client_credentials","description":"Must be `client_credentials`","x-doc":{"text":"Must be `client_credentials`"}},"scope":{"type":"string","example":"client_credentials","description":"Optional scope","x-doc":{"text":"Optional scope"}}},"required":["clientId","clientSecret","grant_type"]}}}},"responses":{"200":{"description":"Token response returned by your endpoint. The token field may be **`access_token`** or **`accessToken`**.","content":{"application/json":{"schema":{"type":"object","properties":{"access_token":{"type":"string","description":"OAuth2 access token (snake_case)","x-doc":{"text":"OAuth2 access token (snake_case)"}},"accessToken":{"type":"string","description":"OAuth2 access token (camelCase)","x-doc":{"text":"OAuth2 access token (camelCase)"}},"token_type":{"type":"string","example":"Bearer","description":"token type","x-doc":{"text":"token type"}},"expires_in":{"type":"integer","example":3600,"description":"token lifetime (seconds)","x-doc":{"text":"token lifetime (seconds)"}}}}}},"x-doc":{"text":"Token response returned by your endpoint. The token field may be **`access_token`** or **`accessToken`**."}}},"x-doc":{"text":"Callback invoked by the platform to obtain an **OAuth2 access token** using the **client_credentials** grant."}}}},"authentication.auth2Password":{"{$request.body#/interopData/endpoints/authentication/oauth2password/callbackUrl}":{"post":{"summary":"OAuth2 token callback (password)","description":"Callback invoked by the platform to obtain an **OAuth2 access token** using the **password** grant.","requestBody":{"required":true,"content":{"application/x-www-form-urlencoded":{"schema":{"type":"object","properties":{"clientId":{"type":"string","example":"myClientId","description":"OAuth2 client identifier","x-doc":{"text":"OAuth2 client identifier"}},"username":{"type":"string","example":"test@yopmail.com","description":"User login","x-doc":{"text":"User login"}},"password":{"type":"string","example":"StrongPassword","description":"User password","x-doc":{"text":"User password"}},"grant_type":{"type":"string","example":"password","description":"Must be `password`","x-doc":{"text":"Must be `password`"}}},"required":["clientId","username","password","grant_type"]}}}},"responses":{"200":{"description":"Token response returned by your endpoint. The token field may be **`access_token`** or **`accessToken`**.","content":{"application/json":{"schema":{"type":"object","properties":{"access_token":{"type":"string","description":"OAuth2 access token (snake_case)","x-doc":{"text":"OAuth2 access token (snake_case)"}},"accessToken":{"type":"string","description":"OAuth2 access token (camelCase)","x-doc":{"text":"OAuth2 access token (camelCase)"}},"token_type":{"type":"string","example":"Bearer","description":"token type","x-doc":{"text":"token type"}},"expires_in":{"type":"integer","example":3600,"description":"token lifetime (seconds)","x-doc":{"text":"token lifetime (seconds)"}}}}}},"x-doc":{"text":"Token response returned by your endpoint. The token field may be **`access_token`** or **`accessToken`**."}}},"x-doc":{"text":"Callback invoked by the platform to obtain an **OAuth2 access token** using the **password** grant."}}}},"invoice":{"{$request.body#/interopData/endpoints/invoice/callbackUrl}":{"post":{"summary":"Invoice delivery callback","description":"Callback invoked by the platform to **deliver an inbound invoice** to the operator system.\n\n> ✅ **Requirements**\n> - Return HTTP **2xx** to acknowledge receipt\n> - Response body must be **empty** or **valid JSON** (no plain text)\n> - Must respond within **60 seconds**\n> - Should accept data up to **100MB**","parameters":[{"name":"X-Target-Electronic-Address","in":"header","required":true,"description":"Electronic address used to route the invoice to the recipient","schema":{"type":"string"},"x-doc":{"text":"Electronic address used to route the invoice to the recipient"}},{"name":"X-Network-Identifier","in":"header","required":false,"description":"Network the invoice was received on. Sent as a header (the body is multipart). Absent when the network could not be resolved at delivery time.","schema":{"type":"string","enum":["DOMESTIC_FR","PEPPOL_INTERNATIONAL"]},"x-doc":{"text":"Network the invoice was received on. Sent as a header (the body is multipart). Absent when the network could not be resolved at delivery time."}}],"requestBody":{"required":true,"content":{"multipart/form-data":{"schema":{"type":"object","properties":{"file":{"description":"The invoice file binary content (multipart/form-data field).","x-doc":{"text":"The invoice file binary content (multipart/form-data field)."}},"invoiceId":{"type":"string","format":"uuid","description":"The Iopole invoice identifier.","x-doc":{"text":"The Iopole invoice identifier."}},"senderAcceptStatus":{"type":"string","description":"Whether the original sender accepts status updates for this invoice. Either \"true\" or \"false\".","x-doc":{"text":"Whether the original sender accepts status updates for this invoice. Either \"true\" or \"false\"."}}},"required":["file","invoiceId"],"additionalProperties":false}}}},"responses":{"200":{"description":"Return any HTTP **2xx** code to consider the invoice received.","x-doc":{"text":"Return any HTTP **2xx** code to consider the invoice received."}},"204":{"description":"No content. Valid acknowledgment of receipt.","x-doc":{"text":"No content. Valid acknowledgment of receipt."}}},"x-doc":{"text":"Callback invoked by the platform to **deliver an inbound invoice** to the operator system.\n\n> ✅ **Requirements**\n> - Return HTTP **2xx** to acknowledge receipt\n> - Response body must be **empty** or **valid JSON** (no plain text)\n> - Must respond within **60 seconds**\n> - Should accept data up to **100MB**"}}}},"status":{"{$request.body#/interopData/endpoints/status/callbackUrl}":{"post":{"summary":"Status delivery callback","description":"Callback invoked by the platform to **deliver invoice status updates** to the operator system.\n\n> ✅ **Requirements**\n> - Return HTTP **2xx** to acknowledge receipt\n> - Response body must be **empty** or **valid JSON** (no plain text)\n> - Must respond within **60 seconds**\n> - Should accept data up to **100MB**","parameters":[{"name":"X-Target-Electronic-Address","in":"header","required":true,"description":"Electronic address used to route the status to the recipient","schema":{"type":"string"},"x-doc":{"text":"Electronic address used to route the status to the recipient"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"invoiceId":{"type":"string","format":"uuid","description":"Unique Iopole identifier","x-doc":{"text":"Unique Iopole identifier"}},"status":{"type":"object","properties":{"code":{"type":"string","enum":["SUBMITTED","ISSUED","RECEIVED","MADE_AVAILABLE","IN_HAND","APPROVED","PARTIALLY_APPROVED","DISPUTED","SUSPENDED","COMPLETED","REFUSED","PAYMENT_SENT","PAYMENT_RECEIVED","REJECTED","UNACCEPTABLE"],"description":"Status allowed","x-doc":{"text":"Status allowed","array":[{"code":"SUBMITTED","label":"The invoice has been submitted by the issuer."},{"code":"ISSUED","label":"The invoice has been officially issued."},{"code":"RECEIVED","label":"The invoice has been received by the recipient."},{"code":"MADE_AVAILABLE","label":"The invoice has been made available to the recipient."},{"code":"IN_HAND","label":"The invoice is currently in hand and is being processed."},{"code":"APPROVED","label":"The invoice has been approved and is ready for further processing."},{"code":"PARTIALLY_APPROVED","label":"The invoice has been partially approved; some aspects may still require attention."},{"code":"DISPUTED","label":"There is a dispute regarding the invoice that needs to be resolved."},{"code":"SUSPENDED","label":"The processing of the invoice has been suspended."},{"code":"COMPLETED","label":"The invoice processing is completed."},{"code":"REFUSED","label":"The invoice has been refused and will not be processed."},{"code":"PAYMENT_SENT","label":"Payment for the invoice has been sent to the recipient."},{"code":"PAYMENT_RECEIVED","label":"Payment for the invoice has been received."},{"code":"REJECTED","label":"The invoice has been rejected by the recipient."},{"code":"UNACCEPTABLE","label":"The invoice file failed technical or application-level controls (flux-level rejection)."}]}},"networkCode":{"type":"string"}},"required":["code"],"additionalProperties":false},"xml":{"type":"string"},"json":{"type":"object","properties":{"testIndicator":{"type":"boolean"},"identification":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"date":{"type":"string","format":"date-time"}},"required":["id","date"],"additionalProperties":false},"notes":{"type":"array","items":{"type":"object","properties":{"content":{"type":"string"}},"required":["content"],"additionalProperties":false}},"sender":{"type":"object","properties":{"name":{"type":"string"},"siren":{"type":"string","description":"A 9-digit unique identifier for businesses in France (SIREN). Must pass the Luhn algorithm check.","x-doc":{"text":"A 9-digit unique identifier for businesses in France (SIREN). Must pass the Luhn algorithm check.","valueDescription":"9 char"}},"siret":{"type":"string","description":"A 14-digit identifier for a specific establishment of a business in France (SIRET), comprising the 9-digit SIREN plus a 5-digit establishment code (NIC). Must pass the Luhn algorithm check.","x-doc":{"text":"A 14-digit identifier for a specific establishment of a business in France (SIRET), comprising the 9-digit SIREN plus a 5-digit establishment code (NIC). Must pass the Luhn algorithm check.","valueDescription":"14 char"}},"electronicAddress":{"type":"string"},"roleCode":{"type":"object","properties":{"code":{"type":"string"},"value":{"type":"string"},"desc":{"type":"string"}},"required":["code","value","desc"],"additionalProperties":false}},"additionalProperties":false},"issuer":{"type":"object","properties":{"name":{"type":"string"},"siren":{"type":"string","description":"A 9-digit unique identifier for businesses in France (SIREN). Must pass the Luhn algorithm check.","x-doc":{"text":"A 9-digit unique identifier for businesses in France (SIREN). Must pass the Luhn algorithm check.","valueDescription":"9 char"}},"siret":{"type":"string","description":"A 14-digit identifier for a specific establishment of a business in France (SIRET), comprising the 9-digit SIREN plus a 5-digit establishment code (NIC). Must pass the Luhn algorithm check.","x-doc":{"text":"A 14-digit identifier for a specific establishment of a business in France (SIRET), comprising the 9-digit SIREN plus a 5-digit establishment code (NIC). Must pass the Luhn algorithm check.","valueDescription":"14 char"}},"electronicAddress":{"type":"string"},"roleCode":{"type":"object","properties":{"code":{"type":"string"},"value":{"type":"string"},"desc":{"type":"string"}},"required":["code","value","desc"],"additionalProperties":false}},"additionalProperties":false},"recipients":{"type":"array","items":{"type":"object","properties":{"name":{"type":"string"},"siren":{"type":"string","description":"A 9-digit unique identifier for businesses in France (SIREN). Must pass the Luhn algorithm check.","x-doc":{"text":"A 9-digit unique identifier for businesses in France (SIREN). Must pass the Luhn algorithm check.","valueDescription":"9 char"}},"siret":{"type":"string","description":"A 14-digit identifier for a specific establishment of a business in France (SIRET), comprising the 9-digit SIREN plus a 5-digit establishment code (NIC). Must pass the Luhn algorithm check.","x-doc":{"text":"A 14-digit identifier for a specific establishment of a business in France (SIRET), comprising the 9-digit SIREN plus a 5-digit establishment code (NIC). Must pass the Luhn algorithm check.","valueDescription":"14 char"}},"electronicAddress":{"type":"string"},"roleCode":{"type":"object","properties":{"code":{"type":"string"},"value":{"type":"string"},"desc":{"type":"string"}},"required":["code","value","desc"],"additionalProperties":false}},"additionalProperties":false}},"responses":{"type":"array","items":{"type":"object","properties":{"documentReference":{"type":"object","properties":{"issuerAssignedId":{"type":"string"},"typeCode":{"type":"string","enum":["80","81","82","83","84","130","202","203","204","211","261","262","295","296","308","325","326","380","381","383","384","385","386","387","388","389","390","393","394","395","396","420","456","457","458","527","575","623","633","751","780","875","876","877","935"]},"receiptDate":{"type":"string","format":"date-time"},"issueDate":{"type":"string","format":"date-time"},"issuer":{"type":"object","properties":{"name":{"type":"string"},"siren":{"type":"string","description":"A 9-digit unique identifier for businesses in France (SIREN). Must pass the Luhn algorithm check.","x-doc":{"text":"A 9-digit unique identifier for businesses in France (SIREN). Must pass the Luhn algorithm check.","valueDescription":"9 char"}},"siret":{"type":"string","description":"A 14-digit identifier for a specific establishment of a business in France (SIRET), comprising the 9-digit SIREN plus a 5-digit establishment code (NIC). Must pass the Luhn algorithm check.","x-doc":{"text":"A 14-digit identifier for a specific establishment of a business in France (SIRET), comprising the 9-digit SIREN plus a 5-digit establishment code (NIC). Must pass the Luhn algorithm check.","valueDescription":"14 char"}},"electronicAddress":{"type":"string"},"roleCode":{"type":"object","properties":{"code":{"type":"string"},"value":{"type":"string"},"desc":{"type":"string"}},"required":["code","value","desc"],"additionalProperties":false}},"additionalProperties":false}},"required":["typeCode","receiptDate","issueDate"],"additionalProperties":false},"documentStatus":{"type":"object","properties":{"code":{"type":"string","enum":["SUBMITTED","ISSUED","RECEIVED","MADE_AVAILABLE","IN_HAND","APPROVED","PARTIALLY_APPROVED","DISPUTED","SUSPENDED","COMPLETED","REFUSED","PAYMENT_SENT","PAYMENT_RECEIVED","REJECTED","UNACCEPTABLE"],"description":"Status allowed","x-doc":{"text":"Status allowed","array":[{"code":"SUBMITTED","label":"The invoice has been submitted by the issuer."},{"code":"ISSUED","label":"The invoice has been officially issued."},{"code":"RECEIVED","label":"The invoice has been received by the recipient."},{"code":"MADE_AVAILABLE","label":"The invoice has been made available to the recipient."},{"code":"IN_HAND","label":"The invoice is currently in hand and is being processed."},{"code":"APPROVED","label":"The invoice has been approved and is ready for further processing."},{"code":"PARTIALLY_APPROVED","label":"The invoice has been partially approved; some aspects may still require attention."},{"code":"DISPUTED","label":"There is a dispute regarding the invoice that needs to be resolved."},{"code":"SUSPENDED","label":"The processing of the invoice has been suspended."},{"code":"COMPLETED","label":"The invoice processing is completed."},{"code":"REFUSED","label":"The invoice has been refused and will not be processed."},{"code":"PAYMENT_SENT","label":"Payment for the invoice has been sent to the recipient."},{"code":"PAYMENT_RECEIVED","label":"Payment for the invoice has been received."},{"code":"REJECTED","label":"The invoice has been rejected by the recipient."},{"code":"UNACCEPTABLE","label":"The invoice file failed technical or application-level controls (flux-level rejection)."}]}},"networkCode":{"type":"string"}},"required":["code"],"additionalProperties":false},"additionalData":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string"},"amount":{"type":"object","properties":{"value":{"type":"number"},"currency":{"type":"string"}},"required":["value","currency"],"additionalProperties":false},"vatRate":{"type":"number"}},"required":["type","amount"],"additionalProperties":false}},"rejectionDetail":{"type":"object","properties":{"reason":{"type":"string","description":"The value depends on `documentStatus.code`:\n\n- **REJECTED**: one of `VALIDATION_FAILURE`, `INVALID_SIGNATURE`, `ROUTING_FAILURE`, `DUPLICATED_INVOICE`, `SENDING_FAILURE`, `TOTAL_AMOUNT_INCORRECT`, `CALCULATION_ERROR`, `DUPLICATE_INVOICE`, `EINVOICING_ADDRESS_INCORRECT`, `B2G_CHECKS_FAILURE`, `ATTACHMENT_REFERENCE_ERROR`, `ATTACHMENT_ASSOCIATION_ERROR`\n- **UNACCEPTABLE**: flux-specific codes (`EMPTY_FILE`, `INVALID_FILE_TYPE`, `SYNTAX_ERROR`, `ATTACHMENT_SIZE_EXCEEDED`, `INVALID_ATTACHMENT_NAME`, `EMPTY_ATTACHMENT`, `INVALID_ATTACHMENT_EXTENSION`, `FILE_SIZE_EXCEEDED`, `ANTIVIRUS_FAILURE`)\n- **REFUSED / DISPUTED / SUSPENDED / PARTIALLY_APPROVED**: a reason chosen by the recipient — see the `rejectionDetail.reason` enum of `POST /v1/invoice/{invoiceId}/status` (e.g. `DUPLICATE_INVOICE`, `OTHER`, …)\n\n⚠️ `DUPLICATED_INVOICE` (REJECTED — the invoice already exists with the same identifier) and `DUPLICATE_INVOICE` (REFUSED / DISPUTED — rejected by the recipient) are two distinct codes.","x-doc":{"text":"Rejection reason","more":"The value depends on `documentStatus.code`:\n\n- **REJECTED**: one of `VALIDATION_FAILURE`, `INVALID_SIGNATURE`, `ROUTING_FAILURE`, `DUPLICATED_INVOICE`, `SENDING_FAILURE`, `TOTAL_AMOUNT_INCORRECT`, `CALCULATION_ERROR`, `DUPLICATE_INVOICE`, `EINVOICING_ADDRESS_INCORRECT`, `B2G_CHECKS_FAILURE`, `ATTACHMENT_REFERENCE_ERROR`, `ATTACHMENT_ASSOCIATION_ERROR`\n- **UNACCEPTABLE**: flux-specific codes (`EMPTY_FILE`, `INVALID_FILE_TYPE`, `SYNTAX_ERROR`, `ATTACHMENT_SIZE_EXCEEDED`, `INVALID_ATTACHMENT_NAME`, `EMPTY_ATTACHMENT`, `INVALID_ATTACHMENT_EXTENSION`, `FILE_SIZE_EXCEEDED`, `ANTIVIRUS_FAILURE`)\n- **REFUSED / DISPUTED / SUSPENDED / PARTIALLY_APPROVED**: a reason chosen by the recipient — see the `rejectionDetail.reason` enum of `POST /v1/invoice/{invoiceId}/status` (e.g. `DUPLICATE_INVOICE`, `OTHER`, …)\n\n⚠️ `DUPLICATED_INVOICE` (REJECTED — the invoice already exists with the same identifier) and `DUPLICATE_INVOICE` (REFUSED / DISPUTED — rejected by the recipient) are two distinct codes."}},"message":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"reason":{"type":"string","enum":["SCHEMA","BUSINESS"]},"message":{"type":"string"},"rule":{"type":"string"},"location":{"type":"string"}},"required":["message"],"additionalProperties":false}}},"required":["reason","message"],"additionalProperties":false},"rejectionDetails":{"type":"array","items":{"type":"object","properties":{"reason":{"type":"string","description":"The value depends on `documentStatus.code`:\n\n- **REJECTED**: one of `VALIDATION_FAILURE`, `INVALID_SIGNATURE`, `ROUTING_FAILURE`, `DUPLICATED_INVOICE`, `SENDING_FAILURE`, `TOTAL_AMOUNT_INCORRECT`, `CALCULATION_ERROR`, `DUPLICATE_INVOICE`, `EINVOICING_ADDRESS_INCORRECT`, `B2G_CHECKS_FAILURE`, `ATTACHMENT_REFERENCE_ERROR`, `ATTACHMENT_ASSOCIATION_ERROR`\n- **UNACCEPTABLE**: flux-specific codes (`EMPTY_FILE`, `INVALID_FILE_TYPE`, `SYNTAX_ERROR`, `ATTACHMENT_SIZE_EXCEEDED`, `INVALID_ATTACHMENT_NAME`, `EMPTY_ATTACHMENT`, `INVALID_ATTACHMENT_EXTENSION`, `FILE_SIZE_EXCEEDED`, `ANTIVIRUS_FAILURE`)\n- **REFUSED / DISPUTED / SUSPENDED / PARTIALLY_APPROVED**: a reason chosen by the recipient — see the `rejectionDetail.reason` enum of `POST /v1/invoice/{invoiceId}/status` (e.g. `DUPLICATE_INVOICE`, `OTHER`, …)\n\n⚠️ `DUPLICATED_INVOICE` (REJECTED — the invoice already exists with the same identifier) and `DUPLICATE_INVOICE` (REFUSED / DISPUTED — rejected by the recipient) are two distinct codes.","x-doc":{"text":"Rejection reason","more":"The value depends on `documentStatus.code`:\n\n- **REJECTED**: one of `VALIDATION_FAILURE`, `INVALID_SIGNATURE`, `ROUTING_FAILURE`, `DUPLICATED_INVOICE`, `SENDING_FAILURE`, `TOTAL_AMOUNT_INCORRECT`, `CALCULATION_ERROR`, `DUPLICATE_INVOICE`, `EINVOICING_ADDRESS_INCORRECT`, `B2G_CHECKS_FAILURE`, `ATTACHMENT_REFERENCE_ERROR`, `ATTACHMENT_ASSOCIATION_ERROR`\n- **UNACCEPTABLE**: flux-specific codes (`EMPTY_FILE`, `INVALID_FILE_TYPE`, `SYNTAX_ERROR`, `ATTACHMENT_SIZE_EXCEEDED`, `INVALID_ATTACHMENT_NAME`, `EMPTY_ATTACHMENT`, `INVALID_ATTACHMENT_EXTENSION`, `FILE_SIZE_EXCEEDED`, `ANTIVIRUS_FAILURE`)\n- **REFUSED / DISPUTED / SUSPENDED / PARTIALLY_APPROVED**: a reason chosen by the recipient — see the `rejectionDetail.reason` enum of `POST /v1/invoice/{invoiceId}/status` (e.g. `DUPLICATE_INVOICE`, `OTHER`, …)\n\n⚠️ `DUPLICATED_INVOICE` (REJECTED — the invoice already exists with the same identifier) and `DUPLICATE_INVOICE` (REFUSED / DISPUTED — rejected by the recipient) are two distinct codes."}},"message":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"reason":{"type":"string","enum":["SCHEMA","BUSINESS"]},"message":{"type":"string"},"rule":{"type":"string"},"location":{"type":"string"}},"required":["message"],"additionalProperties":false}}},"required":["reason","message"],"additionalProperties":false},"description":"All rejection details. `rejectionDetail` is the first entry of `rejectionDetails`.","x-doc":{"text":"All rejection details. `rejectionDetail` is the first entry of `rejectionDetails`."}},"attachments":{"type":"array","items":{"type":"object","properties":{"mimeType":{"type":"string"},"fileName":{"type":"string"},"content":{"type":"string"}},"required":["mimeType","fileName","content"],"additionalProperties":false}}},"required":["documentReference","documentStatus"],"additionalProperties":false}}},"required":["testIndicator","identification","sender","recipients","responses"],"additionalProperties":false}},"required":["invoiceId","status","xml","json"],"additionalProperties":false},"examples":{"exampleStatusSubmittedResponse":{"summary":"Status Submitted (✅ Always emitted)","description":"The invoice has been received and is **currently being processed** by the platform (outbound invoices only).","value":{"invoiceId":"f47ac10b-58cc-4372-a567-0e02b2c3d479","status":{"code":"SUBMITTED"},"xml":"<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?>","json":{"sender":{"name":"Test Seller","country":"FR","roleCode":"SE","vatNumber":"FR61922304308","identifiers":[{"type":"ELECTRONIC_ADDRESS","value":"922304308","scheme":"0002"}],"postalAddress":{"country":"FR","cityName":"Pérols","postalCode":"34470","addressLineOne":"145 Imp. John Locke"},"electronicAddress":"0002:922304308"},"responses":[{"documentStatus":{"code":"SUBMITTED"},"documentReference":{"issuer":{"name":"Test Seller","country":"FR","roleCode":"SE","vatNumber":"FR61922304308","identifiers":[{"type":"ELECTRONIC_ADDRESS","value":"922304308","scheme":"0002"}],"postalAddress":{"country":"FR","cityName":"Pérols","postalCode":"34470","addressLineOne":"145 Imp. John Locke"},"electronicAddress":"0002:922304308"},"typeCode":380,"issueDate":"2025-07-18T00:00:00.000Z","receiptDate":"2025-07-18T08:40:21.000Z","issuerAssignedId":"INV-2025-1807-0001"}}],"recipients":[{"name":"Test Seller","country":"FR","roleCode":"SE","vatNumber":"FR61922304308","identifiers":[{"type":"ELECTRONIC_ADDRESS","value":"922304308","scheme":"0002"}],"postalAddress":{"country":"FR","cityName":"Pérols","postalCode":"34470","addressLineOne":"145 Imp. John Locke"},"electronicAddress":"0002:922304308"}],"testIndicator":false,"identification":{"id":"01981cb1-17f4-7681-a60a-d669edc44e75","date":"2025-07-18T08:40:24.645Z","name":"Lifecycle - SUBMITTED"}}},"x-doc":{"text":"The invoice has been received and is **currently being processed** by the platform (outbound invoices only)."}},"exampleStatusIssuedResponse":{"summary":"Status Issued (✅ Always emitted)","description":"The invoice is valid, routing succeeded, and it has been **sent to the buyer** (outbound invoices only).","value":{"invoiceId":"f47ac10b-58cc-4372-a567-0e02b2c3d479","status":{"code":"ISSUED"},"xml":"<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?>","json":{"sender":{"name":"Test Seller","country":"FR","roleCode":"SE","vatNumber":"FR61922304308","identifiers":[{"type":"ELECTRONIC_ADDRESS","value":"922304308","scheme":"0002"}],"postalAddress":{"country":"FR","cityName":"Pérols","postalCode":"34470","addressLineOne":"145 Imp. John Locke"},"electronicAddress":"0002:922304308"},"responses":[{"documentStatus":{"code":"ISSUED"},"documentReference":{"issuer":{"name":"Test Seller","country":"FR","roleCode":"SE","vatNumber":"FR61922304308","identifiers":[{"type":"ELECTRONIC_ADDRESS","value":"922304308","scheme":"0002"}],"postalAddress":{"country":"FR","cityName":"Pérols","postalCode":"34470","addressLineOne":"145 Imp. John Locke"},"electronicAddress":"0002:922304308"},"typeCode":380,"issueDate":"2025-07-18T00:00:00.000Z","receiptDate":"2025-07-18T08:40:21.000Z","issuerAssignedId":"INV-2025-1807-0001"}}],"recipients":[{"name":"Test Seller","country":"FR","roleCode":"SE","vatNumber":"FR61922304308","identifiers":[{"type":"ELECTRONIC_ADDRESS","value":"922304308","scheme":"0002"}],"postalAddress":{"country":"FR","cityName":"Pérols","postalCode":"34470","addressLineOne":"145 Imp. John Locke"},"electronicAddress":"0002:922304308"}],"testIndicator":false,"identification":{"id":"01981cbb-1c7d-7611-a189-758e4f961d71","date":"2025-07-18T08:51:21.230Z","name":"Lifecycle - ISSUED"}}},"x-doc":{"text":"The invoice is valid, routing succeeded, and it has been **sent to the buyer** (outbound invoices only)."}},"exampleStatusReceivedResponse":{"summary":"Status Received (🌐 Remote-dependent)","description":"The invoice has been **received and validated** by the **remote platform** (outbound invoices only).","value":{"sender":{"identifiers":[],"electronicAddress":"0208:1000772556"},"responses":[{"documentStatus":{"code":"RECEIVED","networkCode":"AB"},"documentReference":{"typeCode":380,"issuerAssignedId":"224b92fc-6b64-493f-93e8-f88f7d0b18f7"}}],"recipients":[{"identifiers":[],"electronicAddress":"0208:0775935959"}],"testIndicator":false,"identification":{"id":"019b5dc2-2481-7390-9d68-3e4391628ee8","date":"2025-12-27T03:02:43Z"}},"x-doc":{"text":"The invoice has been **received and validated** by the **remote platform** (outbound invoices only)."}},"exampleStatusMadeAvailableResponse":{"summary":"Status Made Available (🌐 Remote-dependent)","description":"The invoice has been **received and made available to the buyer** (outbound invoices only).","value":{"sender":{"name":"TestSender","identifiers":[],"electronicAddress":"0208:1000772556"},"responses":[{"documentStatus":{"code":"MADE_AVAILABLE","networkCode":"AB"},"documentReference":{"issuer":{"name":"E2E QA tenant - new 4334","identifiers":[],"electronicAddress":"0208:0775935959"},"typeCode":380,"issueDate":"2025-12-27T00:00:00Z","issuerAssignedId":"2025-484"}}],"recipients":[{"name":"E2E QA tenant - new 4334","identifiers":[],"electronicAddress":"0208:0775935959"}],"testIndicator":false,"identification":{"id":"019b5dbf-ed26-7079-a1ed-365268949048","date":"2025-12-27T03:00:17Z"}},"x-doc":{"text":"The invoice has been **received and made available to the buyer** (outbound invoices only)."}},"exampleStatusRejectedResponse":{"summary":"Status Rejected (✅ Always emitted when relevant)","description":"The invoice has been **rejected**.\nRejection details are available in the **status details**.\n\nThis status may be emitted by the **Iopole platform** or by the **remote platform** (outbound invoices only).\n\n`rejectionDetail.reason` uses one of the following codes: `VALIDATION_FAILURE`, `INVALID_SIGNATURE`, `ROUTING_FAILURE`, `DUPLICATED_INVOICE`, `SENDING_FAILURE`, `TOTAL_AMOUNT_INCORRECT`, `CALCULATION_ERROR`, `DUPLICATE_INVOICE`, `EINVOICING_ADDRESS_INCORRECT`, `B2G_CHECKS_FAILURE`, `ATTACHMENT_REFERENCE_ERROR`, `ATTACHMENT_ASSOCIATION_ERROR`.\n\n⚠️ `DUPLICATED_INVOICE` (the invoice already exists with the same identifier) is **distinct** from the `DUPLICATE_INVOICE` rejection reason of `POST /v1/invoice/{invoiceId}/status` (REFUSED / DISPUTED).","value":{"invoiceId":"f47ac10b-58cc-4372-a567-0e02b2c3d479","status":{"code":"REJECTED","networkCode":"213"},"xml":"<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?>","json":{"testIndicator":false,"identification":{"id":"019648f7-9e9d-7d0d-a59d-60464a53296a","name":"Lifecycle - REJECTED","date":"2025-03-23T03:24:00Z"},"sender":{"name":"COPROP*778 AV LOUIS RAVAS","siren":"017410945","siret":"01741094500012","electronicAddress":"0225:017410945_01741094500012","roleCode":"SE"},"issuer":null,"recipients":[{"name":"COPROP*778 AV LOUIS RAVAS","siren":"017410945","siret":"01741094500012","electronicAddress":"0225:017410945_01741094500012","roleCode":"SE"}],"responses":[{"documentReference":{"issuerAssignedId":"IOPOLE-aCWxcdAbR70","typeCode":380,"receiptDate":"2025-03-31T13:33:31.000Z","issueDate":"2025-03-31T00:00:00.000Z","issuer":{"name":"COPROP*778 AV LOUIS RAVAS","siren":"017410945","siret":"01741094500012","electronicAddress":"0225:017410945_01741094500012","roleCode":"SE"}},"documentStatus":{"code":"REJECTED"},"rejectionDetail":{"reason":"VALIDATION_FAILURE","message":"The document was rejected because it failed validation","errors":[{"reason":"SCHEMA","message":"Error : cvc-complex-type.2.4.a: Invalid content was found starting with element '{\"urn:un:unece:uncefact:data:standard:ReusableAggregateBusinessInformationEntity:100\":IDs}'. One of '{\"urn:un:unece:uncefact:data:standard:ReusableAggregateBusinessInformationEntity:100\":ID}' is expected.","rule":"XSD_ERROR","location":"NA"},{"reason":"SCHEMA","message":"The file specification dictionary shall contain key AFRelationship of type Name identifying the relationship between the embedded file and the content of the document","rule":"ISO 19005-3:2012 [6.8]","location":"root/EmbeddedFiles[0]"},{"reason":"SCHEMA","message":"XMP node not found","rule":"ConformanceLevel","location":"location"},{"reason":"BUSINESS","message":"[BR-CO-14]-Invoice total VAT amount (BT-110) = Σ VAT category tax amount (BT-117).","rule":"FX-SCH-A-000130","location":"/*:CrossIndustryInvoice[namespace-uri()='urn:un:unece:uncefact:data:standard:CrossIndustryInvoice:100'][1]/*:SupplyChainTradeTransaction[namespace-uri()='urn:un:unece:uncefact:data:standard:CrossIndustryInvoice:100'][1]/*:ApplicableHeaderTradeSettlement[namespace-uri()='urn:un:unece:uncefact:data:standard:ReusableAggregateBusinessInformationEntity:100'][1]/*:SpecifiedTradeSettlementHeaderMonetarySummation[namespace-uri()='urn:un:unece:uncefact:data:standard:ReusableAggregateBusinessInformationEntity:100'][1]/*:TaxTotalAmount[namespace-uri()='urn:un:unece:uncefact:data:standard:ReusableAggregateBusinessInformationEntity:100'][1]"}]},"rejectionDetails":[{"reason":"VALIDATION_FAILURE","message":"The document was rejected because it failed validation","errors":[{"reason":"SCHEMA","message":"Error : cvc-complex-type.2.4.a: Invalid content was found starting with element '{\"urn:un:unece:uncefact:data:standard:ReusableAggregateBusinessInformationEntity:100\":IDs}'. One of '{\"urn:un:unece:uncefact:data:standard:ReusableAggregateBusinessInformationEntity:100\":ID}' is expected.","rule":"XSD_ERROR","location":"NA"},{"reason":"SCHEMA","message":"The file specification dictionary shall contain key AFRelationship of type Name identifying the relationship between the embedded file and the content of the document","rule":"ISO 19005-3:2012 [6.8]","location":"root/EmbeddedFiles[0]"},{"reason":"SCHEMA","message":"XMP node not found","rule":"ConformanceLevel","location":"location"},{"reason":"BUSINESS","message":"[BR-CO-14]-Invoice total VAT amount (BT-110) = Σ VAT category tax amount (BT-117).","rule":"FX-SCH-A-000130","location":"/*:CrossIndustryInvoice[namespace-uri()='urn:un:unece:uncefact:data:standard:CrossIndustryInvoice:100'][1]/*:SupplyChainTradeTransaction[namespace-uri()='urn:un:unece:uncefact:data:standard:CrossIndustryInvoice:100'][1]/*:ApplicableHeaderTradeSettlement[namespace-uri()='urn:un:unece:uncefact:data:standard:ReusableAggregateBusinessInformationEntity:100'][1]/*:SpecifiedTradeSettlementHeaderMonetarySummation[namespace-uri()='urn:un:unece:uncefact:data:standard:ReusableAggregateBusinessInformationEntity:100'][1]/*:TaxTotalAmount[namespace-uri()='urn:un:unece:uncefact:data:standard:ReusableAggregateBusinessInformationEntity:100'][1]"}]}]}]}},"x-doc":{"text":"The invoice has been **rejected**.\nRejection details are available in the **status details**.\n\nThis status may be emitted by the **Iopole platform** or by the **remote platform** (outbound invoices only).\n\n`rejectionDetail.reason` uses one of the following codes: `VALIDATION_FAILURE`, `INVALID_SIGNATURE`, `ROUTING_FAILURE`, `DUPLICATED_INVOICE`, `SENDING_FAILURE`, `TOTAL_AMOUNT_INCORRECT`, `CALCULATION_ERROR`, `DUPLICATE_INVOICE`, `EINVOICING_ADDRESS_INCORRECT`, `B2G_CHECKS_FAILURE`, `ATTACHMENT_REFERENCE_ERROR`, `ATTACHMENT_ASSOCIATION_ERROR`.\n\n⚠️ `DUPLICATED_INVOICE` (the invoice already exists with the same identifier) is **distinct** from the `DUPLICATE_INVOICE` rejection reason of `POST /v1/invoice/{invoiceId}/status` (REFUSED / DISPUTED)."}},"exampleStatusApprovedResponse":{"summary":"Status Approved (🌐 Remote-dependent)","description":"The invoice has been **approved by the buyer** on their side (outbound invoices only).","value":{"invoiceId":"f47ac10b-58cc-4372-a567-0e02b2c3d479","status":{"code":"APPROVED","networkCode":"205"},"xml":"<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?>","json":{"sender":{"name":"Sender Company","siren":"123456789","siret":"12345678909090","roleCode":{"code":"BUYER","value":"BY","desc":"Acheteur"}},"responses":[{"documentStatus":{"code":"APPROVED","networkCode":"205"},"documentReference":{"issuer":{"name":"Issuer Company","siren":"987654321","siret":"98765432109876","roleCode":{"code":"SELLER","value":"SE","desc":"Vendeur"}},"typeCode":380,"issueDate":"2025-04-28T00:00:00Z","receiptDate":"2025-04-28T09:47:40Z","issuerAssignedId":"IOPOLE-8YBWbe2MGbA"}}],"recipients":[{"name":"Recipient Company","siren":"112233445","siret":"11223344556677","roleCode":{"code":"INTERMEDIARY","value":"IN","desc":"Intermédiaire"}}],"testIndicator":false,"identification":{"id":"01967bcb-d1a7-709f-b70a-8df5fa2baa51","date":"2025-04-28T09:47:57Z","name":"Lifecycle - APPROVED"}}},"x-doc":{"text":"The invoice has been **approved by the buyer** on their side (outbound invoices only)."}},"exampleStatusUnacceptableResponse":{"summary":"Status Unacceptable (⚠️ Flux-level rejection)","description":"The invoice file has been **rejected at the flux level** before any content validation.\n\nThis status is emitted when the file itself is corrupted or technically invalid: empty file, antivirus positive, invalid file type, invalid XML syntax, etc.\n\n**Key differences from REJECTED (213):**\n- `networkCode: 501` instead of 213\n- `documentReference.typeCode: 303` (flux document type, not invoice type)\n- No `documentReference.issuer` (invoice was not parsed — no seller metadata available)\n- `rejectionDetail.reason` uses flux-specific codes (`EMPTY_FILE`, `ANTIVIRUS_FAILURE`, `INVALID_FILE_TYPE`, …)\n- No per-rule validation errors\n\nThe operator **may resubmit the same invoice number** after receiving this status (unicity check is bypassed).","value":{"invoiceId":"f47ac10b-58cc-4372-a567-0e02b2c3d479","status":{"code":"UNACCEPTABLE","networkCode":"501"},"xml":"<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?>","json":{"testIndicator":false,"identification":{"id":"01981cb1-17f4-7681-a60a-d669edc44e76","name":"Lifecycle - UNACCEPTABLE","date":"2025-07-18T08:40:24.000Z"},"sender":{"name":"Test Seller","country":"FR","roleCode":"SE","vatNumber":"FR61922304308","identifiers":[{"type":"ELECTRONIC_ADDRESS","value":"922304308","scheme":"0002"}],"postalAddress":{"country":"FR","cityName":"Pérols","postalCode":"34470","addressLineOne":"145 Imp. John Locke"},"electronicAddress":"0002:922304308"},"issuer":null,"recipients":[],"responses":[{"documentStatus":{"code":"UNACCEPTABLE"},"documentReference":{"typeCode":303,"issuerAssignedId":"f47ac10b-58cc-4372-a567-0e02b2c3d479","issueDate":"2025-07-18T08:40:21.000Z","receiptDate":"2025-07-18T08:40:21.000Z"},"rejectionDetail":{"reason":"EMPTY_FILE","message":"The file submitted is empty (0 bytes).","errors":[]},"rejectionDetails":[{"reason":"EMPTY_FILE","message":"The file submitted is empty (0 bytes).","errors":[]}]}]}},"x-doc":{"text":"The invoice file has been **rejected at the flux level** before any content validation.\n\nThis status is emitted when the file itself is corrupted or technically invalid: empty file, antivirus positive, invalid file type, invalid XML syntax, etc.\n\n**Key differences from REJECTED (213):**\n- `networkCode: 501` instead of 213\n- `documentReference.typeCode: 303` (flux document type, not invoice type)\n- No `documentReference.issuer` (invoice was not parsed — no seller metadata available)\n- `rejectionDetail.reason` uses flux-specific codes (`EMPTY_FILE`, `ANTIVIRUS_FAILURE`, `INVALID_FILE_TYPE`, …)\n- No per-rule validation errors\n\nThe operator **may resubmit the same invoice number** after receiving this status (unicity check is bypassed)."}}}}}},"responses":{"200":{"description":"Return any HTTP **2xx** code to acknowledge receipt of the status update.","x-doc":{"text":"Return any HTTP **2xx** code to acknowledge receipt of the status update."}},"204":{"description":"No content. Valid acknowledgment of receipt.","x-doc":{"text":"No content. Valid acknowledgment of receipt."}},"401":{"description":"Unauthorized - Authentication is required and has failed or has not yet been provided.","x-doc":{"text":"Unauthorized - Authentication is required and has failed or has not yet been provided."}},"403":{"description":"Forbidden - The server understood the request, but it refuses to authorize it.","x-doc":{"text":"Forbidden - The server understood the request, but it refuses to authorize it."}}},"x-doc":{"text":"Callback invoked by the platform to **deliver invoice status updates** to the operator system.\n\n> ✅ **Requirements**\n> - Return HTTP **2xx** to acknowledge receipt\n> - Response body must be **empty** or **valid JSON** (no plain text)\n> - Must respond within **60 seconds**\n> - Should accept data up to **100MB**"}}}},"onboarding":{"{$request.body#/interopData/endpoints/onboarding/callbackUrl}":{"post":{"summary":"Onboarding state callback","description":"Callback invoked by the platform to **notify the operator system** about the current **onboarding state**.\n\n> ✅ **Requirements**\n> - Return HTTP **2xx** to acknowledge receipt\n> - Response body must be **empty** or **valid JSON** (no plain text)\n> - Must respond within **60 seconds**\n","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"enrollmentId":{"type":"string","format":"uuid","description":"Enrollment process identifier.","x-doc":{"text":"Enrollment process identifier."}},"name":{"type":"string","description":"Company name.","x-doc":{"text":"Company name."}},"identifierScheme":{"type":"string","description":"Participant identifier scheme (e.g., 0208).","x-doc":{"text":"Participant identifier scheme (e.g., 0208)."}},"identifierValue":{"type":"string","description":"Participant identifier value.","x-doc":{"text":"Participant identifier value."}},"state":{"type":"string","enum":["STARTED","ACTION_REQUIRED","ACCEPTED","IDENTITY_CHECK_STARTED","IDENTITY_CHECK_SUBMITTED","IDENTITY_CHECK_ACTION_REQUIRED","IDENTITY_CHECK_ACCEPTED","BUSINESS_VERIFICATION_STARTED","BUSINESS_VERIFICATION_ACTION_REQUIRED","BUSINESS_VERIFICATION_ACCEPTED","MANDATE_SIGNED","ELECTRONIC_ADDRESS_MIGRATION","REGISTERING","REGISTERED","COMPLETED","CANCELLED","REOPEN"],"description":"Onboarding stage.","x-doc":{"text":"Onboarding stage.","array":[{"code":"STARTED","label":"The customer has started the onboarding process."},{"code":"ACTION_REQUIRED","label":"The onboarding process requires manual review or action before it can continue."},{"code":"ACCEPTED","label":"Replaced by REGISTERING but still sent.","deprecated":true},{"code":"IDENTITY_CHECK_STARTED","label":"The customer has started the identity check stage of the onboarding process."},{"code":"IDENTITY_CHECK_SUBMITTED","label":"Replaced by IDENTITY_CHECK_ACTION_REQUIRED but still sent.","deprecated":true},{"code":"IDENTITY_CHECK_ACTION_REQUIRED","label":"The customer has completed the identity check stage, but the identity requires manual review and approval."},{"code":"IDENTITY_CHECK_ACCEPTED","label":"The customer's identity has been successfully verified and accepted."},{"code":"BUSINESS_VERIFICATION_STARTED","label":"The business verification (KYB) process has started."},{"code":"BUSINESS_VERIFICATION_ACTION_REQUIRED","label":"The customer has submitted all required KYB evidences and the business verification requires manual review and approval."},{"code":"BUSINESS_VERIFICATION_ACCEPTED","label":"The business verification (KYB) has been successfully validated and accepted."},{"code":"MANDATE_SIGNED","label":"The customer has signed the mandate."},{"code":"ELECTRONIC_ADDRESS_MIGRATION","label":"At least one of the customer electronic addresses is held by another platform and requires a change-of-PA request. The deliverables to file with each outgoing platform are available for download."},{"code":"REGISTERING","label":"Electronic addresses are currently in the process of being registered on the necessary networks."},{"code":"REGISTERED","label":"All electronic addresses have now been registered on the necessary networks."},{"code":"COMPLETED","label":"The onboarding process is fully completed. This event marks the end of the onboarding lifecycle."},{"code":"CANCELLED","label":"The onboarding process has been cancelled before completion."},{"code":"REOPEN","label":"The onboarding process was reopened after manual review."}]}},"entity":{"type":"object","properties":{"contactEmail":{"type":"string"},"address":{"type":"string"}},"additionalProperties":false,"description":"Business entity details. Only present in COMPLETED events for white-label operators.","x-doc":{"text":"Business entity details. Only present in COMPLETED events for white-label operators."}},"legalRepresentative":{"type":"object","properties":{"lastName":{"type":"string"},"firstName":{"type":"string"},"position":{"type":"string"}},"additionalProperties":false,"description":"Legal representative details. Only present in COMPLETED events for white-label operators.","x-doc":{"text":"Legal representative details. Only present in COMPLETED events for white-label operators."}},"mandate":{"type":"object","properties":{"number":{"type":"string"},"signingDate":{"type":"string"},"effectiveDate":{"type":"string"}},"additionalProperties":false,"description":"Mandate details. Only present in COMPLETED events for white-label operators.","x-doc":{"text":"Mandate details. Only present in COMPLETED events for white-label operators."}},"eInvoicingAddresses":{"type":"array","items":{"type":"object","properties":{"addressType":{"type":"string"},"electronicAddress":{"type":"string"},"migrationKey":{"type":"string"}},"required":["addressType","electronicAddress"],"additionalProperties":false},"description":"E-invoicing addresses. Only present in COMPLETED events.","x-doc":{"text":"E-invoicing addresses. Only present in COMPLETED events."}},"registrationNetworks":{"type":"array","items":{"type":"string"},"description":"Registration networks. Only present in COMPLETED events.","x-doc":{"text":"Registration networks. Only present in COMPLETED events."}},"evidencesLink":{"type":"string","format":"uri","description":"URL to retrieve enrollment evidences. Present in COMPLETED events for white-label operators.","x-doc":{"text":"URL to retrieve enrollment evidences. Present in COMPLETED events for white-label operators."}},"portabilityDeliverables":{"type":"array","items":{"type":"object","properties":{"oldPlatform":{"type":"object","properties":{"legalIdentifier":{"type":"string","description":"Matricule of the outgoing PA.","x-doc":{"text":"Matricule of the outgoing PA."}},"name":{"type":"string","nullable":true,"description":"Name of the outgoing PA, null when the directory holds none.","x-doc":{"text":"Name of the outgoing PA, null when the directory holds none."}}},"required":["legalIdentifier","name"],"additionalProperties":false},"addresses":{"type":"array","items":{"type":"object","properties":{"electronicAddress":{"type":"string"},"addressType":{"type":"string"},"portabilityStatus":{"type":"string","description":"PORTABILITY_REQUIRED while the outgoing PA has not consented, PORTABILITY_GRANTED after.","x-doc":{"text":"PORTABILITY_REQUIRED while the outgoing PA has not consented, PORTABILITY_GRANTED after."}}},"required":["electronicAddress","addressType","portabilityStatus"],"additionalProperties":false},"description":"The customer addresses held by that outgoing PA.","x-doc":{"text":"The customer addresses held by that outgoing PA."}},"downloadLink":{"type":"string","format":"uri","description":"URL of the ZIP archive holding the portability CSV and, when available, the signed mandate.","x-doc":{"text":"URL of the ZIP archive holding the portability CSV and, when available, the signed mandate."}}},"required":["oldPlatform","addresses","downloadLink"],"additionalProperties":false},"description":"One entry per outgoing PA. Present in ELECTRONIC_ADDRESS_MIGRATION events for white-label operators.","x-doc":{"text":"One entry per outgoing PA. Present in ELECTRONIC_ADDRESS_MIGRATION events for white-label operators."}}},"required":["enrollmentId","identifierScheme","identifierValue","state"],"additionalProperties":false}}}},"responses":{"200":{"description":"Return any HTTP **2xx** code to acknowledge receipt of the onboarding state notification.","x-doc":{"text":"Return any HTTP **2xx** code to acknowledge receipt of the onboarding state notification."}},"204":{"description":"No content. Valid acknowledgment of receipt.","x-doc":{"text":"No content. Valid acknowledgment of receipt."}},"401":{"description":"Unauthorized - Authentication is required and has failed or has not yet been provided.","x-doc":{"text":"Unauthorized - Authentication is required and has failed or has not yet been provided."}},"403":{"description":"Forbidden - The server understood the request, but it refuses to authorize it.","x-doc":{"text":"Forbidden - The server understood the request, but it refuses to authorize it."}}},"x-doc":{"text":"Callback invoked by the platform to **notify the operator system** about the current **onboarding state**.\n\n> ✅ **Requirements**\n> - Return HTTP **2xx** to acknowledge receipt\n> - Response body must be **empty** or **valid JSON** (no plain text)\n> - Must respond within **60 seconds**\n"}}}},"ereportingLegalData":{"{$request.body#/interopData/endpoints/ereportingLegalData/callbackUrl}":{"post":{"summary":"🚧 Work In Progress — E-reporting legal data delivery callback","description":"**🚧 Work In Progress.** Callback invoked by the platform to **notify the operator** that a declaration (Flux 10) for one of their Reports has been **sent to the PPF**.\n\n> ✅ **Requirements**\n> - Return HTTP **2xx** to acknowledge receipt\n> - Response body must be **empty** or **valid JSON** (no plain text)\n> - Must respond within **60 seconds**\n","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","description":"E-reporting legal data delivery payload.","properties":{"reportId":{"type":"string","format":"uuid","description":"Identifier of the Report that was sent to the PPF","x-doc":{"text":"Identifier of the Report that was sent to the PPF"}},"declarationType":{"type":"string","enum":["INITIAL","CORRECTIVE"],"description":"Whether this is the initial declaration for the Report or a correction of a previous one","x-doc":{"text":"Whether this is the initial declaration for the Report or a correction of a previous one"}},"fileLink":{"type":"string","format":"uri","description":"Link to the declaration file sent to the PPF","x-doc":{"text":"Link to the declaration file sent to the PPF"}}},"required":["reportId","declarationType","fileLink"],"x-doc":{"text":"E-reporting legal data delivery payload."}},"examples":{"ereportingLegalDataSent":{"summary":"E-reporting Legal Data Sent","description":"Notification sent when a Report declaration (Flux 10) is transmitted to the PPF.","value":{"reportId":"b2c3d4e5-f6a7-48b9-0c1d-2e3f4a5b6c7d","declarationType":"INITIAL","fileLink":"https://platform.iopole.io/v1/reporting/report/b2c3d4e5-f6a7-48b9-0c1d-2e3f4a5b6c7d/file"},"x-doc":{"text":"Notification sent when a Report declaration (Flux 10) is transmitted to the PPF."}}}}}},"responses":{"200":{"description":"Return any HTTP **2xx** code to acknowledge receipt.","x-doc":{"text":"Return any HTTP **2xx** code to acknowledge receipt."}},"204":{"description":"No content. Valid acknowledgment of receipt.","x-doc":{"text":"No content. Valid acknowledgment of receipt."}}},"x-doc":{"text":"**🚧 Work In Progress.** Callback invoked by the platform to **notify the operator** that a declaration (Flux 10) for one of their Reports has been **sent to the PPF**.\n\n> ✅ **Requirements**\n> - Return HTTP **2xx** to acknowledge receipt\n> - Response body must be **empty** or **valid JSON** (no plain text)\n> - Must respond within **60 seconds**\n"}}}},"ereportingLegalDataStatus":{"{$request.body#/interopData/endpoints/ereportingLegalDataStatus/callbackUrl}":{"post":{"summary":"🚧 Work In Progress — E-reporting legal data status callback","description":"**🚧 Work In Progress.** Callback invoked by the platform to **notify the operator** of the PPF's answer (CFE or FFE acknowledgment) to a Report declaration.\n\n> ✅ **Requirements**\n> - Return HTTP **2xx** to acknowledge receipt\n> - Response body must be **empty** or **valid JSON** (no plain text)\n> - Must respond within **60 seconds**\n","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","description":"E-reporting legal data status payload.","properties":{"reportId":{"type":"string","format":"uuid","description":"Identifier of the Report the PPF answered about","x-doc":{"text":"Identifier of the Report the PPF answered about"}},"xml":{"type":"string","description":"Raw PPF acknowledgment (CFE/FFE) XML","x-doc":{"text":"Raw PPF acknowledgment (CFE/FFE) XML"}},"json":{"type":"object","description":"Parsed PPF acknowledgment, including the accepted/rejected status and any rejection detail","x-doc":{"text":"Parsed PPF acknowledgment, including the accepted/rejected status and any rejection detail"}}},"required":["reportId","xml","json"],"x-doc":{"text":"E-reporting legal data status payload."}},"examples":{"ereportingLegalDataStatusDeclared":{"summary":"E-reporting Legal Data Status — Declared","description":"Notification sent when the PPF acknowledges acceptance of the Report's declaration.","value":{"reportId":"b2c3d4e5-f6a7-48b9-0c1d-2e3f4a5b6c7d","xml":"<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?>","json":{"status":{"code":"DECLARED"}}},"x-doc":{"text":"Notification sent when the PPF acknowledges acceptance of the Report's declaration."}},"ereportingLegalDataStatusRejected":{"summary":"E-reporting Legal Data Status — Rejected","description":"Notification sent when the PPF rejects the Report's declaration.","value":{"reportId":"b2c3d4e5-f6a7-48b9-0c1d-2e3f4a5b6c7d","xml":"<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?>","json":{"status":{"code":"REJECTED"},"rejectionDetail":{"reason":"VALIDATION_FAILURE","message":"The declaration was rejected by the PPF because it failed validation","errors":[{"reason":"SCHEMA","message":"Example PPF error detail","rule":"DGFIP-RULE-01","location":"NA"}]}}},"x-doc":{"text":"Notification sent when the PPF rejects the Report's declaration."}}}}}},"responses":{"200":{"description":"Return any HTTP **2xx** code to acknowledge receipt.","x-doc":{"text":"Return any HTTP **2xx** code to acknowledge receipt."}},"204":{"description":"No content. Valid acknowledgment of receipt.","x-doc":{"text":"No content. Valid acknowledgment of receipt."}}},"x-doc":{"text":"**🚧 Work In Progress.** Callback invoked by the platform to **notify the operator** of the PPF's answer (CFE or FFE acknowledgment) to a Report declaration.\n\n> ✅ **Requirements**\n> - Return HTTP **2xx** to acknowledge receipt\n> - Response body must be **empty** or **valid JSON** (no plain text)\n> - Must respond within **60 seconds**\n"}}}},"events":{"{$request.body#/interopData/endpoints/events/callbackUrl}":{"post":{"summary":"Generic operator event callback","description":"Callback invoked by the platform to **notify the operator** about **generic events**.\n\n> 🎯 **Event Types**\n> - `INVOICE_INBOUND_INVALID` - Notifies when an invalid inbound invoice is received\n> - `OUTBOUND_INVOICE_NOT_DELIVERED` - Notifies when an outbound invoice could not be delivered to the platform\n> - `OUTBOUND_STATUS_NOT_DELIVERED` - Notifies when an outbound status could not be delivered to the platform\n> - `PEPPOL_MIGRATION_COMPLETED` - Notifies when an electronic address you handed a migration key for finished migrating to the new platform\n> - `EREPORTING_TRANSACTION_ATTACHED` 🚧 *(Work In Progress)* - Notifies when a transaction is attached to a Report\n> - `EREPORTING_PAYMENT_ATTACHED` 🚧 *(Work In Progress)* - Notifies when a payment is attached to a Report\n> - `EREPORTING_ERROR` 🚧 *(Work In Progress)* - Notifies when a submitted transaction or payment fails validation\n> - `EREPORTING_PERIOD_OPENED` 🚧 *(Work In Progress)* - Notifies when an e-reporting period opens\n> - `EREPORTING_PERIOD_CLOSED` 🚧 *(Work In Progress)* - Notifies when an e-reporting period closes\n>\n> ✅ **Requirements**\n> - Return HTTP **2xx** to acknowledge receipt\n> - Response body must be **empty** or **valid JSON** (no plain text)\n> - Must respond within **60 seconds**\n","requestBody":{"required":true,"content":{"application/json":{"schema":{"allOf":[{"type":"object","properties":{"eventId":{"type":"string","format":"uuid","description":"Unique event identifier","x-doc":{"text":"Unique event identifier"}},"timestamp":{"type":"string","description":"Event timestamp in ISO 8601 format","x-doc":{"text":"Event timestamp in ISO 8601 format"}},"referencedObject":{"type":"object","properties":{"type":{"type":"string","enum":["INVOICE","DOCUMENT","ENROLLMENT","BUSINESS_ENTITY","STATUS","TRANSACTION","PAYMENT","EREPORTING_PERIOD"],"description":"The type of the referenced object","x-doc":{"text":"The type of the referenced object"}},"id":{"type":"string","format":"uuid","description":"The UUID of the referenced object","x-doc":{"text":"The UUID of the referenced object"}}},"required":["type","id"],"additionalProperties":false,"description":"Reference to the object that triggered this event","x-doc":{"text":"Reference to the object that triggered this event"}}},"required":["eventId","timestamp","referencedObject"]},{"anyOf":[{"type":"object","properties":{"eventType":{"type":"string","enum":["INVOICE_INBOUND_INVALID"]},"payload":{"type":"object","properties":{"businessData":{"type":"object","properties":{"seller":{"type":"object","properties":{"name":{"type":"string","description":"Business name of the seller","x-doc":{"text":"Business name of the seller","valueDescription":"99 char"}},"tradingBusinessName":{"type":"string","description":"**BT-28** Trade name of the seller","x-doc":{"text":"Trade name of the seller","more":"It can be used if it differs from the Seller's legal name.","uniqIdentifier":"BT-28","valueDescription":"99 char"}},"siren":{"type":"string","maxLength":9,"description":"**BT-30** A 9-digit unique identifier for businesses in France.","x-doc":{"text":"A 9-digit unique identifier for businesses in France.","more":"Identifier issued by an official registration body that identifies the Seller as a legal entity or a legal person.","uniqIdentifier":"BT-30","valueDescription":"9 char"}},"siret":{"type":"string","maxLength":14,"description":"A 14-digit identifier that includes the SIREN plus a 5-digit code for specific establishments of a business in France.","x-doc":{"text":"A 14-digit identifier that includes the SIREN plus a 5-digit code for specific establishments of a business in France.","more":"BT-29b - Identification of the Seller","valueDescription":"14 char"}},"electronicAddress":{"type":"string","maxLength":125,"description":"**BT-34** Electronic address of the seller","x-doc":{"text":"Electronic address of the seller","more":"scheme:value","uniqIdentifier":"BT-34","valueDescription":"50 char"}},"vatNumber":{"type":"string","maxLength":18,"description":"**BT-31** Buyer's VAT identifier","x-doc":{"text":"Buyer's VAT identifier","more":"According to Article 215 of Council Directive 2006/112/EC.","uniqIdentifier":"BT-31","valueDescription":"18 char"}},"postalAddress":{"type":"object","properties":{"addressLineOne":{"type":"string","maxLength":255,"description":"**BT-35** Seller's address","x-doc":{"text":"Seller's address","more":"Main line of an address.","uniqIdentifier":"BT-35","valueDescription":"255 char"}},"addressLineTwo":{"type":"string","maxLength":255,"description":"**BT-36** Seller's address","x-doc":{"text":"Seller's address","more":"Additional line of an address.","uniqIdentifier":"BT-36","valueDescription":"255 char"}},"addressLineThree":{"type":"string","maxLength":255,"description":"**BT-162** Seller's address","x-doc":{"text":"Seller's address","more":"Additional line of an address.","uniqIdentifier":"BT-162","valueDescription":"255 char"}},"cityName":{"type":"string","maxLength":255,"description":"**BT-37** Seller's locality","x-doc":{"text":"Seller's locality","more":"Common name of the municipality, city, or town.","uniqIdentifier":"BT-37","valueDescription":"255 char"}},"postalCode":{"type":"string","maxLength":10,"description":"**BT-38** Postal code of the seller","x-doc":{"text":"Postal code of the seller","more":"Identifier of an addressable property group.","uniqIdentifier":"BT-38","valueDescription":"10 char"}},"countrySubDivision":{"type":"string","maxLength":255,"description":"**BT-39** Seller's country subdivision","x-doc":{"text":"Seller's country subdivision","more":"Country subdivision","uniqIdentifier":"BT-39","valueDescription":"255 char"}},"country":{"type":"string","maxLength":2,"description":"**BT-40** Seller’s country code","x-doc":{"text":"Seller’s country code","more":"Country identification code","uniqIdentifier":"BT-40","link":{"placeholder":"Country iso code list","link":"https://en.wikipedia.org/wiki/ISO_3166-1_alpha-2#Officially_assigned_code_elements"},"valueDescription":"2 char"}}},"required":["country"],"additionalProperties":false},"contact":{"type":"object","properties":{"personName":{"type":"string","maxLength":100,"description":"**BT-41** Seller’s contact point person","x-doc":{"text":"Seller’s contact point person","more":"Contact point corresponding to a legal entity or a moral person","uniqIdentifier":"BT-41","valueDescription":"100 char"}},"departmentName":{"type":"string","maxLength":100,"description":"**BT-41** Seller’s contact point department","x-doc":{"text":"Seller’s contact point department","more":"Contact point corresponding to a legal entity or a moral person","uniqIdentifier":"BT-41","valueDescription":"100 char"}},"phoneNumber":{"type":"string","description":"**BT-42** Seller's contact phone number","x-doc":{"text":"Seller's contact phone number","more":"Phone number of the contact point","uniqIdentifier":"BT-42","valueDescription":"string"}},"email":{"type":"string","description":"**BT-43** Email address of the seller's contact","x-doc":{"text":"Email address of the seller's contact","more":"Email address of the contact person","uniqIdentifier":"BT-43","valueDescription":"string"}}},"additionalProperties":false},"identifiers":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["ELECTRONIC_ADDRESS","PARTY_IDENTIFIER","PARTY_LEGAL_IDENTIFIER"],"description":"The type of the identifier.","x-doc":{"text":"The type of the identifier.","array":[{"code":"ELECTRONIC_ADDRESS","label":"Electronic address used for routing (e.g. Peppol)."},{"code":"PARTY_IDENTIFIER","label":"General party identifier."},{"code":"PARTY_LEGAL_IDENTIFIER","label":"Legal identifier of the party."}]}},"scheme":{"type":"string","description":"The EAS code (Endpoint Address Scheme) identifies the type of identifier used for parties in electronic invoicing.","x-doc":{"text":"The EAS code (Endpoint Address Scheme) identifies the type of identifier used for parties in electronic invoicing.","more":"Once on the European Commission's webpage, download the latest version of the XLSX file containing the EAS codes. Example: for a French company it can be 0002 (SIREN).","link":{"placeholder":"EAS code list","link":"https://ec.europa.eu/digital-building-blocks/sites/display/DIGITAL/Registry+of+supporting+artefacts+to+implement+EN16931"}}},"value":{"type":"string","description":"The value of the electronic address.","x-doc":{"text":"The value of the electronic address."}}},"required":["scheme","value"],"additionalProperties":false}}},"required":["name"],"additionalProperties":false,"description":"BG-4 - The seller details of the invoice","x-doc":{"text":"BG-4 - The seller details of the invoice"}},"buyer":{"type":"object","properties":{"name":{"type":"string","description":"**BT-44** Buyer’s company name","x-doc":{"text":"Buyer’s company name","uniqIdentifier":"BT-44","valueDescription":"99 char"}},"tradingBusinessName":{"type":"string","description":"**BT-45** Commercial Name of the Buyer’s Agent","x-doc":{"text":"Commercial Name of the Buyer’s Agent","more":"Name by which the validator is known, other than the legal name of the validator (also called the Business Name)","uniqIdentifier":"BT-45","valueDescription":"99 char"}},"siren":{"type":"string","maxLength":9,"description":"**BT-47** A 9-digit unique identifier for businesses in France.","x-doc":{"text":"A 9-digit unique identifier for businesses in France.","more":"Identifier issued by an official registration authority, identifying the Buyer as a legal entity or corporate body.","uniqIdentifier":"BT-47","valueDescription":"9 char"}},"siret":{"type":"string","maxLength":14,"description":"**BT-46b** A 14-digit identifier that includes the SIREN plus a 5-digit code for specific establishments of a business in France.","x-doc":{"text":"A 14-digit identifier that includes the SIREN plus a 5-digit code for specific establishments of a business in France.","more":"Identification of the Buyer.","uniqIdentifier":"BT-46b","valueDescription":"14 char"}},"electronicAddress":{"type":"string","maxLength":125,"description":"**BT-49** Addressing identifier","x-doc":{"text":"Addressing identifier","more":"scheme:value","uniqIdentifier":"BT-49"}},"vatNumber":{"type":"string","maxLength":18,"description":"**BT-48** Buyer's VAT identifier","x-doc":{"text":"Buyer's VAT identifier","more":"According to Article 215 of Council Directive 2006/112/EC.","uniqIdentifier":"BT-48","valueDescription":"18 char"}},"postalAddress":{"type":"object","properties":{"addressLineOne":{"type":"string","maxLength":255,"description":"**BT-50** Buyer's address","x-doc":{"text":"Buyer's address","more":"Main line of an address.","uniqIdentifier":"BT-50"}},"addressLineTwo":{"type":"string","maxLength":255,"description":"**BT-51** Buyer's address","x-doc":{"text":"Buyer's address","more":"Additional line of an address.","uniqIdentifier":"BT-51","valueDescription":"255 char"}},"addressLineThree":{"type":"string","maxLength":255,"description":"**BT-163** Buyer's address","x-doc":{"text":"Buyer's address","more":"Additional line of an address.","uniqIdentifier":"BT-163","valueDescription":"255 char"}},"cityName":{"type":"string","maxLength":255,"description":"**BT-52** Buyer's locality","x-doc":{"text":"Buyer's locality","more":"Common name of the municipality, city, or town.","uniqIdentifier":"BT-52","valueDescription":"255 char"}},"postalCode":{"type":"string","maxLength":10,"description":"**BT-53** Postal code of the buyer","x-doc":{"text":"Postal code of the buyer","more":"Identifier of an addressable property group.","uniqIdentifier":"BT-53","valueDescription":"10 char"}},"countrySubDivision":{"type":"string","maxLength":255,"description":"**BT-54** Buyer’s country subdivision","x-doc":{"text":"Buyer’s country subdivision","more":"Country subdivision","uniqIdentifier":"BT-54","valueDescription":"255 char"}},"country":{"type":"string","maxLength":2,"description":"**BT-55** Buyer’s country code","x-doc":{"text":"Buyer’s country code","more":"Country identification code","uniqIdentifier":"BT-55","link":{"placeholder":"Country iso code list","link":"https://en.wikipedia.org/wiki/ISO_3166-1_alpha-2#Officially_assigned_code_elements"},"valueDescription":"2 char"}}},"required":["country"],"additionalProperties":false},"contact":{"type":"object","properties":{"personName":{"type":"string","maxLength":100,"description":"**BT-56** Buyer’s contact point person","x-doc":{"text":"Buyer’s contact point person","more":"Contact point corresponding to a legal entity or a moral person","uniqIdentifier":"BT-56","valueDescription":"100 char"}},"departmentName":{"type":"string","maxLength":100,"description":"**BT-56** Buyer’s contact point department","x-doc":{"text":"Buyer’s contact point department","more":"Contact point corresponding to a legal entity or a moral person","uniqIdentifier":"BT-56","valueDescription":"100 char"}},"phoneNumber":{"type":"string","description":"**BT-57** Buyer's contact phone number","x-doc":{"text":"Buyer's contact phone number","more":"Phone number of the contact point","uniqIdentifier":"BT-57","valueDescription":"string"}},"email":{"type":"string","description":"**BT-58** Email address of the buyer's contact","x-doc":{"text":"Email address of the buyer's contact","more":"Email address of the contact person","uniqIdentifier":"BT-58","valueDescription":"string"}}},"additionalProperties":false},"identifiers":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["ELECTRONIC_ADDRESS","PARTY_IDENTIFIER","PARTY_LEGAL_IDENTIFIER"],"description":"The type of the identifier.","x-doc":{"text":"The type of the identifier.","array":[{"code":"ELECTRONIC_ADDRESS","label":"Electronic address used for routing (e.g. Peppol)."},{"code":"PARTY_IDENTIFIER","label":"General party identifier."},{"code":"PARTY_LEGAL_IDENTIFIER","label":"Legal identifier of the party."}]}},"scheme":{"type":"string","description":"The EAS code (Endpoint Address Scheme) identifies the type of identifier used for parties in electronic invoicing.","x-doc":{"text":"The EAS code (Endpoint Address Scheme) identifies the type of identifier used for parties in electronic invoicing.","more":"Once on the European Commission's webpage, download the latest version of the XLSX file containing the EAS codes. Example: for a French company it can be 0002 (SIREN).","link":{"placeholder":"EAS code list","link":"https://ec.europa.eu/digital-building-blocks/sites/display/DIGITAL/Registry+of+supporting+artefacts+to+implement+EN16931"}}},"value":{"type":"string","description":"The value of the electronic address.","x-doc":{"text":"The value of the electronic address."}}},"required":["scheme","value"],"additionalProperties":false}}},"required":["name","electronicAddress"],"additionalProperties":false,"description":"BG-7 - The buyer details of the invoice","x-doc":{"text":"BG-7 - The buyer details of the invoice"}},"invoiceId":{"type":"string","description":"The invoice identifier","x-doc":{"text":"The invoice identifier"}}},"additionalProperties":false,"description":"Invoice business data","x-doc":{"text":"Invoice business data"}},"validationErrors":{"type":"array","items":{"type":"object","properties":{"source":{"type":"string","description":"The source of the validation error","x-doc":{"text":"The source of the validation error"}},"pdfA3ValidationResult":{"type":"array","items":{"type":"object","properties":{"compliant":{"type":"boolean"},"pdfaFlavour":{"type":"string"},"failedAssert":{"type":"array","items":{"type":"object","properties":{"message":{"type":"string"},"ordinal":{"type":"number"},"ruleClause":{"type":"string"},"locationLevel":{"type":"string"},"ruleTestNumber":{"type":"number"},"locationContext":{"type":"string"},"ruleSpecification":{"type":"string"}},"required":["message","ordinal","ruleClause","locationLevel","ruleTestNumber","locationContext","ruleSpecification"],"additionalProperties":false}}},"required":["compliant","pdfaFlavour","failedAssert"],"additionalProperties":false},"description":"PDF/A-3 compliance validation results","x-doc":{"text":"PDF/A-3 compliance validation results"}},"pdfXmpValidationResult":{"type":"array","items":{"type":"object","properties":{"isValid":{"type":"boolean"},"version":{"type":"string"},"resultError":{"type":"array","items":{"type":"object","properties":{"name":{"type":"string"},"valid":{"type":"boolean"},"value":{"type":"string"},"xPath":{"type":"string"},"errorDetail":{"type":"string"}},"required":["name","valid","value","xPath","errorDetail"],"additionalProperties":false}},"documentType":{"type":"string"},"conformanceLevel":{"type":"string"},"documentFilename":{"type":"string"}},"required":["isValid","version","resultError","documentType","conformanceLevel","documentFilename"],"additionalProperties":false},"description":"PDF XMP metadata validation results","x-doc":{"text":"PDF XMP metadata validation results"}},"schemaValidationErrors":{"type":"array","items":{"type":"string"},"description":"List of schema validation errors","x-doc":{"text":"List of schema validation errors"}},"schematronValidationErrors":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"test":{"type":"string"},"text":{"type":"string"},"location":{"type":"string"}},"required":["id","test","text","location"],"additionalProperties":false},"description":"List of schematron validation errors","x-doc":{"text":"List of schematron validation errors"}},"schematronValidationWarnings":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"test":{"type":"string"},"text":{"type":"string"},"location":{"type":"string"}},"required":["id","test","text","location"],"additionalProperties":false},"description":"List of schematron validation warnings","x-doc":{"text":"List of schematron validation warnings"}}},"required":["source"],"additionalProperties":false},"description":"List of validation errors","x-doc":{"text":"List of validation errors"}}},"required":["businessData","validationErrors"],"additionalProperties":false}},"required":["eventType","payload"],"additionalProperties":false},{"type":"object","properties":{"eventType":{"type":"string","enum":["OUTBOUND_INVOICE_NOT_DELIVERED"]},"payload":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"anyOf":[{"type":"string"},{"type":"number"}],"nullable":true,"description":"Error code returned by the platform adapter","x-doc":{"text":"Error code returned by the platform adapter"}},"statusCode":{"anyOf":[{"type":"string"},{"type":"number"}],"nullable":true,"description":"HTTP status code returned by the platform","x-doc":{"text":"HTTP status code returned by the platform"}},"statusMessage":{"type":"string","nullable":true,"description":"Human-readable error message","x-doc":{"text":"Human-readable error message"}},"details":{"description":"Raw platform response / distribution error details","x-doc":{"text":"Raw platform response / distribution error details"}}},"additionalProperties":false,"description":"The delivery error","x-doc":{"text":"The delivery error"}},"operatorData":{"type":"object","properties":{"userId":{"type":"string","description":"The operator user id associated with the failing delivery","x-doc":{"text":"The operator user id associated with the failing delivery"}},"type":{"type":"string","nullable":true,"description":"The operator third type","x-doc":{"text":"The operator third type"}}},"required":["userId"],"additionalProperties":false,"description":"The operator context","x-doc":{"text":"The operator context"}}},"required":["error","operatorData"],"additionalProperties":false}},"required":["eventType","payload"],"additionalProperties":false},{"type":"object","properties":{"eventType":{"type":"string","enum":["OUTBOUND_STATUS_NOT_DELIVERED"]},"payload":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"anyOf":[{"type":"string"},{"type":"number"}],"nullable":true,"description":"Error code returned by the platform adapter","x-doc":{"text":"Error code returned by the platform adapter"}},"statusCode":{"anyOf":[{"type":"string"},{"type":"number"}],"nullable":true,"description":"HTTP status code returned by the platform","x-doc":{"text":"HTTP status code returned by the platform"}},"statusMessage":{"type":"string","nullable":true,"description":"Human-readable error message","x-doc":{"text":"Human-readable error message"}},"details":{"description":"Raw platform response / distribution error details","x-doc":{"text":"Raw platform response / distribution error details"}}},"additionalProperties":false,"description":"The delivery error","x-doc":{"text":"The delivery error"}},"operatorData":{"type":"object","properties":{"userId":{"type":"string","description":"The operator user id associated with the failing delivery","x-doc":{"text":"The operator user id associated with the failing delivery"}},"type":{"type":"string","nullable":true,"description":"The operator third type","x-doc":{"text":"The operator third type"}}},"required":["userId"],"additionalProperties":false,"description":"The operator context","x-doc":{"text":"The operator context"}}},"required":["error","operatorData"],"additionalProperties":false}},"required":["eventType","payload"],"additionalProperties":false},{"type":"object","properties":{"eventType":{"type":"string","enum":["EREPORTING_TRANSACTION_ATTACHED"]},"payload":{"type":"object","properties":{"reportId":{"type":"string","format":"uuid","description":"The ID of the Report this transaction/payment is attached to","x-doc":{"text":"The ID of the Report this transaction/payment is attached to"}},"fluxType":{"type":"string","description":"The e-reporting flux type (e.g., 10.1, 10.2, 10.3, 10.4)","x-doc":{"text":"The e-reporting flux type (e.g., 10.1, 10.2, 10.3, 10.4)"}},"period":{"type":"object","properties":{"startDate":{"type":"string","description":"Period start date in ISO 8601 format","x-doc":{"text":"Period start date in ISO 8601 format"}},"endDate":{"type":"string","description":"Period end date in ISO 8601 format","x-doc":{"text":"Period end date in ISO 8601 format"}}},"required":["startDate","endDate"],"additionalProperties":false,"description":"The reporting period this transaction/payment is attached to","x-doc":{"text":"The reporting period this transaction/payment is attached to"}},"timestamp":{"type":"string","description":"Event timestamp in ISO 8601 format","x-doc":{"text":"Event timestamp in ISO 8601 format"}}},"required":["reportId","fluxType","period","timestamp"],"additionalProperties":false}},"required":["eventType","payload"],"additionalProperties":false},{"type":"object","properties":{"eventType":{"type":"string","enum":["EREPORTING_PAYMENT_ATTACHED"]},"payload":{"type":"object","properties":{"reportId":{"type":"string","format":"uuid","description":"The ID of the Report this transaction/payment is attached to","x-doc":{"text":"The ID of the Report this transaction/payment is attached to"}},"fluxType":{"type":"string","description":"The e-reporting flux type (e.g., 10.1, 10.2, 10.3, 10.4)","x-doc":{"text":"The e-reporting flux type (e.g., 10.1, 10.2, 10.3, 10.4)"}},"period":{"type":"object","properties":{"startDate":{"type":"string","description":"Period start date in ISO 8601 format","x-doc":{"text":"Period start date in ISO 8601 format"}},"endDate":{"type":"string","description":"Period end date in ISO 8601 format","x-doc":{"text":"Period end date in ISO 8601 format"}}},"required":["startDate","endDate"],"additionalProperties":false,"description":"The reporting period this transaction/payment is attached to","x-doc":{"text":"The reporting period this transaction/payment is attached to"}},"timestamp":{"type":"string","description":"Event timestamp in ISO 8601 format","x-doc":{"text":"Event timestamp in ISO 8601 format"}}},"required":["reportId","fluxType","period","timestamp"],"additionalProperties":false}},"required":["eventType","payload"],"additionalProperties":false},{"type":"object","properties":{"eventType":{"type":"string","enum":["EREPORTING_PERIOD_OPENED"]},"payload":{"type":"object","properties":{"businessEntityId":{"type":"string","description":"The business entity (SIREN) for which the period opened or closed","x-doc":{"text":"The business entity (SIREN) for which the period opened or closed"}},"startDate":{"type":"string","description":"Period start date in ISO 8601 format","x-doc":{"text":"Period start date in ISO 8601 format"}},"endDate":{"type":"string","description":"Period end date in ISO 8601 format","x-doc":{"text":"Period end date in ISO 8601 format"}},"autoCloseDate":{"type":"string","description":"Scheduled auto-closure date in ISO 8601 format","x-doc":{"text":"Scheduled auto-closure date in ISO 8601 format"}},"timestamp":{"type":"string","description":"Event timestamp in ISO 8601 format","x-doc":{"text":"Event timestamp in ISO 8601 format"}}},"required":["businessEntityId","startDate","endDate","autoCloseDate","timestamp"],"additionalProperties":false}},"required":["eventType","payload"],"additionalProperties":false},{"type":"object","properties":{"eventType":{"type":"string","enum":["EREPORTING_PERIOD_CLOSED"]},"payload":{"type":"object","properties":{"businessEntityId":{"type":"string","description":"The business entity (SIREN) for which the period opened or closed","x-doc":{"text":"The business entity (SIREN) for which the period opened or closed"}},"startDate":{"type":"string","description":"Period start date in ISO 8601 format","x-doc":{"text":"Period start date in ISO 8601 format"}},"endDate":{"type":"string","description":"Period end date in ISO 8601 format","x-doc":{"text":"Period end date in ISO 8601 format"}},"autoCloseDate":{"type":"string","description":"Scheduled auto-closure date in ISO 8601 format","x-doc":{"text":"Scheduled auto-closure date in ISO 8601 format"}},"timestamp":{"type":"string","description":"Event timestamp in ISO 8601 format","x-doc":{"text":"Event timestamp in ISO 8601 format"}}},"required":["businessEntityId","startDate","endDate","autoCloseDate","timestamp"],"additionalProperties":false}},"required":["eventType","payload"],"additionalProperties":false},{"type":"object","properties":{"eventType":{"type":"string","enum":["EREPORTING_ERROR"]},"payload":{"type":"object","properties":{"rejectionDetail":{"type":"object","properties":{"reason":{"type":"string","description":"The value depends on `documentStatus.code`:\n\n- **REJECTED**: one of `VALIDATION_FAILURE`, `INVALID_SIGNATURE`, `ROUTING_FAILURE`, `DUPLICATED_INVOICE`, `SENDING_FAILURE`, `TOTAL_AMOUNT_INCORRECT`, `CALCULATION_ERROR`, `DUPLICATE_INVOICE`, `EINVOICING_ADDRESS_INCORRECT`, `B2G_CHECKS_FAILURE`, `ATTACHMENT_REFERENCE_ERROR`, `ATTACHMENT_ASSOCIATION_ERROR`\n- **UNACCEPTABLE**: flux-specific codes (`EMPTY_FILE`, `INVALID_FILE_TYPE`, `SYNTAX_ERROR`, `ATTACHMENT_SIZE_EXCEEDED`, `INVALID_ATTACHMENT_NAME`, `EMPTY_ATTACHMENT`, `INVALID_ATTACHMENT_EXTENSION`, `FILE_SIZE_EXCEEDED`, `ANTIVIRUS_FAILURE`)\n- **REFUSED / DISPUTED / SUSPENDED / PARTIALLY_APPROVED**: a reason chosen by the recipient — see the `rejectionDetail.reason` enum of `POST /v1/invoice/{invoiceId}/status` (e.g. `DUPLICATE_INVOICE`, `OTHER`, …)\n\n⚠️ `DUPLICATED_INVOICE` (REJECTED — the invoice already exists with the same identifier) and `DUPLICATE_INVOICE` (REFUSED / DISPUTED — rejected by the recipient) are two distinct codes.","x-doc":{"text":"Rejection reason","more":"The value depends on `documentStatus.code`:\n\n- **REJECTED**: one of `VALIDATION_FAILURE`, `INVALID_SIGNATURE`, `ROUTING_FAILURE`, `DUPLICATED_INVOICE`, `SENDING_FAILURE`, `TOTAL_AMOUNT_INCORRECT`, `CALCULATION_ERROR`, `DUPLICATE_INVOICE`, `EINVOICING_ADDRESS_INCORRECT`, `B2G_CHECKS_FAILURE`, `ATTACHMENT_REFERENCE_ERROR`, `ATTACHMENT_ASSOCIATION_ERROR`\n- **UNACCEPTABLE**: flux-specific codes (`EMPTY_FILE`, `INVALID_FILE_TYPE`, `SYNTAX_ERROR`, `ATTACHMENT_SIZE_EXCEEDED`, `INVALID_ATTACHMENT_NAME`, `EMPTY_ATTACHMENT`, `INVALID_ATTACHMENT_EXTENSION`, `FILE_SIZE_EXCEEDED`, `ANTIVIRUS_FAILURE`)\n- **REFUSED / DISPUTED / SUSPENDED / PARTIALLY_APPROVED**: a reason chosen by the recipient — see the `rejectionDetail.reason` enum of `POST /v1/invoice/{invoiceId}/status` (e.g. `DUPLICATE_INVOICE`, `OTHER`, …)\n\n⚠️ `DUPLICATED_INVOICE` (REJECTED — the invoice already exists with the same identifier) and `DUPLICATE_INVOICE` (REFUSED / DISPUTED — rejected by the recipient) are two distinct codes."}},"message":{"type":"string"},"errors":{"type":"array","items":{"type":"object","properties":{"reason":{"type":"string","enum":["SCHEMA","BUSINESS"]},"message":{"type":"string"},"rule":{"type":"string"},"location":{"type":"string"}},"required":["message"],"additionalProperties":false}}},"required":["reason","message"],"additionalProperties":false,"description":"Why the submitted transaction or payment was rejected","x-doc":{"text":"Why the submitted transaction or payment was rejected"}}},"required":["rejectionDetail"],"additionalProperties":false}},"required":["eventType","payload"],"additionalProperties":false},{"type":"object","properties":{"eventType":{"type":"string","enum":["PEPPOL_MIGRATION_COMPLETED"]},"payload":{"type":"object","properties":{"electronicAddress":{"type":"string","description":"The electronic address that finished migrating, `{identifierScheme}:{identifierValue}`","x-doc":{"text":"The electronic address that finished migrating, `{identifierScheme}:{identifierValue}`"}},"entityName":{"type":"string","description":"The name of the business entity whose electronic address migrated","x-doc":{"text":"The name of the business entity whose electronic address migrated"}}},"required":["electronicAddress","entityName"],"additionalProperties":false}},"required":["eventType","payload"],"additionalProperties":false}]}]},"examples":{"invoiceInvalid":{"summary":"Invalid Invoice Event (INVOICE_INBOUND_INVALID)","description":"Notification sent when an invalid inbound invoice is received and destined for this operator.","value":{"eventId":"6d512785-9948-44ec-bf66-8665d6735460","eventType":"INVOICE_INBOUND_INVALID","timestamp":"2024-01-15T10:30:00.000Z","referencedObject":{"type":"INVOICE","id":"550e8400-e29b-41d4-a716-446655440000"},"payload":{"businessData":{"seller":{"name":"ACME Corporation","siret":"12345678900001","electronicAddress":"0009:12345678900001"},"buyer":{"name":"Buyer Company","siret":"98765432100001","electronicAddress":"0009:98765432100001"},"invoiceId":"INV-2024-001"},"validationErrors":[{"source":"invoice-validator","schematronValidationErrors":[{"id":"BR-01","test":"count(cbc:InvoiceNumber) = 1","text":"An Invoice shall have an Invoice number","location":"/ubl:Invoice"}]}]}},"x-doc":{"text":"Notification sent when an invalid inbound invoice is received and destined for this operator."}},"outboundInvoiceNotDelivered":{"summary":"Outbound Invoice Not Delivered Event (OUTBOUND_INVOICE_NOT_DELIVERED)","description":"Notification sent when an outbound invoice could not be delivered to the platform.","value":{"eventId":"9e3b2f4a-1c2d-4e5f-8a6b-7c8d9e0f1a2b","eventType":"OUTBOUND_INVOICE_NOT_DELIVERED","timestamp":"2024-01-15T10:30:00.000Z","referencedObject":{"type":"INVOICE","id":"550e8400-e29b-41d4-a716-446655440000"},"payload":{"error":{"code":"DELIVERY_ERROR","statusCode":502,"statusMessage":"Bad Gateway","details":{}},"operatorData":{"userId":"operator-user-id","type":"THIRD_TYPE"}}},"x-doc":{"text":"Notification sent when an outbound invoice could not be delivered to the platform."}},"outboundStatusNotDelivered":{"summary":"Outbound Status Not Delivered Event (OUTBOUND_STATUS_NOT_DELIVERED)","description":"Notification sent when an outbound status could not be delivered to the platform.","value":{"eventId":"3a4b5c6d-7e8f-49a0-b1c2-d3e4f5a6b7c8","eventType":"OUTBOUND_STATUS_NOT_DELIVERED","timestamp":"2024-01-15T10:30:00.000Z","referencedObject":{"type":"STATUS","id":"550e8400-e29b-41d4-a716-446655440001"},"payload":{"error":{"code":"DELIVERY_ERROR","statusCode":502,"statusMessage":"Bad Gateway","details":{}},"operatorData":{"userId":"operator-user-id","type":"THIRD_TYPE"}}},"x-doc":{"text":"Notification sent when an outbound status could not be delivered to the platform."}},"peppolMigrationCompleted":{"summary":"Peppol Migration Completed Event (PEPPOL_MIGRATION_COMPLETED)","description":"Notification sent when an electronic address finished migrating to another platform. Delivered to the operator that requested the migration key","value":{"eventId":"4b5c6d7e-8f90-4a1b-b2c3-d4e5f6a7b8c9","eventType":"PEPPOL_MIGRATION_COMPLETED","timestamp":"2024-01-15T03:00:12.031Z","referencedObject":{"type":"BUSINESS_ENTITY","id":"550e8400-e29b-41d4-a716-446655440002"},"payload":{"electronicAddress":"0002:123456789","entityName":"ACME SAS"}},"x-doc":{"text":"Notification sent when an electronic address finished migrating to another platform. Delivered to the operator that requested the migration key"}},"ereportingTransactionAttached":{"summary":"🚧 Work In Progress — E-reporting Transaction Attached Event (EREPORTING_TRANSACTION_ATTACHED)","description":"Notification sent when a transaction is attached to a reporting period.","value":{"eventId":"a1b2c3d4-e5f6-47a8-9b0c-1d2e3f4a5b6c","eventType":"EREPORTING_TRANSACTION_ATTACHED","timestamp":"2024-01-15T10:30:00.000Z","referencedObject":{"type":"TRANSACTION","id":"550e8400-e29b-41d4-a716-446655440002"},"payload":{"reportId":"b2c3d4e5-f6a7-48b9-0c1d-2e3f4a5b6c7d","fluxType":"10.1","period":{"startDate":"2024-01-01T00:00:00.000Z","endDate":"2024-01-31T23:59:59.999Z"},"timestamp":"2024-01-15T10:30:00.000Z"}},"x-doc":{"text":"Notification sent when a transaction is attached to a reporting period."}},"ereportingPaymentAttached":{"summary":"🚧 Work In Progress — E-reporting Payment Attached Event (EREPORTING_PAYMENT_ATTACHED)","description":"Notification sent when a payment is attached to a reporting period.","value":{"eventId":"c3d4e5f6-a7b8-49ca-1d2e-3f4a5b6c7d8e","eventType":"EREPORTING_PAYMENT_ATTACHED","timestamp":"2024-01-15T10:30:00.000Z","referencedObject":{"type":"PAYMENT","id":"550e8400-e29b-41d4-a716-446655440003"},"payload":{"reportId":"b2c3d4e5-f6a7-48b9-0c1d-2e3f4a5b6c7d","fluxType":"10.2","period":{"startDate":"2024-01-01T00:00:00.000Z","endDate":"2024-01-31T23:59:59.999Z"},"timestamp":"2024-01-15T10:30:00.000Z"}},"x-doc":{"text":"Notification sent when a payment is attached to a reporting period."}},"ereportingError":{"summary":"🚧 Work In Progress — E-reporting Validation Error Event (EREPORTING_ERROR)","description":"🚧 Work In Progress. Notification sent when a submitted transaction or payment fails validation before it can be attached to a Report. Mirrors the rejection shape used by the `status` callback (see `rejectionDetail` there) rather than a flat error list.","value":{"eventId":"a7b8c9da-e0f1-42fd-4a5b-6c7d8e9fa0b1","eventType":"EREPORTING_ERROR","timestamp":"2024-01-15T10:30:00.000Z","referencedObject":{"type":"TRANSACTION","id":"550e8400-e29b-41d4-a716-446655440002"},"payload":{"rejectionDetail":{"reason":"VALIDATION_FAILURE","message":"The transaction was rejected because it failed validation","errors":[{"reason":"SCHEMA","message":"Example validation error detail","rule":"FX-SCH-A-000130","location":"NA"}]}}},"x-doc":{"text":"🚧 Work In Progress. Notification sent when a submitted transaction or payment fails validation before it can be attached to a Report. Mirrors the rejection shape used by the `status` callback (see `rejectionDetail` there) rather than a flat error list."}},"ereportingPeriodOpened":{"summary":"🚧 Work In Progress — E-reporting Period Opened Event (EREPORTING_PERIOD_OPENED)","description":"🚧 Work In Progress. Notification sent when an e-reporting period opens.","value":{"eventId":"e5f6a7b8-c9da-41ec-3f4a-5b6c7d8e9fa0","eventType":"EREPORTING_PERIOD_OPENED","timestamp":"2024-01-15T10:30:00.000Z","referencedObject":{"type":"REPORT","id":"c3d4e5f6-a7b8-49ca-1d2e-3f4a5b6c7d8e"},"payload":{"businessEntityId":"12345678901234","startDate":"2024-01-01T00:00:00.000Z","endDate":"2024-01-31T23:59:59.999Z","autoCloseDate":"2024-02-02T23:59:59.999Z","timestamp":"2024-01-15T10:30:00.000Z"}},"x-doc":{"text":"🚧 Work In Progress. Notification sent when an e-reporting period opens."}},"ereportingPeriodClosed":{"summary":"🚧 Work In Progress — E-reporting Period Closed Event (EREPORTING_PERIOD_CLOSED)","description":"🚧 Work In Progress. Notification sent when an e-reporting period closes.","value":{"eventId":"f6a7b8c9-dae0-42fd-4a5b-6c7d8e9fa0b1","eventType":"EREPORTING_PERIOD_CLOSED","timestamp":"2024-02-02T10:30:00.000Z","referencedObject":{"type":"REPORT","id":"c3d4e5f6-a7b8-49ca-1d2e-3f4a5b6c7d8e"},"payload":{"businessEntityId":"12345678901234","startDate":"2024-01-01T00:00:00.000Z","endDate":"2024-01-31T23:59:59.999Z","autoCloseDate":"2024-02-02T23:59:59.999Z","timestamp":"2024-02-02T10:30:00.000Z"}},"x-doc":{"text":"🚧 Work In Progress. Notification sent when an e-reporting period closes."}}}}}},"responses":{"200":{"description":"Return any HTTP **2xx** code to acknowledge receipt.","x-doc":{"text":"Return any HTTP **2xx** code to acknowledge receipt."}},"204":{"description":"No content. Valid acknowledgment of receipt.","x-doc":{"text":"No content. Valid acknowledgment of receipt."}}},"x-doc":{"text":"Callback invoked by the platform to **notify the operator** about **generic events**.\n\n> 🎯 **Event Types**\n> - `INVOICE_INBOUND_INVALID` - Notifies when an invalid inbound invoice is received\n> - `OUTBOUND_INVOICE_NOT_DELIVERED` - Notifies when an outbound invoice could not be delivered to the platform\n> - `OUTBOUND_STATUS_NOT_DELIVERED` - Notifies when an outbound status could not be delivered to the platform\n> - `PEPPOL_MIGRATION_COMPLETED` - Notifies when an electronic address you handed a migration key for finished migrating to the new platform\n> - `EREPORTING_TRANSACTION_ATTACHED` 🚧 *(Work In Progress)* - Notifies when a transaction is attached to a Report\n> - `EREPORTING_PAYMENT_ATTACHED` 🚧 *(Work In Progress)* - Notifies when a payment is attached to a Report\n> - `EREPORTING_ERROR` 🚧 *(Work In Progress)* - Notifies when a submitted transaction or payment fails validation\n> - `EREPORTING_PERIOD_OPENED` 🚧 *(Work In Progress)* - Notifies when an e-reporting period opens\n> - `EREPORTING_PERIOD_CLOSED` 🚧 *(Work In Progress)* - Notifies when an e-reporting period closes\n>\n> ✅ **Requirements**\n> - Return HTTP **2xx** to acknowledge receipt\n> - Response body must be **empty** or **valid JSON** (no plain text)\n> - Must respond within **60 seconds**\n"}}}}},"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"filterStreamDirection":{"type":"string","nullable":true,"enum":["OUTBOUND","INBOUND"],"description":"Optional direction filter for the webhook stream (bidirectional if null or omitted).","x-doc":{"text":"Optional direction filter for the webhook stream (bidirectional if null or omitted).","array":[{"code":"OUTBOUND","label":"An invoice or status issued to a customer or client"},{"code":"INBOUND","label":"An invoice or status received from a supplier or vendor"}]}},"status":{"type":"string","enum":["ACTIVE","INACTIVE"],"default":"ACTIVE","description":"Status of the webhook, either ACTIVE or INACTIVE","x-doc":{"text":"Status of the webhook, either ACTIVE or INACTIVE"}},"adapterCode":{"type":"string","default":"standardAdapter","description":"The adapter code to use for the webhook, default is \"standardAdapter\"","x-doc":{"text":"The adapter code to use for the webhook, default is \"standardAdapter\""}},"label":{"type":"string","minLength":3,"description":"An optional label for the webhook","x-doc":{"text":"An optional label for the webhook"}},"interopData":{"type":"object","properties":{"endpoints":{"type":"object","properties":{"status":{"type":"object","properties":{"callbackUrl":{"type":"string","format":"uri","description":"The callback URL for status updates","x-doc":{"text":"The callback URL for status updates"}},"idPath":{"type":"string","description":"The json field in the response to be used as external id (under format fieldA.fieldB...","x-doc":{"text":"The json field in the response to be used as external id (under format fieldA.fieldB..."}}},"required":["callbackUrl"],"description":"Endpoints related to status updates","x-doc":{"text":"Endpoints related to status updates"}},"invoice":{"type":"object","properties":{"callbackUrl":{"type":"string","format":"uri","description":"The callback URL for invoice data","x-doc":{"text":"The callback URL for invoice data"}},"idPath":{"type":"string","description":"The json field in the response to be used as external id (under format fieldA.fieldB...","x-doc":{"text":"The json field in the response to be used as external id (under format fieldA.fieldB..."}}},"required":["callbackUrl"],"description":"Endpoints related to invoices","x-doc":{"text":"Endpoints related to invoices"}},"onboarding":{"type":"object","properties":{"callbackUrl":{"type":"string","format":"uri","description":"The callback URL for the onboarding events","x-doc":{"text":"The callback URL for the onboarding events"}},"stages":{"type":"array","items":{"type":"string","enum":["STARTED","ACTION_REQUIRED","ACCEPTED","IDENTITY_CHECK_STARTED","IDENTITY_CHECK_SUBMITTED","IDENTITY_CHECK_ACTION_REQUIRED","IDENTITY_CHECK_ACCEPTED","BUSINESS_VERIFICATION_STARTED","BUSINESS_VERIFICATION_ACTION_REQUIRED","BUSINESS_VERIFICATION_ACCEPTED","MANDATE_SIGNED","ELECTRONIC_ADDRESS_MIGRATION","REGISTERING","REGISTERED","COMPLETED","CANCELLED","REOPEN"],"description":"Onboarding stage.","x-doc":{"text":"Onboarding stage.","array":[{"code":"STARTED","label":"The customer has started the onboarding process."},{"code":"ACTION_REQUIRED","label":"The onboarding process requires manual review or action before it can continue."},{"code":"ACCEPTED","label":"Replaced by REGISTERING but still sent.","deprecated":true},{"code":"IDENTITY_CHECK_STARTED","label":"The customer has started the identity check stage of the onboarding process."},{"code":"IDENTITY_CHECK_SUBMITTED","label":"Replaced by IDENTITY_CHECK_ACTION_REQUIRED but still sent.","deprecated":true},{"code":"IDENTITY_CHECK_ACTION_REQUIRED","label":"The customer has completed the identity check stage, but the identity requires manual review and approval."},{"code":"IDENTITY_CHECK_ACCEPTED","label":"The customer's identity has been successfully verified and accepted."},{"code":"BUSINESS_VERIFICATION_STARTED","label":"The business verification (KYB) process has started."},{"code":"BUSINESS_VERIFICATION_ACTION_REQUIRED","label":"The customer has submitted all required KYB evidences and the business verification requires manual review and approval."},{"code":"BUSINESS_VERIFICATION_ACCEPTED","label":"The business verification (KYB) has been successfully validated and accepted."},{"code":"MANDATE_SIGNED","label":"The customer has signed the mandate."},{"code":"ELECTRONIC_ADDRESS_MIGRATION","label":"At least one of the customer electronic addresses is held by another platform and requires a change-of-PA request. The deliverables to file with each outgoing platform are available for download."},{"code":"REGISTERING","label":"Electronic addresses are currently in the process of being registered on the necessary networks."},{"code":"REGISTERED","label":"All electronic addresses have now been registered on the necessary networks."},{"code":"COMPLETED","label":"The onboarding process is fully completed. This event marks the end of the onboarding lifecycle."},{"code":"CANCELLED","label":"The onboarding process has been cancelled before completion."},{"code":"REOPEN","label":"The onboarding process was reopened after manual review."}]}},"description":"The onboarding stages to subscribe to for callback events.","x-doc":{"text":"The onboarding stages to subscribe to for callback events."}}},"required":["callbackUrl"],"description":"Endpoints related to onboarding","x-doc":{"text":"Endpoints related to onboarding"}},"events":{"type":"object","nullable":true,"properties":{"callbackUrl":{"type":"string","format":"uri","description":"The callback URL for generic operator events","x-doc":{"text":"The callback URL for generic operator events"}},"subscribedEvents":{"type":"array","items":{"type":"string","enum":["INVOICE_INBOUND_INVALID","OUTBOUND_INVOICE_NOT_DELIVERED","OUTBOUND_STATUS_NOT_DELIVERED","PEPPOL_MIGRATION_COMPLETED","EREPORTING_TRANSACTION_ATTACHED","EREPORTING_PAYMENT_ATTACHED","EREPORTING_PERIOD_OPENED","EREPORTING_PERIOD_CLOSED","EREPORTING_ERROR"],"description":"Type of operator event","x-doc":{"text":"Type of operator event"}},"description":"List of event types to subscribe to","x-doc":{"text":"List of event types to subscribe to","array":[{"code":"INVOICE_INBOUND_INVALID","label":"An inbound invoice that failed validation"},{"code":"OUTBOUND_INVOICE_NOT_DELIVERED","label":"An outbound invoice that could not be delivered to the platform"},{"code":"OUTBOUND_STATUS_NOT_DELIVERED","label":"An outbound status that could not be delivered to the platform"},{"code":"PEPPOL_MIGRATION_COMPLETED","label":"An end-user's electronic address finished migrating to another platform"},{"code":"EREPORTING_TRANSACTION_ATTACHED","label":"🚧 Work In Progress - A transaction has been attached to a Report"},{"code":"EREPORTING_PAYMENT_ATTACHED","label":"🚧 Work In Progress - A payment has been attached to a Report"},{"code":"EREPORTING_PERIOD_OPENED","label":"🚧 Work In Progress - An e-reporting period has opened"},{"code":"EREPORTING_PERIOD_CLOSED","label":"🚧 Work In Progress - An e-reporting period has closed"},{"code":"EREPORTING_ERROR","label":"🚧 Work In Progress - A submitted transaction or payment failed validation"}]}}},"required":["callbackUrl"],"description":"Endpoints related to generic operator events (e.g., invalid invoices). Set to null to remove.","x-doc":{"text":"Endpoints related to generic operator events (e.g., invalid invoices). Set to null to remove."}},"authentication":{"type":"object","properties":{"basic":{"type":"object","properties":{"username":{"type":"string","description":"The username for basic authentication.","x-doc":{"text":"The username for basic authentication."}},"password":{"type":"string","minLength":12,"maxLength":256,"description":"The password for basic authentication.","x-doc":{"text":"The password for basic authentication."}}},"required":["username","password"]},"hmac":{"type":"object","properties":{"secretKey":{"type":"string","minLength":32,"maxLength":512}},"required":["secretKey"],"description":"Requests are signed with an HMAC-SHA256 signature.","x-doc":{"text":"Requests are signed with an HMAC-SHA256 signature.","valueDescription":"min: 32 char","more":"- Canonical string format is: `{timestamp}\\n{HTTP_METHOD}\\n{path_with_query}\\n{checksum}`\n  * `timestamp` → UNIX epoch in milliseconds (sent as `X-Timestamp`)\n  * `HTTP_METHOD` → request method in uppercase (e.g., `POST`)\n  * `path_with_query` → URL path + query string (e.g., `/webhook/notify?type=invoice`)\n  * `checksum` → SHA-256 hex digest of the payload (`file` field for multipart or body for `application/json`)"}},"oauth2Password":{"type":"object","properties":{"callbackUrl":{"type":"string","format":"uri","description":"The URL where the token will be fetched.","x-doc":{"text":"The URL where the token will be fetched."}},"clientId":{"type":"string","description":"The client ID.","x-doc":{"text":"The client ID."}},"clientSecret":{"type":"string","minLength":24,"maxLength":512,"description":"The client secret.","x-doc":{"text":"The client secret."}},"username":{"type":"string","description":"The username (resource owner).","x-doc":{"text":"The username (resource owner)."}},"password":{"type":"string","description":"The password (resource owner).","x-doc":{"text":"The password (resource owner)."}},"scope":{"type":"string","nullable":true,"description":"The requested OAuth2 scopes (space-separated).","x-doc":{"text":"The requested OAuth2 scopes (space-separated)."}}},"required":["callbackUrl","clientId","clientSecret","username","password"]},"oauth2ClientCredentials":{"type":"object","properties":{"callbackUrl":{"type":"string","format":"uri","description":"The URL where the token will be fetched.","x-doc":{"text":"The URL where the token will be fetched."}},"clientId":{"type":"string","description":"The client ID.","x-doc":{"text":"The client ID."}},"clientSecret":{"type":"string","minLength":24,"maxLength":512,"description":"The client secret.","x-doc":{"text":"The client secret."}},"scope":{"type":"string","nullable":true,"description":"The requested OAuth2 scopes (space-separated).","x-doc":{"text":"The requested OAuth2 scopes (space-separated)."}}},"required":["callbackUrl","clientId","clientSecret"]},"perRequestHeaders":{"type":"object","properties":{"ocpApimSubscriptionKey":{"type":"string","description":"Required HTTP header in Azure API Management that provides the subscription key for authenticating API calls.","x-doc":{"text":"Required HTTP header in Azure API Management that provides the subscription key for authenticating API calls."}}}}},"description":"Authentication mechanisms for webhooks","x-doc":{"text":"Authentication mechanisms for webhooks"}}},"description":"The endpoints related to webhooks","x-doc":{"text":"The endpoints related to webhooks"}},"workflowConfig":{"type":"object","additionalProperties":{"nullable":true}}},"required":["endpoints"],"description":"The interop data that configures webhook behavior and requires endpoints","x-doc":{"text":"The interop data that configures webhook behavior and requires endpoints"}}},"required":["interopData"],"additionalProperties":false,"description":"The model representing a webhook configuration","x-doc":{"text":"The model representing a webhook configuration"}},"examples":{"webHookPostExampleNoAuthBody":{"summary":"↔️ Simplest webhook. No authentication (inbound/outbound)","value":{"label":"My simple webhook configuration","adapterCode":"sandboxAdapter","interopData":{"endpoints":{"status":{"callbackUrl":"https://myenpoint.com/status"},"invoice":{"callbackUrl":"https://myenpoint.com/invoice"}}}}},"webHookPostExampleOAuth2ClientCredentialBody":{"summary":"↔️ Webhook. OAuth2 client credentials authentication (inbound/outbound)","value":{"label":"My webhook configuration with client credentials auth","adapterCode":"sandboxAdapter","interopData":{"endpoints":{"status":{"callbackUrl":"https://myenpoint.com/status"},"invoice":{"callbackUrl":"https://myenpoint.com/invoice"},"authentication":{"oauth2ClientCredentials":{"callbackUrl":"https://myauthorizationServer.com/auth","clientId":"myClientId","clientSecret":"myClientSecret","scope":"myScope"}}}}}},"webHookPostExampleHmacAuthBody":{"summary":"↔️ Webhook. Hmac authentication. (inbound/outbound)","value":{"label":"My webhook configuration with hmac auth","adapterCode":"sandboxAdapter","interopData":{"endpoints":{"status":{"callbackUrl":"https://myenpoint.com/status"},"invoice":{"callbackUrl":"https://myenpoint.com/invoice"},"authentication":{"hmac":{"secretKey":"9f3c5a77b1a0e4b7c2a8c9d7f8e4a65c6d5b7a9e8c2f3d6a1c9b7e8a2d5f6c7"}}}}}},"webHookPostExampleOAuth2PasswordBody":{"summary":"↔️ Webhook. OAuth2 password grant authentication. (inbound/outbound)","value":{"label":"My webhook configuration with oauth2 password auth","adapterCode":"sandboxAdapter","interopData":{"endpoints":{"status":{"callbackUrl":"https://myenpoint.com/status"},"invoice":{"callbackUrl":"https://myenpoint.com/invoice"},"authentication":{"oauth2Password":{"callbackUrl":"https://myauthorizationServer.com/auth","clientId":"myClientId","clientSecret":"myClientSecret","username":"myUsername","password":"myPassword","scope":"myScope"}}}}}},"webHookPostExampleBasicAuthBody":{"summary":"↔️ Webhook. Basic authentication (inbound/outbound)","value":{"label":"My webhook configuration with basic auth","adapterCode":"sandboxAdapter","interopData":{"endpoints":{"status":{"callbackUrl":"https://myenpoint.com/status"},"authentication":{"basic":{"username":"test","password":"myStrongPassword"}}}}}},"onboardingWebHookPostExampleNoAuthBody":{"summary":"↔️ Simplest webhook. No authentication. With Onboarding (inbound/outbound)","value":{"label":"My simple onboarding webhook configuration","adapterCode":"sandboxAdapter","interopData":{"endpoints":{"status":{"callbackUrl":"https://myenpoint.com/status"},"invoice":{"callbackUrl":"https://myenpoint.com/invoice"},"onboarding":{"callbackUrl":"https://myenpoint.com/onboarding","stages":["STARTED","IDENTITY_CHECK_STARTED","IDENTITY_CHECK_SUBMITTED","IDENTITY_CHECK_ACTION_REQUIRED","IDENTITY_CHECK_ACCEPTED","BUSINESS_VERIFICATION_STARTED","BUSINESS_VERIFICATION_ACTION_REQUIRED","BUSINESS_VERIFICATION_ACCEPTED","MANDATE_SIGNED","ELECTRONIC_ADDRESS_MIGRATION","REGISTERING","REGISTERED","COMPLETED","CANCELLED"]}}}}},"onboardingWebHookPostExampleHmacBody":{"summary":"↔️ Simplest webhook. Hmac authentication. With Onboarding (inbound/outbound)","value":{"label":"My simple onboarding webhook configuration","adapterCode":"sandboxAdapter","interopData":{"endpoints":{"status":{"callbackUrl":"https://myenpoint.com/status"},"invoice":{"callbackUrl":"https://myenpoint.com/invoice"},"onboarding":{"callbackUrl":"https://myenpoint.com/onboarding","stages":["STARTED","IDENTITY_CHECK_STARTED","IDENTITY_CHECK_SUBMITTED","IDENTITY_CHECK_ACTION_REQUIRED","IDENTITY_CHECK_ACCEPTED","BUSINESS_VERIFICATION_STARTED","BUSINESS_VERIFICATION_ACTION_REQUIRED","BUSINESS_VERIFICATION_ACCEPTED","MANDATE_SIGNED","ELECTRONIC_ADDRESS_MIGRATION","REGISTERING","REGISTERED","COMPLETED","CANCELLED"]},"authentication":{"hmac":{"secretKey":"9f3c5a77b1a0e4b7c2a8c9d7f8e4a65c6d5b7a9e8c2f3d6a1c9b7e8a2d5f6c7"}}}}}},"webHookPostExampleHmacAuthInboundOnlyBody":{"summary":"⬅️ Webhook. Hmac authentication. (inbound only)","value":{"filterStreamDirection":"INBOUND","label":"My webhook configuration with hmac auth","adapterCode":"sandboxAdapter","interopData":{"endpoints":{"status":{"callbackUrl":"https://myenpoint.com/status"},"invoice":{"callbackUrl":"https://myenpoint.com/invoice"},"authentication":{"hmac":{"secretKey":"9f3c5a77b1a0e4b7c2a8c9d7f8e4a65c6d5b7a9e8c2f3d6a1c9b7e8a2d5f6c7"}}}}}},"webHookPostExampleHmacAuthOutboundOnlyBody":{"summary":"➡️ Webhook. Hmac authentication. (outbound only)","value":{"filterStreamDirection":"OUTBOUND","label":"My webhook configuration with hmac auth","adapterCode":"sandboxAdapter","interopData":{"endpoints":{"status":{"callbackUrl":"https://myenpoint.com/status"},"authentication":{"hmac":{"secretKey":"9f3c5a77b1a0e4b7c2a8c9d7f8e4a65c6d5b7a9e8c2f3d6a1c9b7e8a2d5f6c7"}}}}}},"webHookPostExampleWithEventsBody":{"summary":"↔️ Webhook with operator events notifications (INVOICE_INBOUND_INVALID)","value":{"label":"My webhook configuration with events notifications","adapterCode":"sandboxAdapter","interopData":{"endpoints":{"status":{"callbackUrl":"https://myenpoint.com/status"},"invoice":{"callbackUrl":"https://myenpoint.com/invoice"},"events":{"callbackUrl":"https://myenpoint.com/events","subscribedEvents":["INVOICE_INBOUND_INVALID"]},"authentication":{"hmac":{"secretKey":"9f3c5a77b1a0e4b7c2a8c9d7f8e4a65c6d5b7a9e8c2f3d6a1c9b7e8a2d5f6c7"}}}}}},"webHookPostExampleWithAllEventsBody":{"summary":"↔️ Webhook with all operator events (subscribe to all event types)","value":{"label":"My webhook configuration with all events","adapterCode":"sandboxAdapter","interopData":{"endpoints":{"status":{"callbackUrl":"https://myenpoint.com/status"},"invoice":{"callbackUrl":"https://myenpoint.com/invoice"},"events":{"callbackUrl":"https://myenpoint.com/events"},"authentication":{"hmac":{"secretKey":"9f3c5a77b1a0e4b7c2a8c9d7f8e4a65c6d5b7a9e8c2f3d6a1c9b7e8a2d5f6c7"}}}}}}}}}},"responses":{"201":{"description":"Returns created webhook id","content":{"application/json":{"schema":{"type":"object","properties":{"type":{"type":"string","enum":["WEBHOOK","SECRET","STREAM","INVOICE","STATUS","BUSINESS_ENTITY","BUSINESS_ENTITY_IDENTIFIER","DIRECTORY","EDI_MESSAGE"],"description":"The type of the response object.","x-doc":{"text":"The type of the response object."}},"id":{"type":"string","format":"uuid","description":"The unique identifier for the created element.","x-doc":{"text":"The unique identifier for the created element."}}},"required":["type","id"],"description":"Response model for the element creation response.","x-doc":{"text":"Response model for the element creation response."}},"examples":{"example1":{"summary":"Returns created webhook id","value":{"type":"WEBHOOK","id":"f47ac10b-58cc-4372-a567-0e02b2c3d479"}}}}},"x-doc":{"text":"Returns created webhook id"}},"400":{"description":"Validation - Request validation failure.","content":{"application/json":{"schema":{"nullable":true},"examples":{"example1":{"summary":"Request validation issues","value":{"details":{"code":"custom","message":"Resolved to private IP","path":["interopData","endpoints","authentication","oauth2ClientCredentials","callbackUrl"]}}}}}},"x-doc":{"text":"Validation - Request validation failure."}},"401":{"description":"Unauthorized - Authentication is required and has failed or has not yet been provided.","x-doc":{"text":"Unauthorized - Authentication is required and has failed or has not yet been provided."}},"403":{"description":"Forbidden - The server understood the request, but it refuses to authorize it. Note: This endpoint requires an admin account.","x-doc":{"text":"Forbidden - The server understood the request, but it refuses to authorize it. Note: This endpoint requires an admin account."}},"409":{"description":"Conflict - The request could not be completed. A webhook with the same direction already exists.","x-doc":{"text":"Conflict - The request could not be completed. A webhook with the same direction already exists."}}},"x-doc":{"text":"🎯 **Purpose**\n\nThis endpoint is used by the **operator to configure a callback URL**.\nThe configured callback will later be **called by the platform** to notify the operator system\nabout asynchronous events (e.g., enrollment completion, inbound invoices, inbound/outbound status).\n\n↔️ **Direction handling**\n\n- In most cases, a **single bidirectional callback** is sufficient.\n- The **direction** refers to the **invoice flow direction** (INBOUND / OUTBOUND). not the callback direction:\n  - **INBOUND** → statuses related to **inbound invoices**\n  - **OUTBOUND** → statuses related to **outbound invoices**\n\n✅ **Callback requirements** (If not met, the notification may be retried as failed)\n\n- The callback endpoint must accept **HTTP POST requests** for workflow execution.\n- The callback endpoint **must return an HTTP 2xx** status code to acknowledge receipt.\n- The callback endpoint **must NOT** return plain text / test text *(e.g., OK, received, test)*.\n- The callback response **must be empty** *(no body)* **or** a **valid JSON** body.\n- The callback endpoint **must respond within 60 seconds**.\n- The callback endpoint should accept data **up to 100Mb**.\n\n🔒 **Callback URL validation** (If checks fail, the callback configuration is rejected)\n\n- Only **HTTPS** URLs are accepted.\n- The hostname must be **DNS-resolvable**.\n- The resolved IP address **must not be private or internal**.\n- The endpoint must be **reachable via an HTTP GET request** (used for probe).\n- **HTTP redirects are allowed** (up to a limited number).\n- The endpoint must respond within a **short timeout**.\n\nℹ️ **Callback details**\n\nDetailed information about the **callback payloads, headers, and delivery behavior**\nis available in the **Callbacks section of this Swagger specification**.\n\n🔐 **Security (production)**\n\nIn production environments, the configured callback endpoint **MUST be protected by an authentication mechanism**\n(e.g., HMAC, OAuth2, ...).\n\nAll authentication secrets are **validated for strength and security**:\n- Weak, common, or repetitive values are **rejected** (e.g., `password`, `test`, `changeme`).\n- Secrets must meet **minimum length and entropy requirements**.\n- **Machine-generated secrets** (hex or base64) are strongly recommended and fully supported.\n\n🔁 **Retry strategy (production)**\n\nThe operator **should configure a retry strategy** using the **dedicated retry configuration endpoint**\nto ensure reliable delivery in case of temporary failures or downstream unavailability."}}},"/v1/config/retry/strategy":{"post":{"summary":"Create a new retry strategy.","description":"🎯 **Purpose**\n\nCreate a retry strategy used by the platform to **retry asynchronous deliveries**\n(e.g., webhook notifications, invoice or status deliveries) when temporary failures occur.\n\nUse this configuration to define the **number of attempts** and the **delay/backoff policy** between retries,\nimproving reliability when the operator system or downstream services are temporarily unavailable.\n\n🔄 **PUSH mode only**\n\nThis endpoint is **not relevant in PULL mode**.\nRetry strategies apply only to **PUSH-based deliveries** (e.g., webhooks).\n\n🧪 **Recommendation**\n\nIn production environments, configuring a retry strategy is **strongly recommended**.","tags":["Retry Strategy"],"security":[{"oauth2ClientCredentials":[]}],"parameters":[{"in":"header","name":"customer-id","description":"The unique identifier for the customer.","required":false,"schema":{"type":"string","format":"uuid"},"x-doc":{"text":"The unique identifier for the customer."}}],"requestBody":{"description":"Create a retry strategy (available for all webhooks)","required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"active":{"type":"boolean","default":true},"retryDelays":{"type":"array","items":{"type":"number","minimum":0,"exclusiveMinimum":true},"minItems":1,"maxItems":6,"description":"Explicit list of delays (in seconds) between retries","x-doc":{"text":"Explicit list of delays (in seconds) between retries","note":"Requests to an endpoint may be paused on our end after repeated failures. A request that is not sent because of this consumes no attempt, and may be retried later than the configured delay."}},"retryOn":{"type":"array","items":{"type":"integer","minimum":100,"maximum":599},"description":"List of HTTP status codes that should trigger a retry","x-doc":{"text":"List of HTTP status codes that should trigger a retry","note":"Requests to an endpoint may be paused on our end after repeated failures. A request that is not sent because of this is retried independently of this list, since there is no response to match against it."}},"networkRetryOn":{"type":"object","properties":{"retryOnEtimedout":{"type":"boolean","default":false,"description":"Retry when the request times out (ETIMEDOUT).","x-doc":{"text":"Retry when the request times out (ETIMEDOUT)."}},"retryOnEservfail":{"type":"boolean","default":false,"description":"Retry when the DNS server returns a failure (ESERVFAIL).","x-doc":{"text":"Retry when the DNS server returns a failure (ESERVFAIL)."}},"retryOnEconnreset":{"type":"boolean","default":false,"description":"Retry when the connection is unexpectedly closed by the peer (ECONNRESET).","x-doc":{"text":"Retry when the connection is unexpectedly closed by the peer (ECONNRESET)."}},"retryOnEconnrefused":{"type":"boolean","default":false,"description":"Retry when the connection attempt is refused by the remote host (ECONNREFUSED).","x-doc":{"text":"Retry when the connection attempt is refused by the remote host (ECONNREFUSED)."}},"retryOnEnotfound":{"type":"boolean","default":false,"description":"Retry when the target host or domain cannot be found (ENOTFOUND).","x-doc":{"text":"Retry when the target host or domain cannot be found (ENOTFOUND)."}},"retryOnEaiAgain":{"type":"boolean","default":false,"description":"Retry when a temporary DNS resolution error occurs (EAI_AGAIN).","x-doc":{"text":"Retry when a temporary DNS resolution error occurs (EAI_AGAIN)."}},"retryOnEpipe":{"type":"boolean","default":false,"description":"Retry when a broken pipe error occurs during a write operation (EPIPE).","x-doc":{"text":"Retry when a broken pipe error occurs during a write operation (EPIPE)."}},"retryOnEhostunreach":{"type":"boolean","default":false,"description":"Retry when the target host is unreachable (EHOSTUNREACH).","x-doc":{"text":"Retry when the target host is unreachable (EHOSTUNREACH)."}},"retryOnEnetunreach":{"type":"boolean","default":false,"description":"Retry when the network is unreachable (ENETUNREACH).","x-doc":{"text":"Retry when the network is unreachable (ENETUNREACH)."}}},"description":"Retry strategy based on low-level network errors.","x-doc":{"text":"Retry strategy based on low-level network errors.","warning":"Activating some of these options can lead to duplicate requests, for example when a timeout occurs because the server takes too long to respond but eventually processes the request. These options should be enabled only if the target system is idempotent or protected against duplicate processing."}}},"description":"The retry strategy","x-doc":{"text":"The retry strategy"}},"examples":{"ex1":{"summary":"Minimalist default Retry strategy (retry for 5XX errors and after 1, 4 and 6 minutes","value":{"active":true}},"ex2":{"summary":"Retry 4, 6, 16 and 33 minutes for errors 500, 502, 503, 504","value":{"active":true,"retryDelays":[240,360,1000,2000],"retryOn":[500,502,503,504]}}}}},"x-doc":{"text":"Create a retry strategy (available for all webhooks)"}},"responses":{"201":{"description":"Returns created retry strategy id","content":{"application/json":{"schema":{"type":"object","properties":{"type":{"type":"string","enum":["WEBHOOK","SECRET","STREAM","INVOICE","STATUS","BUSINESS_ENTITY","BUSINESS_ENTITY_IDENTIFIER","DIRECTORY","EDI_MESSAGE"],"description":"The type of the response object.","x-doc":{"text":"The type of the response object."}},"id":{"type":"string","format":"uuid","description":"The unique identifier for the created element.","x-doc":{"text":"The unique identifier for the created element."}}},"required":["type","id"],"description":"Response model for the element creation response.","x-doc":{"text":"Response model for the element creation response."}}}},"x-doc":{"text":"Returns created retry strategy id"}},"401":{"description":"Unauthorized - Authentication is required and has failed or has not yet been provided.","x-doc":{"text":"Unauthorized - Authentication is required and has failed or has not yet been provided."}},"403":{"description":"Forbidden - The server understood the request, but it refuses to authorize it. Note: This endpoint requires an admin account.","x-doc":{"text":"Forbidden - The server understood the request, but it refuses to authorize it. Note: This endpoint requires an admin account."}},"409":{"description":"Conflict - The request could not be completed. A retry strategy already exists.","x-doc":{"text":"Conflict - The request could not be completed. A retry strategy already exists."}}},"x-doc":{"text":"🎯 **Purpose**\n\nCreate a retry strategy used by the platform to **retry asynchronous deliveries**\n(e.g., webhook notifications, invoice or status deliveries) when temporary failures occur.\n\nUse this configuration to define the **number of attempts** and the **delay/backoff policy** between retries,\nimproving reliability when the operator system or downstream services are temporarily unavailable.\n\n🔄 **PUSH mode only**\n\nThis endpoint is **not relevant in PULL mode**.\nRetry strategies apply only to **PUSH-based deliveries** (e.g., webhooks).\n\n🧪 **Recommendation**\n\nIn production environments, configuring a retry strategy is **strongly recommended**."}},"get":{"summary":"Retrieve retry strategy.","tags":["Retry Strategy"],"security":[{"oauth2ClientCredentials":[]}],"parameters":[{"in":"header","name":"customer-id","description":"The unique identifier for the customer.","required":false,"schema":{"type":"string","format":"uuid"},"x-doc":{"text":"The unique identifier for the customer."}}],"responses":{"200":{"description":"Returns retry strategy","content":{"application/json":{"schema":{"type":"object","properties":{"active":{"type":"boolean","default":true},"retryDelays":{"type":"array","items":{"type":"number","minimum":0,"exclusiveMinimum":true},"minItems":1,"maxItems":6,"description":"Explicit list of delays (in seconds) between retries","x-doc":{"text":"Explicit list of delays (in seconds) between retries","note":"Requests to an endpoint may be paused on our end after repeated failures. A request that is not sent because of this consumes no attempt, and may be retried later than the configured delay."}},"retryOn":{"type":"array","items":{"type":"integer","minimum":100,"maximum":599},"description":"List of HTTP status codes that should trigger a retry","x-doc":{"text":"List of HTTP status codes that should trigger a retry","note":"Requests to an endpoint may be paused on our end after repeated failures. A request that is not sent because of this is retried independently of this list, since there is no response to match against it."}},"networkRetryOn":{"type":"object","properties":{"retryOnEtimedout":{"type":"boolean","default":false,"description":"Retry when the request times out (ETIMEDOUT).","x-doc":{"text":"Retry when the request times out (ETIMEDOUT)."}},"retryOnEservfail":{"type":"boolean","default":false,"description":"Retry when the DNS server returns a failure (ESERVFAIL).","x-doc":{"text":"Retry when the DNS server returns a failure (ESERVFAIL)."}},"retryOnEconnreset":{"type":"boolean","default":false,"description":"Retry when the connection is unexpectedly closed by the peer (ECONNRESET).","x-doc":{"text":"Retry when the connection is unexpectedly closed by the peer (ECONNRESET)."}},"retryOnEconnrefused":{"type":"boolean","default":false,"description":"Retry when the connection attempt is refused by the remote host (ECONNREFUSED).","x-doc":{"text":"Retry when the connection attempt is refused by the remote host (ECONNREFUSED)."}},"retryOnEnotfound":{"type":"boolean","default":false,"description":"Retry when the target host or domain cannot be found (ENOTFOUND).","x-doc":{"text":"Retry when the target host or domain cannot be found (ENOTFOUND)."}},"retryOnEaiAgain":{"type":"boolean","default":false,"description":"Retry when a temporary DNS resolution error occurs (EAI_AGAIN).","x-doc":{"text":"Retry when a temporary DNS resolution error occurs (EAI_AGAIN)."}},"retryOnEpipe":{"type":"boolean","default":false,"description":"Retry when a broken pipe error occurs during a write operation (EPIPE).","x-doc":{"text":"Retry when a broken pipe error occurs during a write operation (EPIPE)."}},"retryOnEhostunreach":{"type":"boolean","default":false,"description":"Retry when the target host is unreachable (EHOSTUNREACH).","x-doc":{"text":"Retry when the target host is unreachable (EHOSTUNREACH)."}},"retryOnEnetunreach":{"type":"boolean","default":false,"description":"Retry when the network is unreachable (ENETUNREACH).","x-doc":{"text":"Retry when the network is unreachable (ENETUNREACH)."}}},"description":"Retry strategy based on low-level network errors.","x-doc":{"text":"Retry strategy based on low-level network errors.","warning":"Activating some of these options can lead to duplicate requests, for example when a timeout occurs because the server takes too long to respond but eventually processes the request. These options should be enabled only if the target system is idempotent or protected against duplicate processing."}}},"description":"The retry strategy","x-doc":{"text":"The retry strategy"}},"examples":{"ex1":{"summary":"Minimalist default Retry strategy (retry for 5XX errors and after 1, 4 and 6 minutes","value":{"active":true}},"ex2":{"summary":"Retry 4, 6, 16 and 33 minutes for errors 500, 502, 503, 504","value":{"active":true,"retryDelays":[240,360,1000,2000],"retryOn":[500,502,503,504]}}}}},"x-doc":{"text":"Returns retry strategy"}},"401":{"description":"Unauthorized - Authentication is required and has failed or has not yet been provided.","x-doc":{"text":"Unauthorized - Authentication is required and has failed or has not yet been provided."}},"403":{"description":"Forbidden - The server understood the request, but it refuses to authorize it. Note: This endpoint requires an admin account.","x-doc":{"text":"Forbidden - The server understood the request, but it refuses to authorize it. Note: This endpoint requires an admin account."}}}},"delete":{"summary":"Delete retry strategy.","tags":["Retry Strategy"],"security":[{"oauth2ClientCredentials":[]}],"parameters":[{"in":"header","name":"customer-id","description":"The unique identifier for the customer.","required":false,"schema":{"type":"string","format":"uuid"},"x-doc":{"text":"The unique identifier for the customer."}}],"responses":{"201":{"description":"Returns deleted retry strategy id","content":{"application/json":{"schema":{"type":"object","properties":{"type":{"type":"string","enum":["WEBHOOK","SECRET","STREAM","INVOICE","STATUS","BUSINESS_ENTITY","BUSINESS_ENTITY_IDENTIFIER","DIRECTORY","EDI_MESSAGE"],"description":"The type of the response object.","x-doc":{"text":"The type of the response object."}},"id":{"type":"string","format":"uuid","description":"The unique identifier for the created element.","x-doc":{"text":"The unique identifier for the created element."}}},"required":["type","id"],"description":"Response model for the element creation response.","x-doc":{"text":"Response model for the element creation response."}}}},"x-doc":{"text":"Returns deleted retry strategy id"}},"401":{"description":"Unauthorized - Authentication is required and has failed or has not yet been provided.","x-doc":{"text":"Unauthorized - Authentication is required and has failed or has not yet been provided."}},"403":{"description":"Forbidden - The server understood the request, but it refuses to authorize it. Note: This endpoint requires an admin account.","x-doc":{"text":"Forbidden - The server understood the request, but it refuses to authorize it. Note: This endpoint requires an admin account."}},"409":{"description":"Conflict - The request could not be completed. A retry strategy already exists.","x-doc":{"text":"Conflict - The request could not be completed. A retry strategy already exists."}}}}}}}