Document
Create, convert and send documents via the Peppol network.
The Document endpoints handle the full lifecycle: generate UBL XML from various input formats, validate against PEPPOL Schematron rules, and send through the Peppol network.
List all renditions sharing a processId (sibling lookup)
/bizzlink/documentsReturns every document rendition produced by the same create-and-send call,
identified by the shared processId. Useful when a single business document
is rendered into multiple wire formats (e.g. IT seller → FatturaPA via SDI
plus UBL via Peppol) and the caller wants the full picture without polling
each rendition id separately.
Tenant-scoped — only renditions owned by the authenticated tenant are returned.
Returns an empty data array if no renditions match.
Responses:
| Status | Description |
|---|---|
200 | Sibling renditions |
400 | Invalid direction parameter |
curl -X GET https://gateway.vigasoft.lu/bizzlink/documents \
-H "Authorization: Bearer $API_TOKEN" \
-H "X-Bizzlink-Signature: t=$TIMESTAMP,v1=$SIGNATURE"Send a document from a JSON structure
/bizzlink/documents/jsonAccepts a BusinessDocument (the same model the on-prem connector plugins build) and
generates one or more wire-format renditions depending on sender/receiver country and
regulatory requirements. The polymorphic @type discriminator
(InvoiceDocument / CreditNoteDocument) decides the JSON:API resource type of each
response entry (invoices or credit-notes).
The routing layer — based on sender country, receiver country and SMP capabilities — decides which formats/targets the document is rendered into. Examples:
- LU/AT/BE/NL/DK/SE/IE seller → 1× UBL via Peppol
- IT seller (any buyer) → FatturaPA via SDI plus UBL via Peppol (when receiver is not IT)
- FR seller (post-2026-09-01) → Factur-X/UBL via PPF/PDP plus UBL via Peppol (when receiver is not FR)
Response is a JSON:API collection: data is an array with one entry per rendition.
Each entry has its own id (= per-rendition document id, pollable via
GET /documents/{id}/status); all siblings share the same attributes.processId,
looked up via GET /documents?processId={uuid}.
Request Body:
| Field | Type | Required | Description |
|---|---|---|---|
data | object | Yes | Resource envelope. 'attributes' holds the domain fields; 'meta.scope' declares whether the resource belongs to the whole tenant or to a specific legal entity (Peppol ID). |
Responses:
| Status | Description |
|---|---|
200 | Document(s) accepted for async processing |
403 | Sender Peppol ID does not belong to the tenant |
422 | Synchronous XML generation failed or routing target not supported |
500 | Internal server error |
Response Body — JsonApiListDocumentDocumentAcceptedAttributes:
| Field | Type | Description |
|---|---|---|
data | JsonApiResourceDocumentAcceptedAttributes[] | |
links | JsonApiLinks | |
meta | JsonApiPaginationMeta |
curl -X POST https://gateway.vigasoft.lu/bizzlink/documents/json \
-H "Authorization: Bearer $API_TOKEN" \
-H "X-Bizzlink-Signature: t=$TIMESTAMP,v1=$SIGNATURE" \
-H "Content-Type: application/json" \
-d '{
"data": {}
}'200 OK{
"data": [
{
"attributes": {
"format": "string",
"processId": "00000000-0000-0000-0000-000000000000",
"status": "QUEUED_FOR_VALIDATION",
"target": "string"
},
"id": "770e8400-e29b-41d4-a716-446655440000",
"type": "invoices"
}
],
"links": {
"first": "https://gateway.vigasoft.lu/bizzlink/documents?page%5Bnumber%5D=1&page%5Bsize%5D=20",
"last": "https://gateway.vigasoft.lu/bizzlink/documents?page%5Bnumber%5D=7&page%5Bsize%5D=20",
"next": "https://gateway.vigasoft.lu/bizzlink/documents?page%5Bnumber%5D=4&page%5Bsize%5D=20",
"prev": "https://gateway.vigasoft.lu/bizzlink/documents?page%5Bnumber%5D=2&page%5Bsize%5D=20",
"self": "https://gateway.vigasoft.lu/bizzlink/documents?page%5Bnumber%5D=3&page%5Bsize%5D=20"
},
"meta": {
"page": 1,
"size": 20,
"totalElements": 137,
"totalPages": 7
}
}Send a document from an XML file
/bizzlink/documents/xmlAccepts a UBL 2.1 Invoice or Credit Note XML, validates it asynchronously against PEPPOL BIS 3.0 Schematron rules, and sends it into the Peppol network.
Request body is a JSON:API resource envelope with data.type = "ubl-xml".
Response shape: JSON:API collection (data: [...]) with one rendition per entry.
Each entry’s JSON:API type reflects the detected document kind
(invoices or credit-notes).
Poll GET /documents/{id}/status per rendition for the validation/delivery outcome.
Request Body:
| Field | Type | Required | Description |
|---|---|---|---|
data | object | Yes | Resource envelope. 'attributes' holds the domain fields; 'meta.scope' declares whether the resource belongs to the whole tenant or to a specific legal entity (Peppol ID). |
Responses:
| Status | Description |
|---|---|
200 | Document accepted for async processing |
403 | Sender Peppol ID does not belong to the tenant |
422 | Synchronous processing failed |
500 | Internal server error |
Response Body — JsonApiListDocumentDocumentAcceptedAttributes:
| Field | Type | Description |
|---|---|---|
data | JsonApiResourceDocumentAcceptedAttributes[] | |
links | JsonApiLinks | |
meta | JsonApiPaginationMeta |
curl -X POST https://gateway.vigasoft.lu/bizzlink/documents/xml \
-H "Authorization: Bearer $API_TOKEN" \
-H "X-Bizzlink-Signature: t=$TIMESTAMP,v1=$SIGNATURE" \
-H "Content-Type: application/json" \
-d '{
"data": {}
}'200 OK{
"data": [
{
"attributes": {
"format": "string",
"processId": "00000000-0000-0000-0000-000000000000",
"status": "QUEUED_FOR_VALIDATION",
"target": "string"
},
"id": "770e8400-e29b-41d4-a716-446655440000",
"type": "invoices"
}
],
"links": {
"first": "https://gateway.vigasoft.lu/bizzlink/documents?page%5Bnumber%5D=1&page%5Bsize%5D=20",
"last": "https://gateway.vigasoft.lu/bizzlink/documents?page%5Bnumber%5D=7&page%5Bsize%5D=20",
"next": "https://gateway.vigasoft.lu/bizzlink/documents?page%5Bnumber%5D=4&page%5Bsize%5D=20",
"prev": "https://gateway.vigasoft.lu/bizzlink/documents?page%5Bnumber%5D=2&page%5Bsize%5D=20",
"self": "https://gateway.vigasoft.lu/bizzlink/documents?page%5Bnumber%5D=3&page%5Bsize%5D=20"
},
"meta": {
"page": 1,
"size": 20,
"totalElements": 137,
"totalPages": 7
}
}Get document processing status
/bizzlink/documents/{documentId}/statusReturns the current processing status of a document as a JSON:API resource. Use this endpoint to poll the status of asynchronously processed documents.
Possible attributes.status values:
ACCEPTED— Document received and savedQUEUED_FOR_VALIDATION— Waiting for Schematron validationVALID— Passed validationINVALID— Failed validation (seeattributes.errors)QUEUED_FOR_SENDING— Waiting for Peppol transmissionSENT— Transmitted to Peppol networkDELIVERED— Delivery confirmedFAILED— Processing failed
Responses:
| Status | Description |
|---|---|
200 | Document status retrieved |
403 | Document belongs to a different tenant |
404 | Document not found |
Response Body — JsonApiDocumentDocumentAttributes:
| Field | Type | Description |
|---|---|---|
data | JsonApiResourceDocumentAttributes |
curl -X GET https://gateway.vigasoft.lu/bizzlink/documents/{documentId}/status \
-H "Authorization: Bearer $API_TOKEN" \
-H "X-Bizzlink-Signature: t=$TIMESTAMP,v1=$SIGNATURE"200 OK{
"data": {
"attributes": {
"acknowledgementStatus": "SUCCESS",
"createdAt": "2026-01-01T00:00:00Z",
"errors": [
{
"flag": "fatal_error",
"id": "BR-01",
"location": "/Invoice/cac:AccountingSupplierParty",
"severity": "FATAL_ERROR",
"text": "An Invoice shall have a Specification identifier"
}
],
"format": "string",
"processId": "00000000-0000-0000-0000-000000000000",
"status": "VALID",
"target": "string",
"updatedAt": "2026-01-01T00:00:00Z"
},
"id": "770e8400-e29b-41d4-a716-446655440000",
"type": "invoices"
}
}