AggregationEvent

Purpose: Bundles (aggregates) smaller units into a larger unit, or breaks down (disaggregates) larger units into smaller units.

Example: Pre-shipment, where boxes are loaded onto a pallet for delivery.

Key elements:

  • parentID: Must be an SSCC (Serial Shipping Container Code). Required for ADD and DELETE, optional for OBSERVE.
  • childEPCs or childQuantityList: Must list class-level Logistic Unit Global Trade Item Number (LGTIN) or instance-level Serialized Global Trade Item Number (SGTIN) items. At least one of these elements is required for ADD and OBSERVE. For DELETE, omitting both children means "disaggregate all children" from the parent.
  • action:
    • ADD — children are aggregated to the parent (packing).
    • OBSERVE — an existing aggregation is observed (a pallet passes a reader intact, for example).
    • DELETE — children are removed from the parent (unpacking). To unpack everything from a parent, send the DELETE action with the parentID and no childEPCs or childQuantityList.
  • Hierarchies can be nested: a case aggregated to a pallet; a pallet aggregated to a container — each level is its own AggregationEvent.

JSON payload fields

The following table describes EPCIS 2.0 JSON document payload fields applicable to AggregationEvents.

NameTypeDescriptionRequired or optionalExample
type String The event type discriminator AggregationEventRequired AggregationEvent
eventTime DateTime (ISO 8601) The date and time at which the event occurred. Required 2026-06-12T08:30:00.000Z
eventTimeZoneOffset String The local time zone offset where the event occurred, format ±HH:MM. Required -06:00
eventID URI A globally unique identifier for the event. Strongly recommended, and required if the event may later be referenced by an errorDeclaration.

Typically an ni-hash URI or UUID URN. 
Optional (strongly recommended) ni:///sha-256;df7bb3c352fef7c93c582...?ver=CBV2.0

or

urn:uuid:7e6e36d2-…
parentID URI Identifier of the parent object (usually SSCC or GRAI). Required for ADD and DELETE, optional for OBSERVE urn:epc:id:sscc:4012345.0111222333
childEPCs Array of URIsInstance-level children being aggregated or disaggregated. Conditionally required: must include this element if childQuantityList is absent.["urn:epc:id:sgtin:4012345.011122.25"]
childQuantityList Array of QuantityElementClass-level children. Conditionally required: must include this element if childEPCs is absent.[{"epcClass": "urn:epc:class:lgtin:4012345.012345.LOTA", "quantity": 50}]
action Enum ADD (pack), OBSERVE, DELETE (unpack). Required ADD
certificationInfo URI

or

Array of URIs 
Reference to certification information relevant to the event. Optional https://accreditation.example/cert/123
bizStep URI or CBV string The business step taking place (CBV vocabulary or user vocabulary). In JSON, CBV values may be expressed as bare strings, such as shippingOptional packing
disposition URI or CBV string The business condition of the objects after the event. Optional in_progress
readPoint ObjectThe specific location at which the event was observed, such as a dock door. Optional { "id": "urn:epc:id:sgln:4012345.00011.987" }
bizLocation ObjectThe location where the objects are assumed to be after the event. Optional { "id": "urn:epc:id:sgln:4012345.00011.0" } 
bizTransactionList Array of bizTransaction objectsBusiness transactions associated with the event. Each entry has type (such as po, inv, desadv) and bizTransaction (the transaction identifier). Optional (Required in TransactionEvent) [{ "type": "po", "bizTransaction": "urn:epcglobal:cbv:bt:0614141073467:PO1234" }]
sourceList Array of source objectsIdentifies the originating party or location of a transfer. Each entry has type (such as owning_party, possessing_party, location) and a source URI. Optional [{ "type": "owning_party", "source": "urn:epc:id:pgln:4012345.00001" }]
destinationList Array of destination objects Identifies the receiving party or location of a transfer. Each entry has type (such as owning_party, possessing_party, location) and a destination URI. Optional [{ "type": "owning_party", "destination": "urn:epc:id:pgln:0614141.00001" }]
sensorElementList Array of SensorElement Sensor metadata and readings captured with the event (temperature, humidity, GPS, and so on). Optional Refer to the ObjectEvent page. 
errorDeclaration Object Declares that a previously captured event (with the same eventID) was erroneous.Optional Refer to the Error declaration page.

JSON payload examples

