TransformationEvent
Purpose: Converts input items into output items through an irreversible process.
Example: Creating packaged goods from raw materials (such as chicken breasts from live chickens).
Key elements:
inputEPCListorinputQuantityList: Original items.outputEPCListoroutputQuantityList: Resulting items.- May include Instance/Lot Master Data (ILMD).
transformationID: Links multiple TransformationEvents that belong to the same long-running transformation (for example, inputs declared one day, outputs declared the next day). If inputs and outputs are split across events, atransformationIDis required to ensure the correct association between events.- No
actionelement: The TransformationEvent is the only event type that does not include theactionelement.
JSON payload fields
The following table describes EPCIS 2.0 JSON document payload fields applicable to TransformationEvents.
| Name | Type | Description | Required or optional | Example |
|---|---|---|---|---|
| type | String | The event type discriminator TransformationEvent. | Required | TransformationEvent |
| 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) | urn:uuid:7e6e36d2-… |
| inputEPCList | Array of URI | Instance-level inputs consumed. | Conditionally required. Must include one of inputEPCList, inputQuantityList, outputEPCList, or outputQuantityList. | ["urn:epc:id:sgtin:4012345.011122.25"] |
| inputQuantityList | Array of QuantityElement | Class-level inputs consumed. | Conditionally required. Must include one of inputEPCList, inputQuantityList, outputEPCList, or outputQuantityList. | [{"epcClass": "urn:epc:class:lgtin:4012345.012345.RAW-LOT-1", "quantity": 600, "uom": "KGM"}] |
| outputEPCList | Array of URI | Instance-level outputs produced. | Conditionally required. Must include one of inputEPCList, inputQuantityList, outputEPCList, or outputQuantityList. | ["urn:epc:id:sgtin:4012345.077889.100"] |
| outputQuantityList | Array of quantity elements | Class-level outputs produced. | Conditionally required. Must include one of inputEPCList, inputQuantityList, outputEPCList, or outputQuantityList. | [{"epcClass": "urn:epc:class:lgtin:4012345.066778.FG-LOT-9", "quantity": 580, "uom": "KGM"}] |
| transformationID | URI | Links related TransformationEvents of one transformation. | Conditionally required when inputs and outputs are split across events | urn:epc:id:gdti:4012345.55555.XF-2026-031 |
| 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 shipping. | Optional | commissioning |
| disposition | URI or CBV string | The business condition of the objects after the event. | Optional | active |
| readPoint | Object | The specific location at which the event was observed, such as a dock door. | Optional | { "id": "urn:epc:id:sgln:4012345.00011.987" } |
| bizLocation | Object | The location where the objects are assumed to be after the event. | Optional | { "id": "urn:epc:id:sgln:4012345.00011.0" } |
| bizTransactionList | Array of bizTransaction objects | Business transactions associated with the event. Each entry has type (such as po, inv, desadv) and bizTransaction (the transaction identifier). | Optional | [{ "type": "po", "bizTransaction": "urn:epcglobal:cbv:bt:0614141073467:PO1234" }] |
| sourceList | Array of source objects | Identifies 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" }] |
| ilmd | Object | Master data for the output objects. | Optional | {"cbvmda:lotNumber": "FG-LOT-9"} |
| 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 TransformationEvent 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 — note: NO "action" field on TransformationEvent "type": "TransformationEvent", // Unique event identifier "eventID": "urn:uuid:1b8e4a90-77cd-4f3a-b2d1-aa90c44e5f02", // When the transformation took place "eventTime": "2026-06-12T06:00:00.000Z", "eventTimeZoneOffset": "+01:00", // Optional ID linking this event to other events of the same transformation run "transformationID": "urn:epc:id:gdti:4012345.55555.XF-2026-031", // INPUTS: what was consumed // Class-level input: 600 kg of raw material lot RAW-LOT-1 "inputQuantityList": [ { "epcClass": "urn:epc:class:lgtin:4012345.012345.RAW-LOT-1", // raw material lot "quantity": 600, "uom": "KGM" // kilograms } ], // Instance-level input: one serialized additive container fully consumed "inputEPCList": [ "urn:epc:id:sgtin:4012345.099887.7" ], // OUTPUTS: what was produced // Class-level output: 580 kg of finished-goods lot FG-LOT-9 (yield loss of 20 kg) "outputQuantityList": [ { "epcClass": "urn:epc:class:lgtin:4012345.066778.FG-LOT-9", // finished goods lot "quantity": 580, "uom": "KGM" } ], // Business step: outputs are being brought into existence "bizStep": "commissioning", // Condition of the outputs after the event "disposition": "active", // Production line where the transformation occurred "readPoint": { "id": "urn:epc:id:sgln:4012345.00005.line-4" }, // Plant where the outputs now reside "bizLocation": { "id": "urn:epc:id:sgln:4012345.00005.0" }, // Master data describing the OUTPUT lot "ilmd": { // New lot number assigned to the output "cbvmda:lotNumber": "FG-LOT-9", // Best-before date of the output product "cbvmda:bestBeforeDate": "2026-12-12" }
}
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": "TransformationEvent", "eventTime": "2025-07-10T04:30:00.000-03:00", "recordTime": "2025-08-12T22:08:53.000-03:00", "eventTimeZoneOffset": "+07:30", "eventID": "urn:uuid:00000000-0000-0000-0000-000000000007", "inputQuantityList": [ { "epcClass": "urn:gdst:example.com:product:lot:class:blueoceanprocessors.r2vannameifeed.FEED-LOT-080", "quantity": 1105.97, "uom": "KGM" }, { "epcClass": "urn:gdst:example.com:product:lot:class:blueoceanprocessors.r3vannameifeed.FEED-LOT-002", "quantity": 1105.97, "uom": "KGM" }, { "epcClass": "urn:gdst:example.com:product:lot:class:blueoceanprocessors.vannameihatchlings.HATCH-LOT-001", "quantity": 387000.0 } ], "outputQuantityList": [ { "epcClass": "urn:gdst:example.com:product:lot:class:blueoceanprocessors.vannameishrimprawmaterial.POND-001-LOT21", "quantity": 5694.0, "uom": "KGM" } ], "bizStep": "urn:gdst:bizStep:farmHarvest", "disposition": "active", "readPoint": { "id": "geo:POND-001/021,13.0550,79.9500" }, "bizLocation": { "id": "urn:gdst:example.com:location:loc:blueoceanprocessors.greendeltaaquafarm" }, "bizTransactionList": [{ "type": "po" }], "gdst:productOwner": "urn:gdst:example.com:party:greendeltaaquafarm-1.0", "cbvmda:informationProvider": "urn:gdst:example.com:party:greendeltaaquafarm-1.0"
} Updated about 3 hours ago
Did this page help you?

