Submit e-invoices to Peppol

Prev Next

This guide describes how to validate and submit e-invoices to the Peppol network through the Lobster Peppol Access Point service.

Prerequisites

  • Valid credentials (username and password) for the Lobster Peppol Access Point service, available from the Lobster Customer Success team.

  • An e-invoice in Peppol BIS Billing 3.0 format (UBL Invoice or UBL Credit Note) or a supported domestic CIUS format (for example, NLCIUS for the Netherlands).

  • Access to the production or staging environment:          

    • Production: https://connect-data-network.lobster-cloud.com

    • Staging: https://connect-test-data-network.lobster-cloud.com

Domestic format support

Contact the Lobster Sales team or your Customer Success Manager to discuss available domestic CIUS formats for your target countries.

Endpoint

Property

Value

Method

POST

Path

/dw/request/v1/einvoice

Content-Type

application/xml

Authentication

HTTP Basic Authentication

Query parameter

Parameter

Type

Required

Default

Description

validateonly

boolean

No

false

true — The invoice is validated against the applicable schema but not transmitted to the Peppol network.

false — The invoice is validated and, if valid, forwarded to the Peppol network.            

Request body

The request body must contain a UBL 2.1 invoice XML document compliant with the Peppol BIS Billing 3.0 specification or a supported domestic CIUS profile.

→ Download sample invoice (Peppol BIS 3.0)

Full schema documentation: Peppol BIS Billing UBL schema

Processing flow

Flowchart illustrating XML invoice processing through Lobster Data Platform and Peppol network.

  1. The invoice is validated against the appropriate UBL schema (Peppol BIS Billing or domestic CIUS profile).

  2. If validation fails, a detailed validation report is returned (422).

  3. If validation succeeds and validateonly=false, the invoice is forwarded to the Peppol network.

  4. If validation succeeds and validateonly=true, only the validation result is returned — the invoice is not transmitted.

Example requests

Full processing (validate and send)

curl -X POST \
  "https://connect-data-network.lobster-cloud.com/dw/request/v1/einvoice" \
  -u "username:password" \
  -H "Content-Type: application/xml" \
  -d @invoice.xml

Validation only (no transmission)

curl -X POST \
  "https://connect-data-network.lobster-cloud.com/dw/request/v1/einvoice?validateonly=true" \
  -u "username:password" \
  -H "Content-Type: application/xml" \
  -d @invoice.xml

Response codes

HTTP code

Status

Description

200

ok

Validation successful. The invoice is valid. When validateonly=false, the invoice has been forwarded to the Peppol network.

400

error

Invalid XML format or unsupported Content-Type.

401

—

Authentication failed. Verify your username and password.

404

—

Endpoint not found. Verify the request path and parameters.

422

nok

Validation failed. The invoice does not comply with the Peppol BIS Billing schema. A detailed validation report is included in the response body.

500

error

Internal server error. Retain the transactionId for support.

Response structure: successful validation

Returned when the invoice passes validation (200).

Field

Type

Description

status

string

Always ok

message

string

Human-readable success message

transactionId

string (UUID)

Unique transaction identifier for tracking and support

validationResponse

object

Validation details (see validation response details)

Example

{
  "status": "ok",
  "message": "Invoice is valid.",
  "transactionId": "30ac9744-0676-4376-baf3-2b1d5efffa0e",
  "validationResponse": {
    "validatorinfo": "Prüftool-Konfiguration Peppol BIS - Peppol Billing BIS 3 - UBL Invoice",
    "description": "Validierung von UBL Invoice version 2.1",
    "schema": "UBL",
    "validationTime": "2025-07-23T10:40:11+02:00",
    "validationSummary": {
      "schemaValidationErrors": false,
      "validationErrors": false,
      "validationWarnings": false,
      "isValid": true
    },
    "report": [
      {
        "id": "-",
        "text": "No errors found."
      }
    ]
  }
}

Response structure: validation error

Returned when the invoice fails validation (422). Contains a detailed report listing all rule violations with their EN 16931 / Peppol BIS rule identifiers.

Field

Type

Description

status

string

Always nok

message

string

Human-readable error message

transactionId

string (UUID)

Unique transaction identifier for tracking and support

validationResponse

object

Validation details with error report (see validation response details)

Example

