Self-billing implementeren: NLCIUS-variant en BIS Self-Billing 3.0, capabilities checken.
Als koper kun je via de PSB API een self-billing factuur opstellen en verzenden namens je leverancier. Dit artikel beschrijft stap voor stap hoe je dat doet voor beide varianten: de NLCIUS-variant en Peppol BIS Self-Billing 3.0.
Controleer altijd eerst of de leverancier het gewenste self-billing formaat kan ontvangen:
GET /api/v1/queryRecipientParty?identifier={schemeID}:{leverancierKvK} HTTP/1.1
Host: psb.econnect.eu
Authorization: Bearer {access_token}
Zoek in de response naar het ondersteunde profiel. Bij NLCIUS is dat het standaard factuurprofiel; bij BIS Self-Billing 3.0 het specifieke self-billing profiel.
Dit is de eenvoudigste manier om een self-billing factuur te versturen. Je gebruikt dezelfde CustomizationID en ProfileID als bij een reguliere NLCIUS-factuur, maar wijzigt het InvoiceTypeCode naar 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>
Verzend het document via het SalesInvoice-endpoint:
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}
De PSB herkent automatisch het InvoiceTypeCode 389 en routeert het document als self-billing factuur naar de leverancier.
Tip: Voor een self-billing creditnota gebruik je InvoiceTypeCode
261in plaats van389.
Bij deze variant gebruik je het specifieke self-billing profiel met eigen identifiers:
<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>
Verzend BIS Self-Billing documenten via het Generic endpoint:
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}
De PSB detecteert het self-billing profiel op basis van de CustomizationID en routeert het document naar de leverancier, mits die geregistreerd is voor het BIS Self-Billing 3.0-profiel.
Let op het verschil in partijrollen bij self-billing. Dit is een veelvoorkomende bron van verwarring:
AccountingSupplierPartyAccountingCustomerPartyDe AccountingSupplierParty is altijd de leverancier, ook als de koper de factuur opstelt. De koper vult zijn eigen gegevens in bij AccountingCustomerParty.
Gebruik altijd de X-EConnect-DocumentId-header om dubbele verzending te voorkomen. De regels zijn identiek aan die voor reguliere facturen: minimaal 6 tekens, bij voorkeur een UUID, nooit het factuurnummer. Lees meer in het artikel Idempotency.
Veelvoorkomende fouten bij self-billing:
389 of 261 isqueryRecipientParty; bij BIS Self-Billing moet de leverancier apart geregistreerd zijnNa verzending ontvang je dezelfde webhook-events als bij reguliere facturen:
InvoiceSent bij succesvolle afleveringInvoiceSentRetry bij een nieuwe poging (max 8 retries)InvoiceSentError als aflevering definitief misluktVoor NLCIUS met InvoiceTypeCode 389 of 261 en de gebruikelijke NLCIUS-profielen stuur je naar POST /api/v1/{partyId}/salesInvoice/send met XML-body en optioneel X-EConnect-DocumentId. Voor BIS Self-Billing 3.0 met de bijbehorende CustomizationID en ProfileID gebruik je POST /api/v1/{partyId}/generic/send; de PSB herkent het profiel uit het document.
AccountingSupplierParty is altijd de leverancier (in self-billing de partij die de factuur "ontvangt"), en AccountingCustomerParty is de koper die het document namens de leverancier opstelt en verzendt. Die verwisseling ten opzichte van een normale verkoopfactuur is een veelvoorkomende fout bij implementatie.
Gebruik dezelfde idempotency-regels als bij reguliere facturen: stuur X-EConnect-DocumentId met een UUID, geen factuurnummer. Payloads groter dan circa 24 MB (inclusief overhead) worden door de webserver afgewezen; verklein embedded base64-PDF's of splits de aanlevering, rekening houdend met ongeveer 33% overhead door base64.
Wil je het document eerst valideren voordat je het verstuurt? Gebruik de Validate API om je self-billing factuur te controleren zonder dat deze daadwerkelijk wordt verzonden.
Probeer het in de API