ediverse Explore the platform

Spotlight PEPPOL BIS Billing 3.0 The EU e-invoicing mandate is here — France Sept 2026, Belgium Jan 2026, Germany 2025.

CONTRL — Syntax and Service Report Message (D.96A)

CONTRL is the automatic technical acknowledgment of EDIFACT: it acknowledges or rejects, with error indication, a received interchange, functional group or message.

Purpose

The CONTRL message is "syntactically acknowledging or rejecting, with error indication, a received interchange, functional group or message." It operates in two modes: receipt acknowledgement (the interchange arrived) or error report (the interchange was parsed but contains syntax defects). It's the EDIFACT analog of SMTP's 250 OK / 5xx Error.

CONTRL is generated automatically by syntactic validators (Mendelson, OFTP2, AS2, the Generix/Tradeshift platforms). It's never emitted manually and carries no business information — only conformity to ISO 9735.

Segment structure

CONTRL D.96A has a flat structure: a minimal Header, then a sequence of segments UCI → groups SG1 → SG3 (UCM, UCF). There is no separate Summary section — the message simply ends with UNT.

The header is just: UNH M , then UCI M .

The UCI segment is the keystone: it carries the interchange number being acknowledged (which must match UNB[4] of the original), the sender and receiver identifiers of the acknowledged interchange (swapped vs the original — the CONTRL sender is the former receiver), and the action code (4 = interchange rejected with errors, 7 = interchange acknowledged without error, 8 = partially accepted).

Detail (UCI / UCM / UCS / UCD / UCF)

After UCI, two reporting structures coexist — depending on whether the original interchange carried individual messages or functional groups.

SG1 — loop repeatable up to 999,999 times: one UCM M per acknowledged message. Each UCM can contain SG2 (repeatable 999 times): UCS M and its UCD C .

SG3 — loop repeatable up to 999,999 times, alternative to SG1 when the interchange used UNG/UNE: one UCF M per group. UCF can contain a SG4 (up to 999,999 UCM ), itself containing a SG5 with UCS + UCD for the error detail.

In practice, SG3/UCF is rare in modern flows (UNG/UNE functional groups are seldom used in retail B2B). Most CONTRL messages carry a single UCI followed by one or more UCM.

Summary

CONTRL has no separate Summary section and no UNS segment. The message ends directly with: UNT M .

Mandatory / conditional

Three segments are strictly mandatory in every D.96A CONTRL:

  • UNH — opens the message, carries the version without an association identifier.
  • UCI — identifies the acknowledged interchange and its status. Without UCI, the CONTRL is invalid.
  • UNT — closes the message, declares the segment count.

If the acknowledged interchange contains at least one message, then UCM or UCF must also appear. On error, UCS and UCD pinpoint the faulty segment and element using an error code from list D.E. 9968 (1 = mandatory field missing, 5 = general syntax error, 13 = message structure error, etc.).

Real-world example

A positive acknowledgment: the receiver (buyer GLN 5410000000123) confirms it has correctly parsed the reference ORDERS interchange (number CTRL000001, sent by supplier GLN 5410000000456).

edifact contrl-d96a-ack-example.edi
UNB+UNOC:3+5410000000123:14+5410000000456:14+260513:1445+CTRL-ACK-001'
UNH+1+CONTRL:D:96A:UN'
UCI+CTRL000001+5410000000456:14+5410000000123:14+7'
UCM+1+ORDERS:D:96A:UN:EAN008+7'
UNT+4+1'
UNZ+1+CTRL-ACK-001'
  • UNH+1+CONTRL:D:96A:UN — CONTRL message in D.96A. Note the absence of an association id (no :EAN008).
  • UCI+CTRL000001+5410000000456:14+5410000000123:14+7 — references interchange CTRL000001, identifies original sender and receiver, action 7 (interchange acknowledged without errors).
  • UCM+1+ORDERS:D:96A:UN:EAN008+7 — confirms that the reference ORDERS message "1" was correctly parsed, code 7 (message acknowledged).
  • UNT+4+1 — 4 segments in the message (UNH, UCI, UCM, UNT), reference "1" matching UNH.

Conversely, a negative acknowledgment with error report — sending an interchange CTRL000099 that contained an ORDERS message with an error on segment 15 (DE 3055, error code 5):

edifact contrl-d96a-reject-example.edi
UNB+UNOC:3+5410000000123:14+5410000000456:14+260513:1450+CTRL-ACK-002'
UNH+1+CONTRL:D:96A:UN'
UCI+CTRL000099+5410000000456:14+5410000000123:14+4+12'
UCM+1+ORDERS:D:96A:UN:EAN008+4+13'
UCS+15+12'
UCD+12+3055+1+5'
UNT+6+1'
UNZ+1+CTRL-ACK-002'
  • UCI+...+4+12 — action 4 (interchange rejected), error code 12 (syntax error).
  • UCM+1+ORDERS:D:96A:UN:EAN008+4+13 — message rejected, code 13 (structure error).
  • UCS+15+12 — faulty segment #15, error code 12.
  • UCD+12+3055+1+5 — faulty element 3055 (code list responsible agency), error 5 (invalid value).

Common errors

  • Swapped sender/receiver in UCI — the CONTRL sender is the receiver of the acknowledged interchange, and vice versa. Swapping creates a routing mismatch on the EDI platform.
  • Diverging UCI[1] reference — the interchange reference in UCI[1] must exactly match UNB[4] of the acknowledged interchange. Any divergence means the original sender cannot link the CONTRL back to its send.
  • Invalid action codes — UCI[5] (action) accepts 4 (rejected), 7 (acknowledged), 8 (partially accepted). Any other code creates ambiguity on the platform.
  • UNH with association id — unlike trade messages, a CONTRL UNH carries no association (no :EAN008). Many naive generators add one out of habit.
  • CONTRL not emitted — most EDI platforms require one CONTRL per received interchange, within a window (typically 15 minutes). A missing CONTRL is read as a parsing failure.

CONTRL is the acknowledgment envelope of every other EDIFACT message:

JSON equivalent

JSON projection that matches the positive acknowledgment example. This mapping is not normative — it's an ediverse convention to ease integration in TypeScript / Python environments.

json contrl-d96a-equivalent.json
{
  "interchange": {
    "controlRef": "CTRL-ACK-001",
    "from": { "id": "5410000000123", "qualifier": "14" },
    "to": { "id": "5410000000456", "qualifier": "14" },
    "datetime": "2026-05-13T14:45:00Z",
    "syntax": { "id": "UNOC", "version": "3" }
  },
  "message": {
    "ref": "1",
    "type": "CONTRL",
    "version": { "syntax": "D", "release": "96A", "agency": "UN" }
  },
  "controlReport": {
    "subject": {
      "interchangeRef": "CTRL000001",
      "from": { "id": "5410000000456", "qualifier": "14" },
      "to": { "id": "5410000000123", "qualifier": "14" }
    },
    "interchangeAction": "7",
    "interchangeActionLabel": "Acknowledgement that the interchange has been received and is acceptable",
    "messages": [
      {
        "ref": "1",
        "type": "ORDERS",
        "version": "D:96A:UN:EAN008",
        "action": "7",
        "actionLabel": "Message acknowledged, no syntax errors"
      }
    ],
    "errors": []
  }
}