{
  "status": "nok",
  "message": "Invoice is invalid.",
  "transactionId": "e0232fd4-8012-432b-b981-175854149920",
  "validationResponse": {
    "validatorinfo": "Prüftool-Konfiguration Peppol BIS - Peppol Billing BIS 3 - UBL Invoice",
    "description": "Validierung von UBL Invoice version 2.1",
    "schema": "UBL",
    "validationTime": "2025-07-23T10:38:13+02:00",
    "validationSummary": {
      "schemaValidationErrors": false,
      "validationErrors": true,
      "validationWarnings": false,
      "isValid": false
    },
    "report": [
      {
        "id": "BR-CO-14",
        "type": "validationError",
        "flag": "fatal",
        "location": "/*:Invoice[namespace-uri()='urn:oasis:names:specification:ubl:schema:xsd:Invoice-2'][1]/*:TaxTotal[namespace-uri()='urn:oasis:names:specification:ubl:schema:xsd:CommonAggregateComponents-2'][1]",
        "text": "[BR-CO-14]-Invoice total VAT amount (BT-110) = Σ VAT category tax amount (BT-117).",
        "ruleset": "EN16931  model bound to UBL",
        "rule": "(xs:decimal(child::cbc:TaxAmount)= round((sum(cac:TaxSubtotal/xs:decimal(cbc:TaxAmount)) * 10 * 10)) div 100) or not(cac:TaxSubtotal)"
      },
      {
        "id": "BR-CO-17",
        "type": "validationError",
        "flag": "fatal",
        "location": "/*:Invoice[...][1]/*:TaxTotal[...][1]/*:TaxSubtotal[...][1]",
        "text": "[BR-CO-17]-VAT category tax amount (BT-117) = VAT category taxable amount (BT-116) x (VAT category rate (BT-119) / 100), rounded to two decimals.",
        "ruleset": "EN16931  model bound to UBL",
        "rule": "..."
      },
      {
        "id": "BR-S-09",
        "type": "validationError",
        "flag": "fatal",
        "location": "/*:Invoice[...][1]/*:TaxTotal[...][1]/*:TaxSubtotal[...][1]/*:TaxCategory[...][1]",
        "text": "[BR-S-09]-The VAT category tax amount (BT-117) in a VAT breakdown (BG-23) where VAT category code (BT-118) is \"Standard rated\" shall equal the VAT category taxable amount (BT-116) multiplied by the VAT category rate (BT-119).",
        "ruleset": "EN16931  model bound to UBL",
        "rule": "..."
      }
    ]
  }
}

Response structure: general error

Returned for technical errors (400, 500).

Field

Type

Required

Description

status

string

Yes

Always error

message

string

Yes

Human-readable error description

transactionId

string (UUID)

Yes

Unique transaction identifier: provide to Lobster support when reporting issues

Example

{
  "status": "error",
  "message": "Malformatted payload.",
  "transactionId": "b9f8543c-4861-4939-a878-13a341556f92"
}

Validation response details

ValidationResponse

Field

Type

Description

validatorinfo

string

Identifier of the validator configuration used (for example, "Prüftool-Konfiguration Peppol BIS")

description

string

Description of the validation process

schema

string

Schema type used for validation (for example, UBL)

validationTime

string (date-time)

Timestamp when the validation was performed

validationSummary

ValidationSummary

Summary of the validation result

report

array of ValidationReportItem

Detailed list of individual validation findings (errors and warnings)

ValidationSummary

Field

Type

Description

schemaValidationErrors

boolean

Whether XML schema validation errors were found

validationErrors

boolean

Whether business rule validation errors were found (EN 16931 / Peppol BIS rules)

validationWarnings

boolean

Whether validation warnings were found

isValid

boolean

Overall validation result — true only when no errors are present

ValidationReportItem

Field

Type

Required

Description

id

string

Yes

Rule identifier as defined in EN 16931 or Peppol BIS (for example, BR-CO-14, BR-S-09). Set to - when validation is successful.

type

string

No

Type of validation finding: validationError or validationWarning

flag

string

No

Severity: fatal (blocks transmission) or warning (informational)

location

string

No

XPath location of the affected element in the UBL document

text

string

Yes

Human-readable description of the violated rule, including the relevant Business Term (BT-) and Business Group (BG-) identifiers from EN 16931

ruleset

string

No

Ruleset the validation belongs to (for example, EN16931 model bound to UBL)

rule

string

No

Technical validation expression (XPath/Schematron assertion)


Schema reference endpoints

The connector provides dedicated GET endpoints for accessing the JSON schema definition of each data model used. Utilize these endpoints for programmatic schema access, code generation, or integration testing.

All schema endpoints require the same HTTP Basic Authentication credentials as the submission endpoint and return application/json responses.

Endpoint

Schema returned

Description

GET /schemas/validation-success-response

ValidationSuccessResponse

