Certifications
Creates a Commission event with event-level CertificationList data. Location.Details and Product.Details can be supplied to create the location, trade partner, and product on the go. CertificationList applies to the complete event and must not be placed inside ProductInstances.
curl -X POST "https://connect.wholechain.com/Integration/Events" \
-H "Content-Type: application/json" \
-H "X-API-KEY: example_string" \
-d '{
"Events": [
{
"$type": "commission",
"Location": {
"Id": "processing_001",
"Details": {
"TradePartner": {
"Id": "processor_001",
"Name": "Processor Name",
"ConnectionType": "SELF",
"Duns": "123456789"
},
"Name": "Processing Facility",
"Gln": "9506000140445",
"Extension": "SomeExtension",
"DunsPlus4": "1234",
"ContactInformation": {
"Name": "Processing Contact",
"Phone": "+1234567890",
"Email": "processing@example.com"
},
"Address": {
"City": "Cape Town",
"State": "Western Cape",
"Country": "South Africa",
"AddressLine1": "123 Processing Street",
"AddressLine2": "Building 2",
"PostalCode": "8001",
"GeoCoordinates": {
"Latitude": -33.9249,
"Longitude": 18.4241
}
}
}
},
"ProductInstances": [
{
"Quantity": 190.75,
"LotSerial": "lot_001",
"Product": {
"Id": "rawgoods_001",
"Details": {
"ProductIdentifierType": "Lot",
"Name": "Raw Goods",
"SimpleUnitOfMeasurement": "Kgm",
"SharingPolicy": "Open",
"UnitDescriptor": "Cases",
"UnitQuantity": 10.5,
"GTIN": "12345678912343",
"PLU": "4001",
"MasterData": [
{
"name": "Gear Type",
"namespace": "custom",
"value": "GEAR TYPE_VALUE"
}
]
}
}
}
],
"Id": "commission_001_cert",
"PurchaseOrder": "PO-12345",
"InvoiceNumber": "INV-12345",
"EventTime": "2026-09-28T13:00:00",
"EventTimeZone": "+00:00",
"CertificationList": [
{
"Type": "urn:gdst:certType:harvestCoC",
"Standard": "MSC Chain of Custody",
"Agency": "MSC",
"Value": "YES",
"Identification": "MSC-C-12345"
},
{
"Type": "urn:gdst:certType:fishingAuth",
"Standard": "Commercial Fishing Authorization",
"Agency": "Example Fisheries Authority",
"Value": "VALID",
"Identification": "FA-2026-7781"
}
]
}
]
}'
import requests
import json
url = "https://connect.wholechain.com/Integration/Events"
headers = {
"Content-Type": "application/json",
"X-API-KEY": "example_string"
}
data = {
"Events": [
{
"$type": "commission",
"Location": {
"Id": "processing_001",
"Details": {
"TradePartner": {
"Id": "processor_001",
"Name": "Processor Name",
"ConnectionType": "SELF",
"Duns": "123456789"
},
"Name": "Processing Facility",
"Gln": "9506000140445",
"Extension": "SomeExtension",
"DunsPlus4": "1234",
"ContactInformation": {
"Name": "Processing Contact",
"Phone": "+1234567890",
"Email": "processing@example.com"
},
"Address": {
"City": "Cape Town",
"State": "Western Cape",
"Country": "South Africa",
"AddressLine1": "123 Processing Street",
"AddressLine2": "Building 2",
"PostalCode": "8001",
"GeoCoordinates": {
"Latitude": -33.9249,
"Longitude": 18.4241
}
}
}
},
"ProductInstances": [
{
"Quantity": 190.75,
"LotSerial": "lot_001",
"Product": {
"Id": "rawgoods_001",
"Details": {
"ProductIdentifierType": "Lot",
"Name": "Raw Goods",
"SimpleUnitOfMeasurement": "Kgm",
"SharingPolicy": "Open",
"UnitDescriptor": "Cases",
"UnitQuantity": 10.5,
"GTIN": "12345678912343",
"PLU": "4001",
"MasterData": [
{
"name": "Gear Type",
"namespace": "custom",
"value": "GEAR TYPE_VALUE"
}
]
}
}
}
],
"Id": "commission_001_cert",
"PurchaseOrder": "PO-12345",
"InvoiceNumber": "INV-12345",
"EventTime": "2026-09-28T13:00:00",
"EventTimeZone": "+00:00",
"CertificationList": [
{
"Type": "urn:gdst:certType:harvestCoC",
"Standard": "MSC Chain of Custody",
"Agency": "MSC",
"Value": "YES",
"Identification": "MSC-C-12345"
},
{
"Type": "urn:gdst:certType:fishingAuth",
"Standard": "Commercial Fishing Authorization",
"Agency": "Example Fisheries Authority",
"Value": "VALID",
"Identification": "FA-2026-7781"
}
]
}
]
}
response = requests.post(url, headers=headers, json=data)
print(response.json())
const response = await fetch("https://connect.wholechain.com/Integration/Events", {
method: "POST",
headers: {
"Content-Type": "application/json",
"X-API-KEY": "example_string"
},
body: JSON.stringify({
"Events": [
{
"$type": "commission",
"Location": {
"Id": "processing_001",
"Details": {
"TradePartner": {
"Id": "processor_001",
"Name": "Processor Name",
"ConnectionType": "SELF",
"Duns": "123456789"
},
"Name": "Processing Facility",
"Gln": "9506000140445",
"Extension": "SomeExtension",
"DunsPlus4": "1234",
"ContactInformation": {
"Name": "Processing Contact",
"Phone": "+1234567890",
"Email": "processing@example.com"
},
"Address": {
"City": "Cape Town",
"State": "Western Cape",
"Country": "South Africa",
"AddressLine1": "123 Processing Street",
"AddressLine2": "Building 2",
"PostalCode": "8001",
"GeoCoordinates": {
"Latitude": -33.9249,
"Longitude": 18.4241
}
}
}
},
"ProductInstances": [
{
"Quantity": 190.75,
"LotSerial": "lot_001",
"Product": {
"Id": "rawgoods_001",
"Details": {
"ProductIdentifierType": "Lot",
"Name": "Raw Goods",
"SimpleUnitOfMeasurement": "Kgm",
"SharingPolicy": "Open",
"UnitDescriptor": "Cases",
"UnitQuantity": 10.5,
"GTIN": "12345678912343",
"PLU": "4001",
"MasterData": [
{
"name": "Gear Type",
"namespace": "custom",
"value": "GEAR TYPE_VALUE"
}
]
}
}
}
],
"Id": "commission_001_cert",
"PurchaseOrder": "PO-12345",
"InvoiceNumber": "INV-12345",
"EventTime": "2026-09-28T13:00:00",
"EventTimeZone": "+00:00",
"CertificationList": [
{
"Type": "urn:gdst:certType:harvestCoC",
"Standard": "MSC Chain of Custody",
"Agency": "MSC",
"Value": "YES",
"Identification": "MSC-C-12345"
},
{
"Type": "urn:gdst:certType:fishingAuth",
"Standard": "Commercial Fishing Authorization",
"Agency": "Example Fisheries Authority",
"Value": "VALID",
"Identification": "FA-2026-7781"
}
]
}
]
})
});
const data = await response.json();
console.log(data);
package main
import (
"fmt"
"net/http"
"bytes"
"encoding/json"
)
func main() {
data := []byte(`{
"Events": [
{
"$type": "commission",
"Location": {
"Id": "processing_001",
"Details": {
"TradePartner": {
"Id": "processor_001",
"Name": "Processor Name",
"ConnectionType": "SELF",
"Duns": "123456789"
},
"Name": "Processing Facility",
"Gln": "9506000140445",
"Extension": "SomeExtension",
"DunsPlus4": "1234",
"ContactInformation": {
"Name": "Processing Contact",
"Phone": "+1234567890",
"Email": "processing@example.com"
},
"Address": {
"City": "Cape Town",
"State": "Western Cape",
"Country": "South Africa",
"AddressLine1": "123 Processing Street",
"AddressLine2": "Building 2",
"PostalCode": "8001",
"GeoCoordinates": {
"Latitude": -33.9249,
"Longitude": 18.4241
}
}
}
},
"ProductInstances": [
{
"Quantity": 190.75,
"LotSerial": "lot_001",
"Product": {
"Id": "rawgoods_001",
"Details": {
"ProductIdentifierType": "Lot",
"Name": "Raw Goods",
"SimpleUnitOfMeasurement": "Kgm",
"SharingPolicy": "Open",
"UnitDescriptor": "Cases",
"UnitQuantity": 10.5,
"GTIN": "12345678912343",
"PLU": "4001",
"MasterData": [
{
"name": "Gear Type",
"namespace": "custom",
"value": "GEAR TYPE_VALUE"
}
]
}
}
}
],
"Id": "commission_001_cert",
"PurchaseOrder": "PO-12345",
"InvoiceNumber": "INV-12345",
"EventTime": "2026-09-28T13:00:00",
"EventTimeZone": "+00:00",
"CertificationList": [
{
"Type": "urn:gdst:certType:harvestCoC",
"Standard": "MSC Chain of Custody",
"Agency": "MSC",
"Value": "YES",
"Identification": "MSC-C-12345"
},
{
"Type": "urn:gdst:certType:fishingAuth",
"Standard": "Commercial Fishing Authorization",
"Agency": "Example Fisheries Authority",
"Value": "VALID",
"Identification": "FA-2026-7781"
}
]
}
]
}`)
req, err := http.NewRequest("POST", "https://connect.wholechain.com/Integration/Events", bytes.NewBuffer(data))
if err != nil {
panic(err)
}
req.Header.Set("Content-Type", "application/json")
req.Header.Set("X-API-KEY", "example_string")
client := &http.Client{}
resp, err := client.Do(req)
if err != nil {
panic(err)
}
defer resp.Body.Close()
fmt.Println("Response Status:", resp.Status)
}
require 'net/http'
require 'json'
uri = URI('https://connect.wholechain.com/Integration/Events')
http = Net::HTTP.new(uri.host, uri.port)
http.use_ssl = true
request = Net::HTTP::Post.new(uri)
request['Content-Type'] = 'application/json'
request['X-API-KEY'] = 'example_string'
request.body = '{
"Events": [
{
"$type": "commission",
"Location": {
"Id": "processing_001",
"Details": {
"TradePartner": {
"Id": "processor_001",
"Name": "Processor Name",
"ConnectionType": "SELF",
"Duns": "123456789"
},
"Name": "Processing Facility",
"Gln": "9506000140445",
"Extension": "SomeExtension",
"DunsPlus4": "1234",
"ContactInformation": {
"Name": "Processing Contact",
"Phone": "+1234567890",
"Email": "processing@example.com"
},
"Address": {
"City": "Cape Town",
"State": "Western Cape",
"Country": "South Africa",
"AddressLine1": "123 Processing Street",
"AddressLine2": "Building 2",
"PostalCode": "8001",
"GeoCoordinates": {
"Latitude": -33.9249,
"Longitude": 18.4241
}
}
}
},
"ProductInstances": [
{
"Quantity": 190.75,
"LotSerial": "lot_001",
"Product": {
"Id": "rawgoods_001",
"Details": {
"ProductIdentifierType": "Lot",
"Name": "Raw Goods",
"SimpleUnitOfMeasurement": "Kgm",
"SharingPolicy": "Open",
"UnitDescriptor": "Cases",
"UnitQuantity": 10.5,
"GTIN": "12345678912343",
"PLU": "4001",
"MasterData": [
{
"name": "Gear Type",
"namespace": "custom",
"value": "GEAR TYPE_VALUE"
}
]
}
}
}
],
"Id": "commission_001_cert",
"PurchaseOrder": "PO-12345",
"InvoiceNumber": "INV-12345",
"EventTime": "2026-09-28T13:00:00",
"EventTimeZone": "+00:00",
"CertificationList": [
{
"Type": "urn:gdst:certType:harvestCoC",
"Standard": "MSC Chain of Custody",
"Agency": "MSC",
"Value": "YES",
"Identification": "MSC-C-12345"
},
{
"Type": "urn:gdst:certType:fishingAuth",
"Standard": "Commercial Fishing Authorization",
"Agency": "Example Fisheries Authority",
"Value": "VALID",
"Identification": "FA-2026-7781"
}
]
}
]
}'
response = http.request(request)
puts response.body
{
"message": "Events processed successfully",
"result": [
{
"id": "commission_001",
"status": "Created",
"products": [
{
"id": "rawgoods_001",
"status": "Created"
}
],
"locations": [
{
"id": "processing_001",
"status": "Created"
}
]
}
]
}
/Integration/Events
Target server for requests. Edit to use your own host.
The media type of the request body
Request Preview
Response
Response will appear here after sending the request
Responses
Introduction
Use CertificationList to record certification, authorization, and policy metadata associated with a Wholechain event.
Examples include chain-of-custody certifications, fishing authorizations, and human-rights or sourcing policies.
Supported events
The current ERP event payloads support event-level certifications for:
- Commission
- Aggregation and Disaggregation
- Decommission
- Internal Ship and External Ship
- Receive
- Transform
- Observe
Add CertificationList to the event object—not to an item in ProductInstances, InputProducts, or OutputProducts.
API endpoint
POST https://connect.wholechain.com/Integration/Events
Sandbox:
POST https://connect-sandbox.wholechain.com/Integration/Events
Send these request headers:
X-API-KEY: YOUR_API_KEY
Content-Type: application/json
accept: */*
Certification schema
CertificationList is an array. Each entry has the following shape:
| Field | Type | API requirement | Description |
|---|---|---|---|
Type | string | Optional | Certification category |
Standard | string | Optional | Certification standard or policy name. |
Agency | string | Optional | Organization that issued or manages the certification. |
Value | string | Optional | Certification value or status, such as YES, NO, VALID, or another scheme-defined value. |
Identification | string | Optional | Certificate, license, authorization, or registration identifier. |
Although the API documents every field as optional, provide enough information to identify and interpret the certification reliably. In most integrations, that means a stable Type plus the applicable standard, agency, status, and identifier.
Use Type as the canonical property name. Do not substitute CertificationType.
Minimal example
{
"CertificationList": [
{
"Type": "urn:gdst:certType:harvestCoC",
"Standard": "MSC Chain of Custody",
"Agency": "MSC",
"Value": "YES",
"Identification": "MSC-C-12345"
}
]
}
Multiple certifications
Send one array entry for each certification or authorization.
{
"CertificationList": [
{
"Type": "urn:gdst:certType:harvestCoC",
"Standard": "MSC Chain of Custody",
"Agency": "MSC",
"Value": "YES",
"Identification": "MSC-C-12345"
},
{
"Type": "urn:gdst:certType:fishingAuth",
"Standard": "Commercial Fishing Authorization",
"Agency": "Example Fisheries Authority",
"Value": "VALID",
"Identification": "FA-2026-7781"
},
{
"Type": "urn:gdst:certType:humanPolicy",
"Standard": "Supplier Human Rights Policy",
"Agency": "Example Foods, Inc.",
"Value": "ACCEPTED",
"Identification": "HRP-4.2"
}
]
}
Complete event example
The array belongs at the same level as Id, EventTime, and ProductInstances.
{
"Events": [
{
"$type": "commission",
"Location": {
"Id": "landing_site_001"
},
"ProductInstances": [
{
"Quantity": 190.75,
"LotSerial": "CATCH-2026-184",
"Product": {
"Id": "yellowfin_tuna_001"
}
}
],
"Id": "commission-0002",
"EventTime": "2026-09-28T13:00:00",
"EventTimeZone": "+00:00",
"CertificationList": [
{
"Type": "urn:gdst:certType:harvestCoC",
"Standard": "MSC Chain of Custody",
"Agency": "MSC",
"Value": "YES",
"Identification": "MSC-C-12345"
},
{
"Type": "urn:gdst:certType:fishingAuth",
"Standard": "Commercial Fishing Authorization",
"Agency": "Example Fisheries Authority",
"Value": "VALID",
"Identification": "FA-2026-7781"
}
]
}
]
}
Modeling guidance
- Use the certification scheme's official name in
Standard. - Use the issuing or governing organization in
Agency. - Put the certificate or authorization number in
Identificationwhen one exists. - Omit optional fields that do not apply instead of filling them with arbitrary placeholder text.
- Keep the supporting certificate document in your system of record and use a stable identifier that can be resolved during an audit.
Event-level scope
CertificationList applies to the event as a whole.