A Transform event describes an activity that irreversibly changes a product, transforming it into a new, traceable output product with a new Primary ID (i.e. a new serial number or lot number). It could be that raw materials are combined, cut or melted to make a new product, or that a product is packaged for consumption.
How it works
A Wholechain user selects the input item(s) they want to transform from their current inventory, and is prompted to specify details about the output product.
The user can enter the output product details manually or via CSV upload for multiple items.
The new product appears in the Current Inventory of that product page.
Users can also use the "+ product" tab in the event drawer to transform multiple inputs into multiple output products.
This event can also be performed through the API
Practical Examples
At a seafood processor, an input lot of whole sockeye salmon is processed into three distinct production lots of packaged sockeye salmon fillets.
Traceable harvests from multiple fishing vessels are irreversibly combined into one container of whole sockeye salmon upon landing.
At a pasta factory, workers mix flour, egg and water input products to create 4 differently-shaped pasta output products.
Authentication
The API uses an API key (X-API-KEY) to authenticate requests. Each user has a unique API key that controls access to event details tied to their company. To understand where this can be found, please visit the Authentication page.
Two API Payload Options for the Transform Event
When using the Transform Event API, there are two distinct payload options available, depending on your needs:
1. Reference Existing Products, Trade Partners, and Locations
This payload is designed for users who already have their products, trade partners, and locations pre-configured within their Wholechain account.
It references these existing entities using their unique IDs.
2. Create Products, Locations, and Trade Partners On-the-Go
This payload is designed for users who want to dynamically create new products, trade partners, or locations directly through the API without pre-configuring them in Wholechain.
The API intelligently processes the payload to identify and create new entities if the provided IDs do not already exist in your account.
Creating Locations, Trade Partners, and Products On-the-Go
In many cases, users may need the ability to dynamically create new locations, trade partners, or products directly within the API instead of pre-configuring them within the Wholechain platform. This is particularly useful when dealing with constantly changing locations, new trade partners, or orders that cannot feasibly be manually added to both an ERP system and Wholechain.
To address this need, we’ve introduced the "Details" object within specific sections of the API payload. This allows the API to intelligently handle new or existing entities, ensuring a seamless and flexible experience.
How It Works
Details Section
The "Details" section is used to provide additional metadata for locations, trade partners, or products. The behavior of the API depends on whether the IDs in the payload already exist in your Wholechain account. Here’s how the process works:
1. ID Matching Logic:
If the ID in the payload already exists in your Wholechain account, the API will skip over the "Details" section and use the pre-existing information from your Wholechain system.
If the ID is new (i.e., it does not exist in your Wholechain account), the API will use the information in the "Details" section to create a new location, trade partner, or product.
2. Mix-and-Match Capabilities:
You can mix new and existing entities within the same API request. For example:
Use a new location ID with details for creation.
Reference an existing trade partner ID without additional details.
Reference an existing product ID while creating a new location or trade partner.
3. Required Fields for New Entities:
When creating a new entity (location, trade partner, or product), provide an ID that does not currently exist in your Wholechain account. Include additional metadata in the "Details" section (e.g., name, address, GLN, and other relevant fields).
Example Payload Behavior
ShipFromLocation
If the ShipFromLocation.Id exists in your Wholechain account:
The API skips the "Details" section and pulls the existing location information.
If the ShipFromLocation.Id does not exist:
The API reads the "Details" section to create a new location.
TradePartner in ShipFromLocation
If the TradePartner.Id exists in your Wholechain account:
The API skips the trade partner details and references the existing data.
If the TradePartner.Id is new:
The API uses the trade partner information from the "Details" section to create a new trade partner.
ProductInstances
If the Product.Id exists in your Wholechain account:
The API skips the product details and references the existing product information.
If the Product.Id is new:
The API creates a new product based on the details provided in the payload.
Key Considerations
Ensure that IDs for new entities (locations, trade partners, products) are unique and do not conflict with existing IDs in your Wholechain account.
The "Details" section provides flexibility to dynamically create new entities while still allowing references to existing ones.
If a field is skipped (e.g., "Details" for an existing ID), no changes will be made to the existing entity in Wholechain.
Location Object Details
Column Name
Data Type
Description
Identifier
Required
TradePartner
OBJECT
Details of the trade partner associated with the location.
Not Primary
Yes if creating new
TradePartner.Id
STRING
Unique identifier for the trade partner.
Primary
Yes if creating new
TradePartner.Name
STRING
Name of the trade partner.
Not Primary
Yes if creating new
TradePartner.ConnectionType
STRING
Type of connection (e.g., SUPPLIER).
Not Primary
Yes if creating new
TradePartner.Duns
STRING
DUNS (Data Universal Numbering System) number of the partner.
Not Primary
Yes if creating new
Name
STRING
Name of the location.
Not Primary
Yes if creating new
Gln
STRING
Global Location Number of the location.
Not Primary
No
Extension
STRING
Additional location information.
Not Primary
No
ContactInformation
OBJECT
Contact information for the location.
Not Primary
Yes if creating new
ContactInformation.Name
STRING
Name of the contact person at the location.
Not Primary
Yes if creating new
ContactInformation.Phone
STRING
Phone number of the contact person.
Not Primary
Yes if creating new
ContactInformation.Email
STRING
Email address of the contact person.
Not Primary
Yes if creating new
Address
OBJECT
Address details of the location.
Not Primary
Yes if creating new
Address.City
STRING
City where the location is situated.
Not Primary
Yes if creating new
Address.State
STRING
State where the location is situated.
Not Primary
Yes if creating new
Address.Country
STRING
Country of the location.
Not Primary
Yes if creating new
Address.AddressLine1
STRING
Primary address line of the location.
Not Primary
Yes if creating new
Address.AddressLine2
STRING
Secondary address line of the location.
Not Primary
No
Address.PostalCode
STRING
Postal code of the location.
Not Primary
Yes if creating new
Address.GeoCoordinates
OBJECT
Geographical coordinates of the location.
Not Primary
No
GeoCoordinates.Latitude
DECIMAL
Latitude of the location.
Not Primary
No
GeoCoordinates.Longitude
DECIMAL
Longitude of the location.
Not Primary
No
ProductInstance Details Object
Column Name
Data Type
Description
Identifier
Required
Quantity
DECIMAL
Quantity of the product instance.
Not Primary
Yes if creating new
LotSerial
STRING
Lot or serial number of the product instance.
Not Primary
Yes if creating new
Product
OBJECT
Details of the product being received.
Not Primary
Yes if creating new
Product.Id
STRING
Unique identifier for the product.
Primary
Yes if creating new
Product.Details
OBJECT
Additional product metadata.
Not Primary
Yes if creating new
Product.Details.Name
STRING
Name of the product.
Not Primary
Yes if creating new
Product.Details.SimpleUnitOfMeasurement
STRING
Unit of measurement (e.g., Lbs).
Not Primary
Yes if creating new
Product.Details.SharingPolicy
STRING
Sharing policy for the product (e.g., Restricted).
Not Primary
Yes if creating new
Product.Details.ProductIdentifierType
STRING
Type of product identifier (e.g., Lot).
Not Primary
Yes if creating new
TlcSource
OBJECT
Source information for the traceability lot code (TLC).
Not Primary
No
TlcSource.Name
STRING
Name of the source.
Not Primary
No
TlcSource.City
STRING
City of the source.
Not Primary
No
TlcSource.State
STRING
State of the source.
Not Primary
No
TlcSource.Country
STRING
Country of the source.
Not Primary
No
TlcSource.AddressLine1
STRING
Primary address line of the source.
Not Primary
No
TlcSource.AddressLine2
STRING
Secondary address line of the source.
Not Primary
No
TlcSource.PostalCode
STRING
Postal code of the source.
Not Primary
No
TlcSource.GeoCoordinates
OBJECT
Geographical coordinates of the source.
Not Primary
No
GeoCoordinates.Latitude
DECIMAL
Latitude of the source.
Not Primary
No
GeoCoordinates.Longitude
DECIMAL
Longitude of the source.
Not Primary
No
Example Payload
data={"Events":[{"$type":"transform","Location":{"Id":"processing_000","Details":{"TradePartner":{"Id":"TpId123","Name":"Processing Facility","ConnectionType":"SELF","Duns":"123456789"},"Name":"Processing Center","Gln":"9506000140445","Extension":"SomeExtension","ContactInformation":{"Name":"Contact Name","Phone":"+1234567890","Email":"contact@example.com"},"Address":{"City":"City Name","State":"State Name","Country":"Country Name","AddressLine1":"123 Main St","AddressLine2":"Apt 4B","PostalCode":"12345","GeoCoordinates":{"Latitude":12.345678,"Longitude":98.765432}}}},"InputProducts":[{"Quantity":180.75,"LotSerial":"123","Product":{"Id":"raw_goods_000","Details":{"Name":"RawGoods","SimpleUnitOfMeasurement":"Lbs","SharingPolicy":"Restricted","ProductIdentifierType":"Lot"}},"TlcSource":{"Name":"TLC_123","City":"City Name","State":"State Name","Country":"Country Name","AddressLine1":"123 Main St","AddressLine2":"Apt 4B","PostalCode":"12345","GeoCoordinates":{"Latitude":12.345678,"Longitude":98.765432}}}],"OutputProducts":[{"Quantity":180.0,"LotSerial":"456","Product":{"Id":"finished_goods_000","Details":{"Name":"FinishedGoods","SimpleUnitOfMeasurement":"Lbs","SharingPolicy":"Open","ProductIdentifierType":"Lot"}},"TlcSource":{"Name":"TLC_456","City":"City Name","State":"State Name","Country":"Country Name","AddressLine1":"123 Main St","AddressLine2":"Apt 4B","PostalCode":"12345","GeoCoordinates":{"Latitude":12.345678,"Longitude":98.765432}}}],"Id":"0002","PurchaseOrder":"1990091","InvoiceNumber":"12314154","BizStep":"urn:epcglobal:cbv:bizstep:shipping","Disposition":"urn:epcglobal:cbv:disp:in_transit","EventTime":"2024-03-25T15:00:00+00:00","EventTimeZone":"-05:00","CustomProperties":[],"CertificationList":[]}]}