Successful invoice validation response (see response structure: successful validation)

GET /schemas/validation-error-response

ValidationErrorResponse

Validation error details response (see response structure: validation error)

GET /schemas/validation-response

ValidationResponse

Combined validation response containing validator information, summary, and report (see validation response details)

GET /schemas/validation-summary

ValidationSummary

Summary of validation results (see validation response details)

GET /schemas/validation-report-item

ValidationReportItem

Individual validation report item (see validation response details)

GET /schemas/error-response

ErrorResponse

General error response (see response structure: general error)

GET /schemas/acknowledgement-response

AcknowledgementResponse

Delivery acknowledgement or fallback notification (see delivery notifications after submission)

Example request

curl -X GET \
  "https://connect-data-network.lobster-cloud.com/schemas/validation-success-response" \
  -u "username:password" \
  -H "Accept: application/json"

Replace the path with any endpoint from the table above to retrieve the corresponding schema. The response contains the full JSON schema definition for that data model.

Delivery notifications after submission

After a valid invoice is forwarded to the Peppol network, a Message Delivery Notification (MDN) confirms successful delivery to the receiving Access Point.

If the intended recipient is unreachable through Peppol, perhaps due to their lack of registration as a Peppol participant, the system will automatically initiate a fallback email delivery to the address indicated in the UBL document.

The invoice sender receives these status notifications through one of the following channels:

  • One or more configured email addresses

  • An HTTP callback endpoint

If an endpoint is already configured for receiving inbound invoices, it can be reused for status callbacks.

Note

Callback configuration is performed by the Lobster Onboarding team. Coordinate all technical details with your Customer Success Manager or designated technical contact.

Callback response structure (AcknowledgementResponse)

Field

Type

Required

Description

transactionId

string (UUID)

Yes

Unique transaction identifier, correlates with the original submission

status

string

Yes

Delivery status: delivered, fallback_email_sent, or error

peppolRecipient

string

No

Peppol Participant ID of the intended recipient (scheme:identifier format, for example 0192:123456789)

fallbackEmail

string (email)

No

Email address used for fallback delivery. null when Peppol delivery succeeds.

message

string

No

Human-readable description of the delivery result

timestamp

string (date-time)

Yes

Timestamp of the status notification (ISO 8601)

Example: successful Peppol delivery

{
  "transactionId": "123e4567-e89b-12d3-a456-426614174000",
  "status": "delivered",
  "peppolRecipient": "0192:123456789",
  "fallbackEmail": null,
  "message": "Invoice successfully delivered via Peppol",
  "timestamp": "2025-08-11T14:32:00Z"
}

Example: fallback email delivery

{
  "transactionId": "123e4567-e89b-12d3-a456-426614174000",
  "status": "fallback_email_sent",
  "peppolRecipient": "0192:123456789",
  "fallbackEmail": "recipient@example.com",
  "message": "Peppol delivery failed, invoice sent via fallback email",
  "timestamp": "2025-08-11T14:32:00Z"
}

Example: delivery error

{
  "transactionId": "123e4567-e89b-12d3-a456-426614174000",
  "status": "error",
  "peppolRecipient": "0192:123456789",
  "fallbackEmail": null,
  "message": "Delivery failed. Recipient not reachable via Peppol and no fallback email available.",
  "timestamp": "2025-08-11T14:32:00Z"
}

Troubleshooting

Problem

Possible cause

Resolution

401 on POST

Invalid or missing credentials

Verify username and password. Request credentials from the Lobster Customer Success team.

400 with "Malformatted payload"

Invalid XML or incorrect Content-Type header

Confirm that Content-Type: application/xml is set and the body contains well-formed XML. Validate your document locally before submission.

422 with validation errors

UBL document violates EN 16931 or Peppol BIS rules

Inspect the id field in each report item (for example, BR-CO-14) to identify the violated rule. The text field describes the expected calculation or constraint. Correct the affected elements per the Peppol BIS Billing 3.0 specification.

404

Incorrect endpoint path or mismatched parameters

Verify the path is /dw/request/v1/einvoice and query parameters are correctly formatted.

500

Internal server error

Retain the transactionId from the response and provide it to the Lobster support team.

No delivery notification received

Callback endpoint not configured or unreachable

Verify callback configuration with the Lobster Onboarding team. Ensure the callback endpoint responds with 200 OK.

fallback_email_sent instead of delivered

Recipient not registered as a Peppol participant

Confirm the recipient's Peppol Participant ID in the Peppol Directory. Verify the EndpointID and schemeID in your UBL document match the SMP registration.


Further reading