Disaggregate serial number APIs
Disaggregation messages allow manufacturing locations to manage exceptions (e.g. a damaged item inside a parent container) throughout production. Disaggregation removes child items from their parent container.
Disaggregation
Pharmaceutical Manufacturers or CMOs use this message to disaggregate serial numbers which were previously aggregated through a Disposition Assigned message or the Web UI.

Guidelines
- Message Type: SNX_DISAGGREGATED
- Info Exchange Display Name: Serial Number Disaggregation
- Map Version: TL_XML_SNX_Disaggregation_1_0_IB_V1_0
Element | Occurs Length |
Type | Description | ||||
---|---|---|---|---|---|---|---|
snx:SNXDisaggregatedMessage | - |
1...1- | Required. The XML message root element. | ||||
snx:ControlFileHeader | - |
1...1- | Required. The XML file control header. | ||||
cmn:FileSenderNumber | 1/20 |
1...1String | Required. The unique identifier for the company sending the message (e.g. 7777776067344). | ||||
cmn:FileReceiverNumber | 1/20 |
1...1String | Required. The unique identifier for the company receiving the message (e.g. 8888884043588). | ||||
cmn:FileControlNumber | 1/20 |
1...1String | Required. The unique identifier for the company sending the message (e.g. 7777776067344). | ||||
cmn:FileDate | 10/10 |
1...1Date | Required. The date the file was generated in YYYY-MM-DD format (e.g. 2023-06-30). | ||||
cmn:FileTime | 8/8 |
1...1Time | Required. The time the file was generated in HH:MM:SSZ format (e.g. 06:30:32Z). | ||||
snx:MessageBody | - |
1...1- |
Required. The body of the XML message. |
||||
snx:DisaggregatedEvent | - |
1...1- | Required. The data identifying the disaggregation event. | ||||
cmn:EventDateTime | 1/* |
1...1DateTime | Required. The date and time the serial numbers were disaggregated in YYYY-MM-DDTHH:MM:SSZ format (e.g. 2023-03-31T12:40:21.140Z). Milliseconds default to zero for efficiency and smaller file sizes because serial numbers can be grouped together when the event times are the same. | ||||
cmn:EventTimeZoneOffset | 6/6 |
1...1String | Required. The time zone offset in effect at the time and place where the event occurred (e.g. -05:00). | ||||
cmn:EventLocation | 1/34 |
1...1String | Required. The SGLN of the location where disaggregation occurred, with the urn prefix omitted (e.g. 8888882.02867.0 instead of urn:epc:id:sgln:8888882.02867.0). | ||||
cmn:ParentSerialNumber | 1/* |
1...1AnyURI |
Required. The serial number of the parent container. Express values in the GS1 Application Identifier format without parentheses for the AI keys. Examples:
|
||||
cmn:SerialNumberList | - |
1...1- | Required. The list of child serial numbers. | ||||
@isRandom | - |
0...1Boolean |
Indicates that the list of serial numbers is not sequential. Valid value is |
||||
cmn:SerialNumber | 1/* |
1...*AnyURI |
Required. The child serial number aggregated to the parent containe (e.g. for an each-to-case aggregation, the serial numbers of the eaches). Express values in the GS1 Application Identifier format without parentheses for the AI keys. Examples:
|
Example
<?xml version="1.0" encoding="UTF-8"?>
<snx:SNXDisaggregatedMessage xmlns:snx="urn:tracelink:mapper:sl:serial_number_exchange" xmlns:cmn="urn:tracelink:mapper:sl:commontypes">
<snx:ControlFileHeader>
<cmn:FileSenderNumber>8887771013655</cmn:FileSenderNumber>
<cmn:FileReceiverNumber>6667771013655</cmn:FileReceiverNumber>
<cmn:FileControlNumber>0000000004</cmn:FileControlNumber>
<cmn:FileDate>2020-08-17</cmn:FileDate>
<cmn:FileTime>06:30:32Z</cmn:FileTime>
</snx:ControlFileHeader>
<snx:MessageBody>
<snx:DisaggregatedEvent>
<cmn:EventDateTime>2020-08-17T06:30:32.00Z</cmn:EventDateTime>
<cmn:EventTimeZoneOffset>-05:00</cmn:EventTimeZoneOffset>
<cmn:EventLocation>8887777.01384.0</cmn:EventLocation>
<cmn:ParentSerialNumber>010088202501033821100000880051</cmn:ParentSerialNumber>
<cmn:SerialNumberList isRandom="true">
<cmn:SerialNumber>010088202501033821100000880037</cmn:SerialNumber>
<cmn:SerialNumber>010088202501033821100000880051</cmn:SerialNumber>
</cmn:SerialNumberList>
</snx:DisaggregatedEvent>
</snx:MessageBody>
</snx:SNXDisaggregatedMessage>
Errors
Element | Error message | Description |
---|---|---|
Class 2 | ||
cmn:FileControlNumber | File [input file name] is a potential duplicate match with file [existing file name] sent from [file sender] received on [existing file date], based on both files having the same File Control Number [file control number]. | The file might be a duplicate, as the file control number matches that of a previous message. |
cmn:FileSenderNumber | No integration user set for company [company name]. | An integration user does not exist for the company. |
No API Key exists for the owner company of service [service name]. |
An API key does not exist for the company in Serial Number Exchange. |
|
cmn:FileSenderNumber or cmn:FileReceiverNumber |
Unable to find profile for serviceId [app ID] and subscriber company [Partner company ID]. | The sender or receiver identifier, or the alternate identifier configured on the Link between them, does not have a Serial Number Exchange profile associated with it. |
Unable to find product pool for serviceId [app identifier] and pool [pool identifier]. |
TraceLink cannot find the pool of serial numbers at this company for the packaging code entered. |
|
Unable to find product pool for serviceId [app identifier] and pool [pool identifier]. | TraceLink cannot find the pool of serial numbers at this company for the packaging code of the parent serial number entered. | |
cmn:EventDateTime | Event timestamp is earlier than the aggregation date for serial number [serial number]. | A disaggregation event can only occur after the serial number is aggregated. |
cmn:EventTimeZoneOffset | Data Error: EventTimeZoneOffset occurs fewer times than its minimum number of occurrences. | This element must have a value specified. |
cmn:EventLocation | EventLocation occurs fewer times than its minimum number of occurrences. | This element must have a value specified. |
cmn:ParentSerialNumber | ERROR | This element must be specified in one of the valid formats. |
ParentSerialNumber occurs fewer times than its minimum number of occurrences. | This element must have a value specified. | |
Serial Number [serial number] status cannot be updated because no associated Serial Number Format could be found in [Owner]’s Serial Number Manager or Serial Number Exchange Profile. | The format of this serial number is not configured in either the Serial Number Manager template or Serial Number Exchange profile. | |
Serial number [parent serial number] can not be found. | The serial number is not configured in Product Master Data or Serial Number Exchange. | |
cmn:SerialNumber | Invalid EPC format !!! | This element must be specified in one of the valid formats. |
BADSERIALNUMBERSTATE. | The parent and child serial numbers must all exist with the serial number status commissioned and the item status available or blocked. | |
Serial Number [serial number] cannot be disaggregated because it was not previously aggregated to [parent serial number]. | The serial number must be aggregated to the parent serial number to be disaggregated from that container. | |
Serial Number [serial number] status cannot be updated because no associated Serial Number Format could be found in [Owner]’s Serial Number Manager or Serial Number Exchange Profile. | The format of this serial number is not configured in either the Serial Number Manager template or Serial Number Exchange profile. | |
Serial number [serial number] can not be found. | The serial number is not configured in Product Master Data or Serial Number Exchange. | |
N/A | Retries exceeded the maximum wait time [maximum wait time] seconds. | The maximum wait time for park and retry was exceeded for this message. |
Class 3 | ||
The following is thrown for all Class 3 errors: “INTERNALERROR=Internal error from server [server details].” Please contact Support if this error is encountered. |

Guidelines
- Message Type: SNX_DISAGGREGATED
- Info Exchange Display Name: Serial Number Disaggregation
- Map Version: TL_EPCIS_SNX_Disaggregated_1_2_IB_V1_1
Element | Occurs Length |
Type | Description | |||||
---|---|---|---|---|---|---|---|---|
epcis:EPCISDocument | - |
1...1- | Required. The EPCIS message root element. | |||||
@schemaVersion | 1/* |
1...1Decimal | Required. The version of the EPCIS schema used to populate the EPCIS document elements. Valid value is 1.2 . |
|||||
@creationDate | 1/* |
1...1DateTime | Required. The date and time the EPCIS message was created in YYYY-MM-DDTHH:MM:SSZ format (e.g. 2023-03-25T22:08:02Z). | |||||
EPCISHeader | - |
1...1- |
Required. The XML file control header record providing message identification and routing information. This message supports the following use cases:
|
|||||
sbdh:StandardBusinessDocumentHeader | - |
1...1- | Required. The business header information, including the EPCIS header version, sender and receiver information, and the document identification. | |||||
sbdh:HeaderVersion | 1/* |
1...1String | Required. The version number of the Standard Business Document Header. Valid value is 1.0 . |
|||||
sbdh:Sender | - |
1...1- | Required. The unique identification key for the organization that created the standard business document. | |||||
sbdh:Identifier | 1/* |
1...1String | Required. The GLN, SGLN, or any other supported company identifier (e.g. 1100001014507). All identifier types except GLNs must have a GS1-conformant uri prefix (e.g. urn:epc:id:sgln:088202.867701.0). | |||||
@Authority | 1/* |
1...1String |
Required. The sender identifier type. ![]()
|
|||||
sbdh:Receiver | - |
1...1- | Required. The unique identification key for the organization that created the standard business document. | |||||
sbdh:Identifier | 1/* |
1...1String | Required. The GLN, SGLN, or any other supported company identifier (e.g. 1100001014507). All identifier types except GLNs must have a GS1-conformant uri prefix (e.g. urn:epc:id:sgln:088202.867701.0). | |||||
@Authority | 1/* |
1...1String |
Required. The sender identifier type. ![]()
|
|||||
sbdh:DocumentIdentification | - |
1...1- | Required. The document identification and standard. | |||||
sbdh:Standard | 1/* |
1...1String | Required. The document standard. Valid value is EPCglobal . |
|||||
sbdh:TypeVersion | 1/* |
1...1String | Required. The version of the document included in the payload. This is the complete version and is different than the sbdh:HeaderVersion. Valid value is 1.0 . |
|||||
sbdh:InstanceIdentifier | 1/* |
1...1String | Required. The reference identifier that uniquely identifies this instance of the Standard Business Document between the sender and the receiver. | |||||
sbdh:Type | 1/* |
1...1String | Required. The type of document. Valid value is EPCglobal . |
|||||
sbdh:CreationDateAndTime | 1/* |
1...1DateTime | Required. The date and time the file was created in YYYY-MM-DDTHH:MM:SS.ssZ format (e.g. 2023-03-25T22:08:02Z). Milliseconds default to zero. | |||||
EPCISBody | - |
1...1- |
Required. The body of the message with the EPCIS event. |
|||||
EventList | - |
1...1- | Required. The EventList has the following structure:
|
|||||
choice | - |
1...1- | Required. Only AggregationEvent can be used in any one loop of EPCISBody | EventList. | |||||
AggregationEvent | - |
1...*- |
Required. The disaggregation event. Set the following values to indicate that that the ObjectEvent is for disaggregation:
|
|||||
eventTime | 1/* |
1...1DateTime | Required. The date and time the serial numbers were disaggregated in YYYY-MM-DDTHH:MM:SSZ format (e.g. 2023-03-31T12:40:21.140Z). Milliseconds default to zero for efficiency and smaller file sizes because serial numbers can be grouped together when the event times are the same. | |||||
eventTimeZoneOffset | 1/* |
1...1String | Required. The time zone offset in effect at the time and place where the event occurred (e.g. -05:00). | |||||
parentID | 1/* |
1...1AnyURI |
Required. The serial number of the parent container in EPC Pure Identity URI format (e.g. urn:epc:id:sgtin:088202.5503022.100000000670). ![]()
|
|||||
childEPCs | - |
1...1- | Required. The list of child serial numbers disaggregated from the parent container (e.g. for an each-to-case aggregation, the serial numbers of the eaches). | |||||
epc | 1/* |
1...*AnyURI |
Required. The EPC identifier for the child serial number in EPC Pure Identity URI format. ![]()
|
|||||
action | 1/* |
1...1String | Required. The standard GS1 action for the event. Valid value is DELETE . |
|||||
bizStep | 1/* |
1...1AnyURI | Required. The standard GS1 business step for the event. Valid value is urn:epcglobal:cbv:bizstep:unpacking . |
|||||
disposition | 1/* |
1...1AnyURI | Required. The standard GS1 disposition for the event. Valid value is urn:epcglobal:cbv:disp:in_progress . |
|||||
readPoint | - |
0...1- | The location where disaggregation occurred, specifically where the barcode was scanned, if applicable. | |||||
id | 1/* |
1...1AnyURI |
Required. The SGLN EPC of the location where disaggregation occurred (e.g. urn:epc:id:sgln:0614141.12345.RP1). This SGLN can be at the location level or a more specific storage space (e.g. a specific shelf within the warehouse). This ID must use the following structure: |
|||||
bizLocation | - |
1...1- | Required. The business location where disaggregation occurred. | |||||
id | 1/* |
1...1AnyURI |
Required. The SGLN EPC of the location where disaggregation occurred (e.g. urn:epc:id:sgln:0614141.12345.RP1). This SGLN can be at the location level or a more specific storage space (e.g. a specific shelf within the warehouse). This ID must use the following structure: |
Example
<?xml version="1.0" encoding="UTF-8"?>
<epcis:EPCISDocument xmlns:epcis="urn:epcglobal:epcis:xsd:1" xmlns:sbdh="http://www.unece.org/cefact/namespaces/StandardBusinessDocumentHeader" xmlns:cbvmda="urn:epcglobal:cbv:mda" xmlns:tl="http://epcis.tracelink.com/ns" creationDate="2017-04-11T07:15:00Z" schemaVersion="1.2">
<EPCISHeader>
<sbdh:StandardBusinessDocumentHeader>
<sbdh:HeaderVersion>1.0</sbdh:HeaderVersion>
<sbdh:Sender>
<sbdh:Identifier Authority="GLN">8887771013655</sbdh:Identifier>
</sbdh:Sender>
<sbdh:Receiver>
<sbdh:Identifier Authority="GLN">6667771013655</sbdh:Identifier>
</sbdh:Receiver>
<sbdh:DocumentIdentification>
<sbdh:Standard>EPCglobal</sbdh:Standard>
<sbdh:TypeVersion>1.0</sbdh:TypeVersion>
<sbdh:InstanceIdentifier>00699999999990000000283944908</sbdh:InstanceIdentifier>
<sbdh:Type>Events</sbdh:Type>
<sbdh:CreationDateAndTime>2020-08-17T07:15:00Z</sbdh:CreationDateAndTime>
</sbdh:DocumentIdentification>
</sbdh:StandardBusinessDocumentHeader>
</EPCISHeader>
<EPCISBody>
<EventList>
<AggregationEvent>
<eventTime>2020-08-17T00:12:23.83Z</eventTime>
<eventTimeZoneOffset>-05:00</eventTimeZoneOffset>
<parentID>urn:epc:id:sscc:088202.0401034.00200000034</parentID>
<childEPCs>
<epc>urn:epc:id:sgtin:005434.40000000019</epc>
</childEPCs>
<action>DELETE</action>
<bizStep>urn:epcglobal:cbv:bizstep:unpacking</bizStep>
<disposition>urn:epcglobal:cbv:disp:in_progress</disposition>
<readPoint>
<id>urn:epc:id:sgln:8887777.01384.0</id>
</readPoint>
<bizLocation>
<id>urn:epc:id:sgln:8887777.01384.0</id>
</bizLocation>
</AggregationEvent>
</EventList>
</EPCISBody>
</epcis:EPCISDocument>
Errors
Data Element | Error message | Description |
---|---|---|
Class 1 | ||
AggregationEvent | At least one AggregationEvent is required for disaggregation !!! | This element must have a value specified. |
parentID | Invalid EPC format !!! | This element must be specified in one of the valid formats. |
This element must have a value specified. | ||
childEPCs | epc | Invalid EPC format !!! | This element must be specified in one of the valid formats. |
This element must have a value specified. | ||
action | Action DELETE is required for disaggregation !!! | This element must be specified as DELETE . |
bizStep | bizStep urn:epcglobal:cbv:bizstep:unpacking is required for disaggregation !!! | This element must be specified as urn:epcglobal:cbv:bizstep:unpacking . |
disposition | Disposition urn:epcglobal:cbv:disp:in_progress is required for disaggregation !!! | This element must be specified as urn:epcglobal:cbv:disp:in_progress . |
bizLocation | id | Business location is required for disaggregation !!! | This element must have a value specified. |
Class 3 | ||
The following is thrown for all Class 3 errors: “INTERNALERROR=Internal error from server [server details].” Please contact Support if this error is encountered. |