The following sections provide two EPCIS 2.0 aggregation event JSON documents.

Annotated payload

This example provides an annotated JSON payload. Remove the comments in this JSON file before sending data to the blockchain.

{ // Event type discriminator "type": "AggregationEvent", // Unique event identifier "eventID": "urn:uuid:9f0e4c1a-43e2-4b8e-8f0e-2b7d9f33a001", // When the cases were packed onto the pallet "eventTime": "2026-06-12T11:00:00.000Z", "eventTimeZoneOffset": "+01:00", // The parent logistic unit: the pallet's SSCC "parentID": "urn:epc:id:sscc:4012345.0111222333", // Instance-level children: serialized cases placed on the pallet "childEPCs": [ "urn:epc:id:sgtin:4012345.011122.25", // case #25 "urn:epc:id:sgtin:4012345.011122.26", // case #26 "urn:epc:id:sgtin:4012345.011122.27" // case #27 ], // Class-level children: 50 kg of lot-managed bulk product also on the pallet "childQuantityList": [ { // Lot-level class identifier (LGTIN) "epcClass": "urn:epc:class:lgtin:4012345.012345.LOT2026A", // Amount of the class-level child "quantity": 50, // Unit of measure (KGM = kilograms) "uom": "KGM" } ], // ADD: children are being aggregated TO the parent (packing) "action": "ADD", // CBV business step: packing "bizStep": "packing", // Disposition after packing: container is closed and ready "disposition": "container_closed", // Packing station where the aggregation was performed "readPoint": { "id": "urn:epc:id:sgln:4012345.00005.pack-2" }, // Warehouse where the pallet now resides "bizLocation": { "id": "urn:epc:id:sgln:4012345.00006.0" } }

Ready to use

The following JSON file is ready to use. Define your own values for each tag, then send the data to the blockchain.

{ "type": "AggregationEvent", "eventTime": "2025-08-01T09:01:00.000-03:00", "recordTime": "2025-08-20T17:47:09.000-03:00", "eventTimeZoneOffset": "+07:30", "eventID": "urn:uuid:00000000-0000-0000-0000-000000000003", "parentID": "urn:gdst:example.com:lpn:obj:blueoceanprocessors.CONT-EXAMPLE-001", "childEPCs": [], "action": "ADD", "bizStep": "assembling", "disposition": "in_progress", "bizLocation": { "id": "urn:gdst:example.com:location:loc:blueoceanprocessors.blueoceanprocessors" }, "bizTransactionList": [{ "type": "po", "bizTransaction": "PO-EXAMPLE-0002" }], "childQuantityList": [ { "epcClass": "urn:gdst:example.com:product:lot:class:acmeseafood.exshrimp532ozvb31-40rawpndtloffstpp.LOT-2025-A002", "quantity": 1878.0, "uom": "LBR" }, { "epcClass": "urn:gdst:example.com:product:lot:class:acmeseafood.exshrimp532ozvb31-40rawpndtloffstpp.LOT-2025-A001", "quantity": 1622.0, "uom": "LBR" } ], "ilmd": { "gdst:broodstockSource": "Farmed", "gdst:aquacultureMethod": "semi-intensive", "cbvmda:certificationList": { "certification": [ { "gdst:certificationType": "urn:gdst:certType:harvestCoC", "certificationAgency": "Global Seafood Alliance", "certificationStandard": "BAP (Processor)", "certificationValue": "4", "certificationIdentification": "CERT-PROC-001" }, { "gdst:certificationType": "urn:gdst:certType:harvestCoC", "certificationAgency": "Global Seafood Alliance", "certificationStandard": "BAP (Hatchery)", "certificationValue": "4", "certificationIdentification": "CERT-HATCH-001" }, { "gdst:certificationType": "urn:gdst:certType:harvestCoC", "certificationAgency": "Global Seafood Alliance", "certificationStandard": "BAP (Farm)", "certificationValue": "4", "certificationIdentification": "CERT-FARM-002" }, { "gdst:certificationType": "urn:gdst:certType:harvestCoC", "certificationAgency": "Global Seafood Alliance", "certificationStandard": "BAP (Feed Mill)", "certificationValue": "4", "certificationIdentification": "CERT-FEED-001" } ] } }, "cbvmda:informationProvider": "urn:gdst:example.com:party:blueoceanprocessors.0" }


Did this page help you?