AssociationEvent

Purpose: Captures an association between objects, typically between an asset and a sub-asset or an attached device. Examples include: mounting a temperature sensor onto a reusable container, pairing an RFID tag with a returnable transport item, or installing a part on equipment.

  • AssociationEvent vs. AggregationEvent: Aggregation expresses containment of trade items for logistics (such as cases on a pallet) and implies that the children move with the parent. Association expresses a physical or logical relationship between assets that is not part of a packing or containment process (such as when a sensor is bolted to a container).

Example: Mounting a sensor onto a reusable container.

Key Elements:

  • parentID: The asset being associated to, such as the container. Required for ADD and DELETE, optional for OBSERVE.
  • childEPCs or childQuantityList: The associated assets, such as the sensor being attached to the container.
  • action: Specifies the kind of association event taking place.
    • ADD: Establishment of the association (attach/install).
    • OBSERVE: Observation of an existing association.
    • DELETE: The removal of the association (detach/remove).

JSON payload fields

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

NameTypeDescriptionRequired or optionalExample
type String The event type discriminator AssociationEventRequired AssociationEvent
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. 
Required for ADD and DELETE, optional for OBSERVEurn:epc:id:grai:4012345.55555.987
childEPCs Array of URIsInstance-level children being aggregated or disaggregated. Conditionally required: must include this element if childQuantityList is absent.["urn:epc:id:giai:4012345.sensor-77"]
childQuantityList Array of QuantityElementClass-level children. Conditionall required: must include this element if childEPCs is absent.[{"epcClass": "urn:epc:idpat:sgtin:4012345.011111.*", "quantity": 4}]
action Enum ADD (associate), OBSERVE, DELETE (disassociate). Required ADD
bizStep URI or CBV string Typically assembling, installing, removing, sensor_reporting.Optional assembling
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" } 

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": "AssociationEvent", // Unique event identifier "eventID": "urn:uuid:6a2f9d11-0c4e-44d7-8b3a-5e7f00aa12cd", // When the sensor was attached "eventTime": "2026-06-12T07:45:00.000Z", "eventTimeZoneOffset": "+01:00", // The parent asset: a returnable container identified by a GRAI "parentID": "urn:epc:id:grai:4012345.55555.987", // The child asset being attached: a temperature logger identified by a GIAI "childEPCs": [ "urn:epc:id:giai:4012345.sensor-77" ], // ADD: the association is being established (sensor attached to container) "action": "ADD", // CBV business step: assembling (attaching the device) "bizStep": "assembling", // Condition after the event "disposition": "in_progress", // Maintenance bay where the attachment happened "readPoint": { "id": "urn:epc:id:sgln:4012345.00005.maint-1" }, // Site where the container now is "bizLocation": { "id": "urn:epc:id:sgln:4012345.00005.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": "AssociationEvent", "eventID": "urn:uuid:6a2f9d11-0c4e-44d7-8b3a-5e7f00aa12cd", "eventTime": "2026-06-12T07:45:00.000Z", "eventTimeZoneOffset": "+01:00", "parentID": "urn:epc:id:grai:4012345.55555.987", "childEPCs": [ "urn:epc:id:giai:4012345.sensor-77" ], "action": "ADD", "bizStep": "assembling", "disposition": "in_progress", "readPoint": { "id": "urn:epc:id:sgln:4012345.00005.maint-1" }, "bizLocation": { "id": "urn:epc:id:sgln:4012345.00005.0" }
}


Did this page help you?