Implémenter le self-billing : variante NLCIUS et BIS Self-Billing 3.0, vérifier les capabilities.
En tant qu'acheteur, vous pouvez via l'API PSB établir et envoyer une facture self-billing au nom de votre fournisseur. Cet article décrit étape par étape comment procéder pour les deux variantes : la variante NLCIUS et Peppol BIS Self-Billing 3.0.
Vérifiez toujours d'abord si le fournisseur peut recevoir le format self-billing souhaité :
GET /api/v1/queryRecipientParty?identifier={schemeID}:{leverancierKvK} HTTP/1.1
Host: psb.econnect.eu
Authorization: Bearer {access_token}
Recherchez dans la réponse le profil supporté. Pour le NLCIUS, il s'agit du profil de facture standard ; pour le BIS Self-Billing 3.0, du profil self-billing spécifique.
C'est la manière la plus simple d'envoyer une facture self-billing. Vous utilisez les mêmes CustomizationID et ProfileID que pour une facture NLCIUS standard, mais vous changez le InvoiceTypeCode en 389 :
<Invoice xmlns="urn:oasis:names:specification:ubl:schema:xsd:Invoice-2">
<CustomizationID>urn:cen.eu:en16931:2017#compliant#urn:fdc:nen.nl:nlcius:v1.0</CustomizationID>
<ProfileID>urn:fdc:peppol.eu:2017:poacc:billing:01:1.0</ProfileID>
<ID>SB-2026-001</ID>
<IssueDate>2026-03-05</IssueDate>
<InvoiceTypeCode>389</InvoiceTypeCode>
<!-- AccountingSupplierParty = de leverancier (ontvanger van de factuur) -->
<AccountingSupplierParty>
<Party>
<EndpointID schemeID="0106">87654321</EndpointID>
<PartyName><Name>Leverancier B.V.</Name></PartyName>
...
</Party>
</AccountingSupplierParty>
<!-- AccountingCustomerParty = de koper (opsteller van de factuur) -->
<AccountingCustomerParty>
<Party>
<EndpointID schemeID="0106">12345678</EndpointID>
<PartyName><Name>Koper B.V.</Name></PartyName>
...
</Party>
</AccountingCustomerParty>
...
</Invoice>
Envoyez le document via l'endpoint SalesInvoice :
POST /api/v1/{partyId}/salesInvoice/send HTTP/1.1
Host: psb.econnect.eu
Authorization: Bearer {access_token}
Content-Type: application/xml
X-EConnect-DocumentId: {uuid}
Le PSB reconnaît automatiquement l'InvoiceTypeCode 389 et route le document en tant que facture self-billing vers le fournisseur.
Conseil : pour une note de crédit self-billing, utilisez l'InvoiceTypeCode
261au lieu de389.
Avec cette variante, vous utilisez le profil self-billing spécifique avec ses propres identifiants :
<Invoice xmlns="urn:oasis:names:specification:ubl:schema:xsd:Invoice-2">
<CustomizationID>urn:cen.eu:en16931:2017#compliant#urn:fdc:peppol.eu:2017:poacc:selfbilling:3.0</CustomizationID>
<ProfileID>urn:fdc:peppol.eu:2017:poacc:selfbilling:3.0</ProfileID>
<ID>SB-2026-001</ID>
<IssueDate>2026-03-05</IssueDate>
<InvoiceTypeCode>389</InvoiceTypeCode>
<AccountingSupplierParty>
<Party>
<EndpointID schemeID="0106">87654321</EndpointID>
<PartyName><Name>Leverancier B.V.</Name></PartyName>
...
</Party>
</AccountingSupplierParty>
<AccountingCustomerParty>
<Party>
<EndpointID schemeID="0106">12345678</EndpointID>
<PartyName><Name>Koper B.V.</Name></PartyName>
...
</Party>
</AccountingCustomerParty>
...
</Invoice>
Envoyez les documents BIS Self-Billing via l'endpoint Generic :
POST /api/v1/{partyId}/generic/send HTTP/1.1
Host: psb.econnect.eu
Authorization: Bearer {access_token}
Content-Type: application/xml
X-EConnect-DocumentId: {uuid}
Le PSB détecte le profil self-billing sur la base du CustomizationID et route le document vers le fournisseur, à condition que celui-ci soit enregistré pour le profil BIS Self-Billing 3.0.
Notez la différence dans les rôles des parties en self-billing. C'est une source fréquente de confusion :
AccountingSupplierPartyAccountingCustomerPartyL'AccountingSupplierParty est toujours le fournisseur, même lorsque l'acheteur établit la facture. L'acheteur renseigne ses propres données dans AccountingCustomerParty.
Utilisez toujours le header X-EConnect-DocumentId pour éviter les envois en double. Les règles sont identiques à celles des factures standard : minimum 6 caractères, de préférence un UUID, jamais le numéro de facture. En savoir plus dans l'article Idempotency.
Erreurs courantes en self-billing :
389 ou 261queryRecipientParty ; pour le BIS Self-Billing, le fournisseur doit être enregistré séparémentAprès l'envoi, vous recevez les mêmes événements webhook que pour les factures standard :
InvoiceSent en cas de livraison réussieInvoiceSentRetry en cas de nouvelle tentative (max 8 retries)InvoiceSentError si la livraison échoue définitivementPour NLCIUS avec InvoiceTypeCode 389 ou 261 et les profils NLCIUS habituels, envoyez vers POST /api/v1/{partyId}/salesInvoice/send avec un body XML et optionnellement X-EConnect-DocumentId. Pour BIS Self-Billing 3.0 avec le CustomizationID et ProfileID correspondants, utilisez POST /api/v1/{partyId}/generic/send ; la PSB reconnaît le profil à partir du document.
AccountingSupplierParty est toujours le fournisseur (en self-billing, la partie qui "reçoit" la facture), et AccountingCustomerParty est l'acheteur qui crée et envoie le document au nom du fournisseur. Cette inversion par rapport à une facture de vente classique est une erreur d'implémentation fréquente.
Utilisez les mêmes règles d'idempotency que pour les factures classiques : envoyez X-EConnect-DocumentId avec un UUID, pas le numéro de facture. Les payloads dépassant environ 24 MB (overhead inclus) sont rejetés par le serveur web ; réduisez les PDFs base64 intégrés ou fractionnez la livraison, en tenant compte d'environ 33% d'overhead lié au base64.
Vous souhaitez d'abord valider le document avant de l'envoyer ? Utilisez la Validate API pour vérifier votre facture self-billing sans l'envoyer réellement.
Essayer dans l'API