Peppol MLR / Message Level Response

This page contains some general thought about the Message Level Response (MLR) and eventual successors.

MLR - Message Level Response


The MLR is a message between End Users (C1 and C4) executed by Service Providers (C2 and C3). The official specification can be found at
The MLR is a regular Peppol document like Invoice or Order and as such needs to be transmitted like any other Peppol document wrapped in an SBDH and send via AS4.
The MLR is an optional document and is NOT mandatory. So not every sender of a business document supports the reception of MLRs. To check if MLR reception is supported, an SMP lookup is needed.
Please note that the usage of C1, C2, C3 and C4 should be reversed to be precise but in this document, the usage of C1, C2, C3 and C4 always refers to the role for the transmission of the source document to avoid confusion.
Please note, that an MLR message can be send as a response to any business document as long as its reception is supported.


The scope in which the MLR MAY be used is clearly defined in the specification chapter 2.2. As the sender is obliged to only send valid (=validated) content, validation on receiver side is an optional task. And don't mix MLR with BLR (Business Level Response - e.g. Invoice Response) because they have different meanings.

Proposed technical process

The following process description shows a best practice process proposal. The assumption is, that receiver side validation was performed and the response should be transmitted back to C1.

  1. You validate synchronously (that's important) and found at least one error
  2. You synchronously check if the sender of the business document (C1) supports MLR or not via an SMP query
  3. Case 1 - Sender supports MLR:
    1. Send back a positive AS4 Receipt
    2. Create the MLR and trigger an explicit AS4 transmission of the MLR
      Note: make sure the AS4 Receipt is received by the sender BEFORE the MLR is send (asynchronous processing required)
    Case 2 - Sender does not support MLR:
    1. Send back a synchronous AS4 Error with the error details
    2. Note: do not use SOAP Faults but an AS4 SignalMessage with an Error element inside

Open Source software

My peppol-commons project received an extension to deal with MLR in the peppol-mlr module. It allows to create the MLR payload in a consistent way. For the SMP lookup the same project has a peppol-smp-client module. Wrapping the MLR in SBDH and sending the message can be done with any compliant Peppol AS4 solution like phase4.

MLS - Message Level Status

Currently in the process of specification. More when ready.

The intention of the MLS is to be a message between C2 and C3 instead of a message between C1 and C4 like the MLR. This makes it easier to mandate it, because only Service Providers are forced to support it.

You must be logged in to post a comment!