Credit note
Credit notes follow the same rules as invoices and the same transmission logic over the Peppol network. If you've already integrated invoice sending and receiving, this module will feel familiar, the differences are limited to the resource name (/credit-notes instead of /invoices) and a couple of endpoint-level details called out below.
To send a credit note, you can choose to build a standard XML UBL 2.1 document or a JSON payload. For more details on supported formats, see Formats.
The Norwegian endpoints accept only EHF Billing 3.0 documents, so you must use the following values within your document:
<cbc:CustomizationID>urn:cen.eu:en16931:2017#compliant#urn:fdc:peppol.eu:2017:poacc:billing:3.0#conformant#urn:fdc:anskaffelser.no:2019:ehf:forward-billing:3.0</cbc:CustomizationID>
<cbc:ProfileID>urn:fdc:anskaffelser.no:2019:ehf:postaward:g3:08:1.0</cbc:ProfileID>
If you send a document with a different customization (i.e., a plain Peppol BIS Billing 3.0 document), it will be refused with an HTTP 422 and the message
The document is of a type different than what is specified for this endpoint.
Sending a credit note (outbound)
The endpoint is: POST /credit-notes
If the platform cannot manage the document, you will get a response with a body describing the error in JSON and a status code:
HTTP 422in case the validation fails.HTTP 403in case your account is not enabled for Norway.HTTP 500in case of a general error server side.
If everything is fine and the validation passes, you will receive an HTTP 202 status and the document resource (with its own unique identifier uuid) as the response.
The document has been accepted and prepared for the dispatching through the Peppol network.
The JSON response you will receive contains some useful information:
{
"uuid": "9a163ebe-fb45-4b10-aac3-d5bad66acf40",
"direction": "outgoing",
"format": "UBL 2.1 XML",
"number": "0997462625",
"date": "2019-04-01",
"sender": {
"name": "Havblikk Nett AS",
"identifier": "811143758"
},
"recipient": {
"name": "Buyer AS",
"identifier": "hn0073648"
},
"createdAt": "2026-10-02T14:22:32+00:00",
"downloaded": false,
"peppolMessage": {
"uuid": "282c6c79-9306-421a-8210-2453f03bf52d",
"createdAt": "2026-10-02T14:22:32+00:00",
"requestSentAt": null,
"responseReceivedAt": null,
"success": null,
"errorCode": null,
"errorMessage": null
}
}
Within a short period of time it will be traveling towards the document recipient. Once delivered, you will get notified to your configured webhook.
Check the recipient
Before sending a document, you can check if the recipient is registered into the Peppol Network with GET /smpquery/{participantId},
where {participantId} is the recipient Peppol identifier (i.e., 0192:987654325).
You will receive an HTTP 200 with the list of the document types the recipient can receive, or an HTTP 404 if the recipient is not registered.
The validation process
The validation is performed real-time during the API HTTP request.
The document is then validated against the EHF Billing 3.0 ruleset.
Receiving a credit note (inbound)
When a supplier issues a credit note to one of your onboarded companies, A-Cube intercepts, validates, and stores it automatically. Your system doesn't need to poll for new documents.
- Inbound Arrival Notification: Webhook event
incoming-document - Inbound Credit Note Details:
GET /credit-notes/{uuid}
Sample Arrival Webhook Payload
{
"success": true,
"document_id": "@uuid@",
"document_type": "@string@",
"request_at": "YYYY-MM-DDTHH:MM:SS",
"response_at": "YYYY-MM-DDTHH:MM:SS"
}
The downloaded flag
Every credit note has a downloaded flag which is set to false by default.
When you receive a document successfully via webhook (i.e., your endpoint reply with a 2** status), the document is marked automatically as downloaded=true.
In case you poll the API to check for new incoming documents, you can set it to true by using the endpoint POST /credit-notes/downloaded:
{
"downloaded": true,
"uuids": [
"9a163ebe-fb45-4b10-aac3-d5bad66acf40"
]
}
You can filter the documents by the downloaded flag using the query parameter downloaded=true|false when calling GET /credit-notes.
Downloading a credit note
- Download a human-readable PDF:
GET /credit-notes/{uuid}/print - Download the original payload (UBL / CII XML as submitted):
GET /credit-notes/{uuid}/source
Listing your credit notes
- List Credit Notes:
GET /credit-notes
Returns the flat list of your credit notes (both directions), sorted by most recent first.