{
  "openapi": "3.0.1",
  "info": {
    "title": "Controlant Integrations API",
    "description": "Main integration API layer for the Controlant IoT infrastructure.<br/> <info>Note that any JSON accepted and returned by this API must follow the JSON standard as defined in the <a href=\"https://www.json.org/\" target=\"_blank\">ECMA-404 standard</a> with the following amendments. <br/>&nbsp;<br/>1. JSON property names are case invariant and no guarantees can be made regarding the casing of names returned by the API. This means that no difference is made between upper and lower case letters in property names. <br/>&nbsp;<br/>2. The relative order of JSON names in responses cannot be guaranteed. This means that the order that names appear in the responses should not be depended on when parsing and processing responses.</info>",
    "termsOfService": "https://controlant.com/support",
    "contact": {
      "name": "Controlant",
      "email": "integrations@controlant.com"
    },
    "license": {
      "name": "Proprietary",
      "url": "https://controlant.com/support"
    },
    "version": "v1",
    "x-logo": {
      "url": "img/logo-lg.png",
      "backgroundColor": "#FFFFFF",
      "altText": "Controlant Logo",
      "href": "https://controlant.com/"
    }
  },
  "paths": {
    "/api/events/certificates/create": {
      "post": {
        "tags": [
          "Events"
        ],
        "summary": "Create Certificate",
        "description": "<span class=\"addon-feature\">Requires enabling the Event System API key feature to use standard event features, please contact your Controlant account manager for further details.</span>Creates (registers) a certificate to use with authentication",
        "requestBody": {
          "description": "An Event Subscription Certificate create request",
          "content": {
            "application/json": {
              "schema": {
                "allOf": [
                  {
                    "$ref": "#/components/schemas/EventSubscriptionCertificateCreateRequest"
                  }
                ],
                "description": "Defines an Event Subscription Certificate Create Request"
              },
              "example": {
  "reference": "MyEventCertificateReference",
  "certificateType": "PFX",
  "certificatePassword": "<omitted>",
  "certificateData": "<omitted Base-64 encoded certificate data>"
}
            }
          }
        },
        "responses": {
          "200": {
            "description": "OK",
            "headers": {
              "x-correlation-id": {
                "description": "The unique id identifying the original requests path through the Controlant systems. Callers should log this value to facilitate easier troubleshooting and incident resolution.",
                "schema": {
                  "type": "string"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/EventSubscriptionCertificateCreateResponse"
                },
                "example": {
  "certificateReference": "MyEventCertReference",
  "success": true,
  "responseTime": 0
}
              }
            }
          },
          "400": {
            "description": "Bad Request",
            "headers": {
              "x-correlation-id": {
                "description": "The unique id identifying the original requests path through the Controlant systems. Callers should log this value to facilitate easier troubleshooting and incident resolution.",
                "schema": {
                  "type": "string"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/GenericInputValidationErrorResponse"
                },
                "example": {
  "errorMessage": "One or more validation errors occurred.",
  "status": 400,
  "errors": {
    "Reference": "'Reference' must not be empty.",
    "OriginReference": "'OriginReference' must not be empty.",
    "DestinationReference": "'DestinationReference' must not be empty."
  },
  "success": false,
  "responseTime": 0
}
              }
            }
          },
          "500": {
            "description": "Internal Server Error",
            "headers": {
              "x-correlation-id": {
                "description": "The unique id identifying the original requests path through the Controlant systems. Callers should log this value to facilitate easier troubleshooting and incident resolution.",
                "schema": {
                  "type": "string"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                },
                "example": {
  "errorMessage": "Unexpected error while processing request",
  "status": 500,
  "success": false,
  "responseTime": 150,
  "message": "Internal Error"
}
              }
            }
          }
        }
      }
    },
    "/api/events/certificates/delete": {
      "post": {
        "tags": [
          "Events"
        ],
        "summary": "Delete Certificate",
        "description": "<span class=\"addon-feature\">Requires enabling the Event System API key feature to use standard event features, please contact your Controlant account manager for further details.</span>Deletes a previously created certificate for subscriptions.\r\n<info>Note: the endpoint will fail with a 400 error if the certificate is currently in use by any active subscription</info>",
        "requestBody": {
          "description": "An Event Subscription Certificate delete request",
          "content": {
            "application/json": {
              "schema": {
                "allOf": [
                  {
                    "$ref": "#/components/schemas/EventSubscriptionCertificateDeleteRequest"
                  }
                ],
                "description": "Defines an Event Subscription Delete Certificate Request"
              },
              "example": {
  "certificateReference": "MyEventCertificateReference"
}
            }
          }
        },
        "responses": {
          "200": {
            "description": "OK",
            "headers": {
              "x-correlation-id": {
                "description": "The unique id identifying the original requests path through the Controlant systems. Callers should log this value to facilitate easier troubleshooting and incident resolution.",
                "schema": {
                  "type": "string"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/EventSubscriptionCertificateDeleteResponse"
                },
                "example": {
  "certificateReference": "MyEventCertReference",
  "success": true,
  "responseTime": 0
}
              }
            }
          },
          "400": {
            "description": "Bad Request",
            "headers": {
              "x-correlation-id": {
                "description": "The unique id identifying the original requests path through the Controlant systems. Callers should log this value to facilitate easier troubleshooting and incident resolution.",
                "schema": {
                  "type": "string"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/GenericInputValidationErrorResponse"
                },
                "example": {
  "errorMessage": "One or more validation errors occurred.",
  "status": 400,
  "errors": {
    "Reference": "'Reference' must not be empty.",
    "OriginReference": "'OriginReference' must not be empty.",
    "DestinationReference": "'DestinationReference' must not be empty."
  },
  "success": false,
  "responseTime": 0
}
              }
            }
          },
          "500": {
            "description": "Internal Server Error",
            "headers": {
              "x-correlation-id": {
                "description": "The unique id identifying the original requests path through the Controlant systems. Callers should log this value to facilitate easier troubleshooting and incident resolution.",
                "schema": {
                  "type": "string"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                },
                "example": {
  "errorMessage": "Unexpected error while processing request",
  "status": 500,
  "success": false,
  "responseTime": 150,
  "message": "Internal Error"
}
              }
            }
          }
        }
      }
    },
    "/api/events/authentications/create": {
      "post": {
        "tags": [
          "Events"
        ],
        "summary": "Create Authentication",
        "description": "<span class=\"addon-feature\">Requires enabling the Event System API key feature to use standard event features, please contact your Controlant account manager for further details.</span>Creates a new authentication to use with event subscriptions, optionally containing a reference to a certificate",
        "requestBody": {
          "description": "An Event Subscription Authentication create request",
          "content": {
            "application/json": {
              "schema": {
                "allOf": [
                  {
                    "$ref": "#/components/schemas/EventSubscriptionAuthenticationCreateRequest"
                  }
                ],
                "description": "Defines an Event Subscription Authentication Create Request"
              },
              "example": {
  "reference": "MyEventAuthenticationReference",
  "type": "BasicAuth",
  "basicAuthUserName": "MyUser",
  "basicAuthPassword": "<omitted>"
}
            }
          }
        },
        "responses": {
          "200": {
            "description": "OK",
            "headers": {
              "x-correlation-id": {
                "description": "The unique id identifying the original requests path through the Controlant systems. Callers should log this value to facilitate easier troubleshooting and incident resolution.",
                "schema": {
                  "type": "string"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/EventSubscriptionAuthenticationCreateResponse"
                },
                "example": {
  "authenticationReference": "MyEventAuthReference",
  "success": true,
  "responseTime": 0
}
              }
            }
          },
          "400": {
            "description": "Bad Request",
            "headers": {
              "x-correlation-id": {
                "description": "The unique id identifying the original requests path through the Controlant systems. Callers should log this value to facilitate easier troubleshooting and incident resolution.",
                "schema": {
                  "type": "string"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/GenericInputValidationErrorResponse"
                },
                "example": {
  "errorMessage": "One or more validation errors occurred.",
  "status": 400,
  "errors": {
    "Reference": "'Reference' must not be empty.",
    "OriginReference": "'OriginReference' must not be empty.",
    "DestinationReference": "'DestinationReference' must not be empty."
  },
  "success": false,
  "responseTime": 0
}
              }
            }
          },
          "500": {
            "description": "Internal Server Error",
            "headers": {
              "x-correlation-id": {
                "description": "The unique id identifying the original requests path through the Controlant systems. Callers should log this value to facilitate easier troubleshooting and incident resolution.",
                "schema": {
                  "type": "string"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                },
                "example": {
  "errorMessage": "Unexpected error while processing request",
  "status": 500,
  "success": false,
  "responseTime": 150,
  "message": "Internal Error"
}
              }
            }
          }
        }
      }
    },
    "/api/events/authentications/delete": {
      "post": {
        "tags": [
          "Events"
        ],
        "summary": "Delete Authentication",
        "description": "<span class=\"addon-feature\">Requires enabling the Event System API key feature to use standard event features, please contact your Controlant account manager for further details.</span>Deletes a previously created authentication for subscriptions.\r\n<info>Note: the endpoint will fail with a 400 error if the authentication is currently in use by any active subscription</info>",
        "requestBody": {
          "description": "An Event Subscription Authentication delete request",
          "content": {
            "application/json": {
              "schema": {
                "allOf": [
                  {
                    "$ref": "#/components/schemas/EventSubscriptionAuthenticationDeleteRequest"
                  }
                ],
                "description": "Defines an Event Subscription Authentication Delete Request"
              },
              "example": {
  "authenticationReference": "MyAuthenticationReference"
}
            }
          }
        },
        "responses": {
          "200": {
            "description": "OK",
            "headers": {
              "x-correlation-id": {
                "description": "The unique id identifying the original requests path through the Controlant systems. Callers should log this value to facilitate easier troubleshooting and incident resolution.",
                "schema": {
                  "type": "string"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/EventSubscriptionAuthenticationDeleteResponse"
                },
                "example": {
  "authenticationReference": "MyAuthenticationReference",
  "success": true,
  "responseTime": 0
}
              }
            }
          },
          "400": {
            "description": "Bad Request",
            "headers": {
              "x-correlation-id": {
                "description": "The unique id identifying the original requests path through the Controlant systems. Callers should log this value to facilitate easier troubleshooting and incident resolution.",
                "schema": {
                  "type": "string"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/GenericInputValidationErrorResponse"
                },
                "example": {
  "errorMessage": "One or more validation errors occurred.",
  "status": 400,
  "errors": {
    "Reference": "'Reference' must not be empty.",
    "OriginReference": "'OriginReference' must not be empty.",
    "DestinationReference": "'DestinationReference' must not be empty."
  },
  "success": false,
  "responseTime": 0
}
              }
            }
          },
          "500": {
            "description": "Internal Server Error",
            "headers": {
              "x-correlation-id": {
                "description": "The unique id identifying the original requests path through the Controlant systems. Callers should log this value to facilitate easier troubleshooting and incident resolution.",
                "schema": {
                  "type": "string"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                },
                "example": {
  "errorMessage": "Unexpected error while processing request",
  "status": 500,
  "success": false,
  "responseTime": 150,
  "message": "Internal Error"
}
              }
            }
          }
        }
      }
    },
    "/api/events/subscriptions/create": {
      "post": {
        "tags": [
          "Events"
        ],
        "summary": "Create Subscription",
        "description": "<span class=\"addon-feature\">Requires enabling the Event System API key feature to use standard event features; streaming-specific events are an optional added value feature, please contact your Controlant account manager for further details.</span>Creates a new subscription to event notifications that inform your platform of events as they happen in the Controlant systems.\r\nAfter the subscription is created, the events specified in the configuration will be sent to the URL specified in the configuration.\r\n<p>\r\nThe events are sent to the customer systems using a technology called <a href=\"https://en.wikipedia.org/wiki/Webhook\" target=\"_blank\">Webhooks</a></p><note><b>What is a webhook event?</b>\n\r\n    A webhook is a simple event-notification system. When an event occurs in the Controlant platform, a payload of JSON data containing\r\n    information about the event is sent via POST to a specified endpoint URL over HTTPS.\r\n    More on <a href=\"https://en.wikipedia.org/wiki/Webhook\" target=\"_blank\">webhooks</a>.\r\n</note><p>\r\nEvent delivery is <b>at least once</b>. Customers may receive the same event multiple times (e.g., retries or duplicates).\n\r\nProcessing of event webhook responses that Controlant receives from customer systems adhere to the following procedure:\r\n<ul><li>All responses from the customer having http status codes between 400 and 499 will be flagged for follow up by Controlants' technical support teams.</li><li>All responses from the customer having http status codes between 500 and 599 will be interpreted as a customer-side error and the delivery will be treated as a failure. No delivery retries will be attempted.</li></ul></p>",
        "requestBody": {
          "description": "An Event Subscription create request",
          "content": {
            "application/json": {
              "schema": {
                "allOf": [
                  {
                    "$ref": "#/components/schemas/EventSubscriptionCreateRequest"
                  }
                ],
                "description": "Defines an Event Subscription Create Request"
              },
              "examples": {
                "Subscribe to shipment report created": {
                  "value": {
  "reference": "MyEventReference",
  "url": "https://my-logistics-provider.eu/integrations/controlant/shipments",
  "authenticationReference": "MyEventAuthenticationReference",
  "certificateReference": "MyEventCertificateReference",
  "secretToken": "CustomerSecretValue",
  "payloadVersion": "latest",
  "eventType": "shipment.report.created",
  "description": "Event feed to our primary logistics provider",
  "retryPolicy": "ExponentialDelay"
}
                },
                "Subscribe to shipment status changed to closed": {
                  "value": {
  "reference": "MyEventReference",
  "url": "https://my-logistics-provider.eu/integrations/controlant/shipments",
  "authenticationReference": "MyEventAuthenticationReference",
  "certificateReference": "MyEventCertificateReference",
  "secretToken": "CustomerSecretValue",
  "payloadVersion": "latest",
  "eventType": "shipment.status.changed.closed",
  "description": "Event feed to our primary logistics provider",
  "retryPolicy": "ExponentialDelay"
}
                },
                "Subscription with filters and properties": {
                  "value": {
  "reference": "MyEventReference",
  "url": "https://my-logistics-provider.eu/integrations/controlant/shipments",
  "authenticationReference": "MyEventAuthenticationReference",
  "certificateReference": "MyEventCertificateReference",
  "secretToken": "CustomerSecretValue",
  "payloadVersion": "latest",
  "eventType": "shipment.status.changed",
  "description": "Event feed to our primary logistics provider",
  "filters": [
    {
      "propertyName": "LogisticsProvider",
      "value": "MyLogisticsProvider",
      "mode": "MustEqual"
    },
    {
      "propertyName": "InterCompany",
      "value": "true",
      "mode": "MustNotEqual"
    },
    {
      "propertyName": "country",
      "value": "DE",
      "mode": "MustEqual"
    }
  ],
  "properties": [
    {
      "name": "Company",
      "value": "MyCompany"
    },
    {
      "name": "Ref",
      "value": "Road"
    }
  ],
  "retryPolicy": "ExponentialDelay"
}
                }
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "OK",
            "headers": {
              "x-correlation-id": {
                "description": "The unique id identifying the original requests path through the Controlant systems. Callers should log this value to facilitate easier troubleshooting and incident resolution.",
                "schema": {
                  "type": "string"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/EventSubscriptionCreateResponse"
                },
                "example": {
  "subscriptionReference": "MyEventReference",
  "success": true,
  "responseTime": 0
}
              }
            }
          },
          "400": {
            "description": "Bad Request",
            "headers": {
              "x-correlation-id": {
                "description": "The unique id identifying the original requests path through the Controlant systems. Callers should log this value to facilitate easier troubleshooting and incident resolution.",
                "schema": {
                  "type": "string"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/GenericInputValidationErrorResponse"
                },
                "example": {
  "errorMessage": "One or more validation errors occurred.",
  "status": 400,
  "errors": {
    "Reference": "'Reference' must not be empty.",
    "OriginReference": "'OriginReference' must not be empty.",
    "DestinationReference": "'DestinationReference' must not be empty."
  },
  "success": false,
  "responseTime": 0
}
              }
            }
          },
          "500": {
            "description": "Internal Server Error",
            "headers": {
              "x-correlation-id": {
                "description": "The unique id identifying the original requests path through the Controlant systems. Callers should log this value to facilitate easier troubleshooting and incident resolution.",
                "schema": {
                  "type": "string"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                },
                "example": {
  "errorMessage": "Unexpected error while processing request",
  "status": 500,
  "success": false,
  "responseTime": 150,
  "message": "Internal Error"
}
              }
            }
          }
        },
        "callbacks": {
          "shipment.report.created": {
            "https://YOUR-SERVER.URL/": {
              "post": {
                "summary": "shipment.report.created",
                "parameters": [
                  {
                    "name": "x-event-name",
                    "in": "header",
                    "description": "The event type that triggered the delivery (for example <code>shipment.create</code>).",
                    "schema": {
                      "type": "string"
                    }
                  },
                  {
                    "name": "x-signature",
                    "in": "header",
                    "description": "<p>An authenticity request signature to verify that this event post comes from Controlant. This value is a Base64 UTF8 string of the SHA512 hash of the concatenation of the <br/><code>SecretToken</code> + <code>http method</code> + <code>URL</code> + <code>body.DeliveryId</code> + <code>body.Attempt</code> + <code>body.Reference</code></code>. </p><note>Both <code>http method</code> and <code>URL</code> must be converted to lower-case before calculating the signature hash. Other values should have the same casing as in the body sent to the client. All text must be UTF-8 encoded prior to generating a signature hash.</note>",
                    "schema": {
                      "type": "string"
                    }
                  },
                  {
                    "name": "x-correlation-id",
                    "in": "header",
                    "description": "This value should be used to track a request through the Controlant systems and can aid in incident investigations.",
                    "schema": {
                      "type": "string"
                    }
                  }
                ],
                "requestBody": {
                  "content": {
                    "application/json": {
                      "schema": {
                        "$ref": "#/components/schemas/EventSubscriptionShipmentReportPayloadEventSubscription"
                      },
                      "example": {
  "deliveryId": "fec522c1-4826-4ee8-9cda-cfb26bbae171",
  "attempt": 1,
  "reference": "My_ShipmentReportCreated_Event",
  "eventType": "shipment.report.created",
  "payload": {
    "shipmentReference": "1020-Oslo-To-Bergen",
    "reportType": "DeliveryReport",
    "reportNumber": 1,
    "reportTotalCount": 2,
    "downloadUrl": "https://integrations.controlant.com/api/scm/shipments/reports/delivery/1020-Oslo-To-Bergen/1",
    "languageCode": "en"
  },
  "payloadVersion": "1",
  "mode": "Event",
  "environment": "Live",
  "generated": "2026-03-11T06:17:03Z"
}
                    }
                  }
                },
                "responses": {
                  "200": {
                    "description": "Your server implementation should return this HTTP status code if the data was received successfully."
                  },
                  "503": {
                    "description": "Return this status code if your server is down for maintenance or overloaded. This should only be used for temporary conditions. Any time estimates specified in a <code>Retry-After</code> response header will be honoured."
                  }
                }
              }
            }
          },
          "shipment.status.changed": {
            "https://YOUR-SERVER.URL/": {
              "post": {
                "summary": "shipment.status.changed",
                "parameters": [
                  {
                    "name": "x-event-name",
                    "in": "header",
                    "description": "The event type that triggered the delivery (for example <code>shipment.create</code>).",
                    "schema": {
                      "type": "string"
                    }
                  },
                  {
                    "name": "x-signature",
                    "in": "header",
                    "description": "<p>An authenticity request signature to verify that this event post comes from Controlant. This value is a Base64 UTF8 string of the SHA512 hash of the concatenation of the <br/><code>SecretToken</code> + <code>http method</code> + <code>URL</code> + <code>body.DeliveryId</code> + <code>body.Attempt</code> + <code>body.Reference</code></code>. </p><note>Both <code>http method</code> and <code>URL</code> must be converted to lower-case before calculating the signature hash. Other values should have the same casing as in the body sent to the client. All text must be UTF-8 encoded prior to generating a signature hash.</note>",
                    "schema": {
                      "type": "string"
                    }
                  },
                  {
                    "name": "x-correlation-id",
                    "in": "header",
                    "description": "This value should be used to track a request through the Controlant systems and can aid in incident investigations.",
                    "schema": {
                      "type": "string"
                    }
                  }
                ],
                "requestBody": {
                  "content": {
                    "application/json": {
                      "schema": {
                        "$ref": "#/components/schemas/EventSubscriptionShipmentStatusChangedPayloadEventSubscription"
                      },
                      "example": {
  "deliveryId": "898b5e35-e085-4d9d-858d-1550498f26ce",
  "attempt": 1,
  "reference": "My_ShipmentStatusChanged_Event",
  "eventType": "shipment.status.changed",
  "payload": {
    "shipmentReference": "1020-Oslo-To-Bergen",
    "status": "Ready",
    "previousStatus": "Draft",
    "transitionType": "Automatic",
    "statusChangedTimeStamp": "2026-03-11T06:17:03Z",
    "effectiveTimeStamp": "2026-03-11T06:17:03Z"
  },
  "payloadVersion": "1",
  "mode": "Event",
  "environment": "Live",
  "generated": "2026-03-11T06:17:03Z"
}
                    }
                  }
                },
                "responses": {
                  "200": {
                    "description": "Your server implementation should return this HTTP status code if the data was received successfully."
                  },
                  "503": {
                    "description": "Return this status code if your server is down for maintenance or overloaded. This should only be used for temporary conditions. Any time estimates specified in a <code>Retry-After</code> response header will be honoured."
                  }
                }
              }
            }
          },
          "shipment.status.changed.ready": {
            "https://YOUR-SERVER.URL/": {
              "post": {
                "summary": "shipment.status.changed.ready",
                "parameters": [
                  {
                    "name": "x-event-name",
                    "in": "header",
                    "description": "The event type that triggered the delivery (for example <code>shipment.create</code>).",
                    "schema": {
                      "type": "string"
                    }
                  },
                  {
                    "name": "x-signature",
                    "in": "header",
                    "description": "<p>An authenticity request signature to verify that this event post comes from Controlant. This value is a Base64 UTF8 string of the SHA512 hash of the concatenation of the <br/><code>SecretToken</code> + <code>http method</code> + <code>URL</code> + <code>body.DeliveryId</code> + <code>body.Attempt</code> + <code>body.Reference</code></code>. </p><note>Both <code>http method</code> and <code>URL</code> must be converted to lower-case before calculating the signature hash. Other values should have the same casing as in the body sent to the client. All text must be UTF-8 encoded prior to generating a signature hash.</note>",
                    "schema": {
                      "type": "string"
                    }
                  },
                  {
                    "name": "x-correlation-id",
                    "in": "header",
                    "description": "This value should be used to track a request through the Controlant systems and can aid in incident investigations.",
                    "schema": {
                      "type": "string"
                    }
                  }
                ],
                "requestBody": {
                  "content": {
                    "application/json": {
                      "schema": {
                        "$ref": "#/components/schemas/EventSubscriptionShipmentStatusReadyPayloadEventSubscription"
                      },
                      "example": {
  "deliveryId": "c1d4e204-f600-430d-9cbb-c00a336e9075",
  "attempt": 1,
  "reference": "My_ShipmentStatusChangedReady_Event",
  "eventType": "shipment.status.changed.ready",
  "payload": {
    "shipmentReference": "My-Ready-Shipment",
    "status": "Ready",
    "previousStatus": "Draft",
    "transitionType": "Automatic",
    "statusChangedTimeStamp": "2026-03-11T06:17:03Z",
    "effectiveTimeStamp": "2026-03-11T06:17:03Z"
  },
  "payloadVersion": "1",
  "mode": "Event",
  "environment": "Live",
  "generated": "2026-03-11T06:17:03Z"
}
                    }
                  }
                },
                "responses": {
                  "200": {
                    "description": "Your server implementation should return this HTTP status code if the data was received successfully."
                  },
                  "503": {
                    "description": "Return this status code if your server is down for maintenance or overloaded. This should only be used for temporary conditions. Any time estimates specified in a <code>Retry-After</code> response header will be honoured."
                  }
                }
              }
            }
          },
          "shipment.status.changed.shipping": {
            "https://YOUR-SERVER.URL/": {
              "post": {
                "summary": "shipment.status.changed.shipping",
                "parameters": [
                  {
                    "name": "x-event-name",
                    "in": "header",
                    "description": "The event type that triggered the delivery (for example <code>shipment.create</code>).",
                    "schema": {
                      "type": "string"
                    }
                  },
                  {
                    "name": "x-signature",
                    "in": "header",
                    "description": "<p>An authenticity request signature to verify that this event post comes from Controlant. This value is a Base64 UTF8 string of the SHA512 hash of the concatenation of the <br/><code>SecretToken</code> + <code>http method</code> + <code>URL</code> + <code>body.DeliveryId</code> + <code>body.Attempt</code> + <code>body.Reference</code></code>. </p><note>Both <code>http method</code> and <code>URL</code> must be converted to lower-case before calculating the signature hash. Other values should have the same casing as in the body sent to the client. All text must be UTF-8 encoded prior to generating a signature hash.</note>",
                    "schema": {
                      "type": "string"
                    }
                  },
                  {
                    "name": "x-correlation-id",
                    "in": "header",
                    "description": "This value should be used to track a request through the Controlant systems and can aid in incident investigations.",
                    "schema": {
                      "type": "string"
                    }
                  }
                ],
                "requestBody": {
                  "content": {
                    "application/json": {
                      "schema": {
                        "$ref": "#/components/schemas/EventSubscriptionShipmentStatusShippingPayloadEventSubscription"
                      },
                      "example": {
  "deliveryId": "c72a6ae4-7ba4-4c9f-abd8-58d25a438673",
  "attempt": 1,
  "reference": "My_ShipmentStatusChangedShipping_Event",
  "eventType": "shipment.status.changed.shipping",
  "payload": {
    "shipmentReference": "My-Shipping-Shipment",
    "status": "Shipping",
    "previousStatus": "Ready",
    "transitionType": "Manual",
    "statusChangedTimeStamp": "2026-03-11T06:17:03Z",
    "effectiveTimeStamp": "2026-03-11T03:17:03Z"
  },
  "payloadVersion": "1",
  "mode": "Event",
  "environment": "Live",
  "generated": "2026-03-11T06:17:03Z"
}
                    }
                  }
                },
                "responses": {
                  "200": {
                    "description": "Your server implementation should return this HTTP status code if the data was received successfully."
                  },
                  "503": {
                    "description": "Return this status code if your server is down for maintenance or overloaded. This should only be used for temporary conditions. Any time estimates specified in a <code>Retry-After</code> response header will be honoured."
                  }
                }
              }
            }
          },
          "shipment.status.changed.delivered": {
            "https://YOUR-SERVER.URL/": {
              "post": {
                "summary": "shipment.status.changed.delivered",
                "parameters": [
                  {
                    "name": "x-event-name",
                    "in": "header",
                    "description": "The event type that triggered the delivery (for example <code>shipment.create</code>).",
                    "schema": {
                      "type": "string"
                    }
                  },
                  {
                    "name": "x-signature",
                    "in": "header",
                    "description": "<p>An authenticity request signature to verify that this event post comes from Controlant. This value is a Base64 UTF8 string of the SHA512 hash of the concatenation of the <br/><code>SecretToken</code> + <code>http method</code> + <code>URL</code> + <code>body.DeliveryId</code> + <code>body.Attempt</code> + <code>body.Reference</code></code>. </p><note>Both <code>http method</code> and <code>URL</code> must be converted to lower-case before calculating the signature hash. Other values should have the same casing as in the body sent to the client. All text must be UTF-8 encoded prior to generating a signature hash.</note>",
                    "schema": {
                      "type": "string"
                    }
                  },
                  {
                    "name": "x-correlation-id",
                    "in": "header",
                    "description": "This value should be used to track a request through the Controlant systems and can aid in incident investigations.",
                    "schema": {
                      "type": "string"
                    }
                  }
                ],
                "requestBody": {
                  "content": {
                    "application/json": {
                      "schema": {
                        "$ref": "#/components/schemas/EventSubscriptionShipmentStatusDeliveredPayloadEventSubscription"
                      },
                      "example": {
  "deliveryId": "e14cbef8-18c0-48ee-9dcc-6b02c77aa40c",
  "attempt": 1,
  "reference": "My_ShipmentStatusChangedDelivered_Event",
  "eventType": "shipment.status.changed.delivered",
  "payload": {
    "shipmentReference": "My-Delivered-Shipment",
    "status": "Delivered",
    "previousStatus": "Shipping",
    "transitionType": "Manual",
    "statusChangedTimeStamp": "2026-03-11T06:17:03Z",
    "effectiveTimeStamp": "2026-03-11T03:17:03Z"
  },
  "payloadVersion": "1",
  "mode": "Event",
  "environment": "Live",
  "generated": "2026-03-11T06:17:03Z"
}
                    }
                  }
                },
                "responses": {
                  "200": {
                    "description": "Your server implementation should return this HTTP status code if the data was received successfully."
                  },
                  "503": {
                    "description": "Return this status code if your server is down for maintenance or overloaded. This should only be used for temporary conditions. Any time estimates specified in a <code>Retry-After</code> response header will be honoured."
                  }
                }
              }
            }
          },
          "shipment.status.changed.closed": {
            "https://YOUR-SERVER.URL/": {
              "post": {
                "summary": "shipment.status.changed.closed",
                "parameters": [
                  {
                    "name": "x-event-name",
                    "in": "header",
                    "description": "The event type that triggered the delivery (for example <code>shipment.create</code>).",
                    "schema": {
                      "type": "string"
                    }
                  },
                  {
                    "name": "x-signature",
                    "in": "header",
                    "description": "<p>An authenticity request signature to verify that this event post comes from Controlant. This value is a Base64 UTF8 string of the SHA512 hash of the concatenation of the <br/><code>SecretToken</code> + <code>http method</code> + <code>URL</code> + <code>body.DeliveryId</code> + <code>body.Attempt</code> + <code>body.Reference</code></code>. </p><note>Both <code>http method</code> and <code>URL</code> must be converted to lower-case before calculating the signature hash. Other values should have the same casing as in the body sent to the client. All text must be UTF-8 encoded prior to generating a signature hash.</note>",
                    "schema": {
                      "type": "string"
                    }
                  },
                  {
                    "name": "x-correlation-id",
                    "in": "header",
                    "description": "This value should be used to track a request through the Controlant systems and can aid in incident investigations.",
                    "schema": {
                      "type": "string"
                    }
                  }
                ],
                "requestBody": {
                  "content": {
                    "application/json": {
                      "schema": {
                        "$ref": "#/components/schemas/EventSubscriptionShipmentStatusClosedPayloadEventSubscription"
                      },
                      "example": {
  "deliveryId": "334768f1-f853-428a-84ed-3f0b352b25d8",
  "attempt": 1,
  "reference": "My_ShipmentStatusChangedClosed_Event",
  "eventType": "shipment.status.changed.closed",
  "payload": {
    "shipmentReference": "My-Closed-Shipment",
    "status": "Closed",
    "previousStatus": "Delivered",
    "transitionType": "Manual",
    "statusChangedTimeStamp": "2026-03-11T06:17:03Z",
    "effectiveTimeStamp": "2026-03-11T06:02:03Z"
  },
  "payloadVersion": "1",
  "mode": "Event",
  "environment": "Live",
  "generated": "2026-03-11T06:17:03Z"
}
                    }
                  }
                },
                "responses": {
                  "200": {
                    "description": "Your server implementation should return this HTTP status code if the data was received successfully."
                  },
                  "503": {
                    "description": "Return this status code if your server is down for maintenance or overloaded. This should only be used for temporary conditions. Any time estimates specified in a <code>Retry-After</code> response header will be honoured."
                  }
                }
              }
            }
          },
          "shipment.status.changed.deleted": {
            "https://YOUR-SERVER.URL/": {
              "post": {
                "summary": "shipment.status.changed.deleted",
                "parameters": [
                  {
                    "name": "x-event-name",
                    "in": "header",
                    "description": "The event type that triggered the delivery (for example <code>shipment.create</code>).",
                    "schema": {
                      "type": "string"
                    }
                  },
                  {
                    "name": "x-signature",
                    "in": "header",
                    "description": "<p>An authenticity request signature to verify that this event post comes from Controlant. This value is a Base64 UTF8 string of the SHA512 hash of the concatenation of the <br/><code>SecretToken</code> + <code>http method</code> + <code>URL</code> + <code>body.DeliveryId</code> + <code>body.Attempt</code> + <code>body.Reference</code></code>. </p><note>Both <code>http method</code> and <code>URL</code> must be converted to lower-case before calculating the signature hash. Other values should have the same casing as in the body sent to the client. All text must be UTF-8 encoded prior to generating a signature hash.</note>",
                    "schema": {
                      "type": "string"
                    }
                  },
                  {
                    "name": "x-correlation-id",
                    "in": "header",
                    "description": "This value should be used to track a request through the Controlant systems and can aid in incident investigations.",
                    "schema": {
                      "type": "string"
                    }
                  }
                ],
                "requestBody": {
                  "content": {
                    "application/json": {
                      "schema": {
                        "$ref": "#/components/schemas/EventSubscriptionShipmentStatusDeletedPayloadEventSubscription"
                      },
                      "example": {
  "deliveryId": "a236d484-b532-48a9-88e1-60a29a0a1c27",
  "attempt": 1,
  "reference": "My_ShipmentStatusChangedDeleted_Event",
  "eventType": "shipment.status.changed.deleted",
  "payload": {
    "shipmentReference": "My-Deleted-Shipment",
    "status": "Deleted",
    "previousStatus": "Draft",
    "transitionType": "Automatic",
    "statusChangedTimeStamp": "2026-03-11T06:17:03Z",
    "effectiveTimeStamp": "2026-03-11T06:17:03Z"
  },
  "payloadVersion": "1",
  "mode": "Event",
  "environment": "Live",
  "generated": "2026-03-11T06:17:03Z"
}
                    }
                  }
                },
                "responses": {
                  "200": {
                    "description": "Your server implementation should return this HTTP status code if the data was received successfully."
                  },
                  "503": {
                    "description": "Return this status code if your server is down for maintenance or overloaded. This should only be used for temporary conditions. Any time estimates specified in a <code>Retry-After</code> response header will be honoured."
                  }
                }
              }
            }
          },
          "shipment.product.quality.changed": {
            "https://YOUR-SERVER.URL/": {
              "post": {
                "summary": "shipment.product.quality.changed",
                "parameters": [
                  {
                    "name": "x-event-name",
                    "in": "header",
                    "description": "The event type that triggered the delivery (for example <code>shipment.create</code>).",
                    "schema": {
                      "type": "string"
                    }
                  },
                  {
                    "name": "x-signature",
                    "in": "header",
                    "description": "<p>An authenticity request signature to verify that this event post comes from Controlant. This value is a Base64 UTF8 string of the SHA512 hash of the concatenation of the <br/><code>SecretToken</code> + <code>http method</code> + <code>URL</code> + <code>body.DeliveryId</code> + <code>body.Attempt</code> + <code>body.Reference</code></code>. </p><note>Both <code>http method</code> and <code>URL</code> must be converted to lower-case before calculating the signature hash. Other values should have the same casing as in the body sent to the client. All text must be UTF-8 encoded prior to generating a signature hash.</note>",
                    "schema": {
                      "type": "string"
                    }
                  },
                  {
                    "name": "x-correlation-id",
                    "in": "header",
                    "description": "This value should be used to track a request through the Controlant systems and can aid in incident investigations.",
                    "schema": {
                      "type": "string"
                    }
                  }
                ],
                "requestBody": {
                  "content": {
                    "application/json": {
                      "schema": {
                        "$ref": "#/components/schemas/EventSubscriptionProductQualityChangedPayloadEventSubscription"
                      },
                      "example": {
  "deliveryId": "2d5f341e-9892-4b4f-9232-74e7d57375f3",
  "attempt": 1,
  "reference": "My_ProductQualityChanged_Event",
  "eventType": "shipment.product.quality.changed",
  "payload": {
    "shipmentReference": "KT-0164879955",
    "productReference": "Tylenol-400mg-vial",
    "evaluationStatus": "ExceedsBudget",
    "qualityChangedTimeStamp": "2026-03-11T06:17:03Z"
  },
  "payloadVersion": "1",
  "mode": "Event",
  "environment": "Live",
  "generated": "2026-03-11T06:17:03Z"
}
                    }
                  }
                },
                "responses": {
                  "200": {
                    "description": "Your server implementation should return this HTTP status code if the data was received successfully."
                  },
                  "503": {
                    "description": "Return this status code if your server is down for maintenance or overloaded. This should only be used for temporary conditions. Any time estimates specified in a <code>Retry-After</code> response header will be honoured."
                  }
                }
              }
            }
          },
          "shipment.logger.rearm": {
            "https://YOUR-SERVER.URL/": {
              "post": {
                "summary": "shipment.logger.rearm",
                "parameters": [
                  {
                    "name": "x-event-name",
                    "in": "header",
                    "description": "The event type that triggered the delivery (for example <code>shipment.create</code>).",
                    "schema": {
                      "type": "string"
                    }
                  },
                  {
                    "name": "x-signature",
                    "in": "header",
                    "description": "<p>An authenticity request signature to verify that this event post comes from Controlant. This value is a Base64 UTF8 string of the SHA512 hash of the concatenation of the <br/><code>SecretToken</code> + <code>http method</code> + <code>URL</code> + <code>body.DeliveryId</code> + <code>body.Attempt</code> + <code>body.Reference</code></code>. </p><note>Both <code>http method</code> and <code>URL</code> must be converted to lower-case before calculating the signature hash. Other values should have the same casing as in the body sent to the client. All text must be UTF-8 encoded prior to generating a signature hash.</note>",
                    "schema": {
                      "type": "string"
                    }
                  },
                  {
                    "name": "x-correlation-id",
                    "in": "header",
                    "description": "This value should be used to track a request through the Controlant systems and can aid in incident investigations.",
                    "schema": {
                      "type": "string"
                    }
                  }
                ],
                "requestBody": {
                  "content": {
                    "application/json": {
                      "schema": {
                        "$ref": "#/components/schemas/EventSubscriptionShipmentLoggerRearmPayloadEventSubscription"
                      },
                      "example": {
  "deliveryId": "2623b7b0-c692-4117-bb54-eaafa6c556a2",
  "attempt": 1,
  "reference": "My_ShipmentLoggerRearm_Event",
  "eventType": "shipment.logger.rearm",
  "payload": {
    "alert": {
      "bounds": "LowerBounds",
      "rearmDelayUntil": "2026-03-11T08:17:03Z",
      "dataType": "Temperature",
      "lowerBoundary": 100,
      "accumulativeTimeLimit": 600,
      "severity": "NoExcursion"
    },
    "shipmentReference": "My-Ongoing-Shipment",
    "loggerId": "7E000100"
  },
  "payloadVersion": "1",
  "mode": "Event",
  "environment": "Live",
  "generated": "2026-03-11T06:17:03Z"
}
                    }
                  }
                },
                "responses": {
                  "200": {
                    "description": "Your server implementation should return this HTTP status code if the data was received successfully."
                  },
                  "503": {
                    "description": "Return this status code if your server is down for maintenance or overloaded. This should only be used for temporary conditions. Any time estimates specified in a <code>Retry-After</code> response header will be honoured."
                  }
                }
              }
            }
          },
          "shipment.logger.excursion.raised": {
            "https://YOUR-SERVER.URL/": {
              "post": {
                "summary": "shipment.logger.excursion.raised",
                "parameters": [
                  {
                    "name": "x-event-name",
                    "in": "header",
                    "description": "The event type that triggered the delivery (for example <code>shipment.create</code>).",
                    "schema": {
                      "type": "string"
                    }
                  },
                  {
                    "name": "x-signature",
                    "in": "header",
                    "description": "<p>An authenticity request signature to verify that this event post comes from Controlant. This value is a Base64 UTF8 string of the SHA512 hash of the concatenation of the <br/><code>SecretToken</code> + <code>http method</code> + <code>URL</code> + <code>body.DeliveryId</code> + <code>body.Attempt</code> + <code>body.Reference</code></code>. </p><note>Both <code>http method</code> and <code>URL</code> must be converted to lower-case before calculating the signature hash. Other values should have the same casing as in the body sent to the client. All text must be UTF-8 encoded prior to generating a signature hash.</note>",
                    "schema": {
                      "type": "string"
                    }
                  },
                  {
                    "name": "x-correlation-id",
                    "in": "header",
                    "description": "This value should be used to track a request through the Controlant systems and can aid in incident investigations.",
                    "schema": {
                      "type": "string"
                    }
                  }
                ],
                "requestBody": {
                  "content": {
                    "application/json": {
                      "schema": {
                        "$ref": "#/components/schemas/EventSubscriptionShipmentLoggerExcursionPayloadEventSubscription"
                      },
                      "example": {
  "deliveryId": "9947d1cb-678f-4333-860f-f457785ef68a",
  "attempt": 1,
  "reference": "My_ShipmentLoggerExcursionRaised_Event",
  "eventType": "shipment.logger.excursion.raised",
  "payload": {
    "alert": {
      "bounds": "LowerBounds",
      "dataType": "Temperature",
      "lowerBoundary": 100,
      "accumulativeTimeLimit": 600,
      "severity": "Level2"
    },
    "excursionTimeStamp": "2026-03-11T05:46:03Z",
    "shipmentReference": "My-Ongoing-Shipment",
    "loggerId": "7E000100"
  },
  "payloadVersion": "1",
  "mode": "Event",
  "environment": "Live",
  "generated": "2026-03-11T06:17:03Z"
}
                    }
                  }
                },
                "responses": {
                  "200": {
                    "description": "Your server implementation should return this HTTP status code if the data was received successfully."
                  },
                  "503": {
                    "description": "Return this status code if your server is down for maintenance or overloaded. This should only be used for temporary conditions. Any time estimates specified in a <code>Retry-After</code> response header will be honoured."
                  }
                }
              }
            }
          },
          "shipment.logger.button.pressed": {
            "https://YOUR-SERVER.URL/": {
              "post": {
                "summary": "shipment.logger.button.pressed",
                "parameters": [
                  {
                    "name": "x-event-name",
                    "in": "header",
                    "description": "The event type that triggered the delivery (for example <code>shipment.create</code>).",
                    "schema": {
                      "type": "string"
                    }
                  },
                  {
                    "name": "x-signature",
                    "in": "header",
                    "description": "<p>An authenticity request signature to verify that this event post comes from Controlant. This value is a Base64 UTF8 string of the SHA512 hash of the concatenation of the <br/><code>SecretToken</code> + <code>http method</code> + <code>URL</code> + <code>body.DeliveryId</code> + <code>body.Attempt</code> + <code>body.Reference</code></code>. </p><note>Both <code>http method</code> and <code>URL</code> must be converted to lower-case before calculating the signature hash. Other values should have the same casing as in the body sent to the client. All text must be UTF-8 encoded prior to generating a signature hash.</note>",
                    "schema": {
                      "type": "string"
                    }
                  },
                  {
                    "name": "x-correlation-id",
                    "in": "header",
                    "description": "This value should be used to track a request through the Controlant systems and can aid in incident investigations.",
                    "schema": {
                      "type": "string"
                    }
                  }
                ],
                "requestBody": {
                  "content": {
                    "application/json": {
                      "schema": {
                        "$ref": "#/components/schemas/EventSubscriptionShipmentLoggerButtonPressedPayloadEventSubscription"
                      },
                      "example": {
  "deliveryId": "57362a72-258e-4546-8859-c8b1500dee7a",
  "attempt": 1,
  "reference": "My_ShipmentLoggerButtonPressed_Event",
  "eventType": "shipment.logger.button.pressed",
  "payload": {
    "buttonPressed": "Start",
    "timeStamp": "2026-03-11T05:27:03Z",
    "shipmentReference": "My-Ongoing-Shipment",
    "loggerId": "30000100"
  },
  "payloadVersion": "1",
  "mode": "Event",
  "environment": "Live",
  "generated": "2026-03-11T06:17:03Z"
}
                    }
                  }
                },
                "responses": {
                  "200": {
                    "description": "Your server implementation should return this HTTP status code if the data was received successfully."
                  },
                  "503": {
                    "description": "Return this status code if your server is down for maintenance or overloaded. This should only be used for temporary conditions. Any time estimates specified in a <code>Retry-After</code> response header will be honoured."
                  }
                }
              }
            }
          },
          "shipment.logger.status.changed": {
            "https://YOUR-SERVER.URL/": {
              "post": {
                "summary": "shipment.logger.status.changed",
                "parameters": [
                  {
                    "name": "x-event-name",
                    "in": "header",
                    "description": "The event type that triggered the delivery (for example <code>shipment.create</code>).",
                    "schema": {
                      "type": "string"
                    }
                  },
                  {
                    "name": "x-signature",
                    "in": "header",
                    "description": "<p>An authenticity request signature to verify that this event post comes from Controlant. This value is a Base64 UTF8 string of the SHA512 hash of the concatenation of the <br/><code>SecretToken</code> + <code>http method</code> + <code>URL</code> + <code>body.DeliveryId</code> + <code>body.Attempt</code> + <code>body.Reference</code></code>. </p><note>Both <code>http method</code> and <code>URL</code> must be converted to lower-case before calculating the signature hash. Other values should have the same casing as in the body sent to the client. All text must be UTF-8 encoded prior to generating a signature hash.</note>",
                    "schema": {
                      "type": "string"
                    }
                  },
                  {
                    "name": "x-correlation-id",
                    "in": "header",
                    "description": "This value should be used to track a request through the Controlant systems and can aid in incident investigations.",
                    "schema": {
                      "type": "string"
                    }
                  }
                ],
                "requestBody": {
                  "content": {
                    "application/json": {
                      "schema": {
                        "$ref": "#/components/schemas/EventSubscriptionShipmentLoggerStatusChangedPayloadEventSubscription"
                      },
                      "example": {
  "deliveryId": "79890f86-a99a-42e1-b58d-99d6b97d14e8",
  "attempt": 1,
  "reference": "My_ShipmentLoggerStatusChanged_Event",
  "eventType": "shipment.logger.status.changed",
  "payload": {
    "status": "Shipped",
    "timeStamp": "2026-03-09T06:16:08Z",
    "shipmentReference": "My-Ongoing-Shipment",
    "loggerId": "3E000100"
  },
  "payloadVersion": "1",
  "mode": "Event",
  "environment": "Live",
  "generated": "2026-03-11T06:17:03Z"
}
                    }
                  }
                },
                "responses": {
                  "200": {
                    "description": "Your server implementation should return this HTTP status code if the data was received successfully."
                  },
                  "503": {
                    "description": "Return this status code if your server is down for maintenance or overloaded. This should only be used for temporary conditions. Any time estimates specified in a <code>Retry-After</code> response header will be honoured."
                  }
                }
              }
            }
          },
          "shipment.logger.status.changed.shipping": {
            "https://YOUR-SERVER.URL/": {
              "post": {
                "summary": "shipment.logger.status.changed.shipping",
                "parameters": [
                  {
                    "name": "x-event-name",
                    "in": "header",
                    "description": "The event type that triggered the delivery (for example <code>shipment.create</code>).",
                    "schema": {
                      "type": "string"
                    }
                  },
                  {
                    "name": "x-signature",
                    "in": "header",
                    "description": "<p>An authenticity request signature to verify that this event post comes from Controlant. This value is a Base64 UTF8 string of the SHA512 hash of the concatenation of the <br/><code>SecretToken</code> + <code>http method</code> + <code>URL</code> + <code>body.DeliveryId</code> + <code>body.Attempt</code> + <code>body.Reference</code></code>. </p><note>Both <code>http method</code> and <code>URL</code> must be converted to lower-case before calculating the signature hash. Other values should have the same casing as in the body sent to the client. All text must be UTF-8 encoded prior to generating a signature hash.</note>",
                    "schema": {
                      "type": "string"
                    }
                  },
                  {
                    "name": "x-correlation-id",
                    "in": "header",
                    "description": "This value should be used to track a request through the Controlant systems and can aid in incident investigations.",
                    "schema": {
                      "type": "string"
                    }
                  }
                ],
                "requestBody": {
                  "content": {
                    "application/json": {
                      "schema": {
                        "$ref": "#/components/schemas/EventSubscriptionShipmentLoggerStatusChangedPayloadEventSubscription"
                      },
                      "example": {
  "deliveryId": "9b199907-9fe2-489b-a578-a45cf448e0e9",
  "attempt": 1,
  "reference": "My_ShipmentLoggerStatusChangedShipping_Event",
  "eventType": "shipment.logger.status.changed.shipping",
  "payload": {
    "status": "Shipped",
    "timeStamp": "2026-03-09T06:16:08Z",
    "shipmentReference": "My-Ongoing-Shipment",
    "loggerId": "3E000100"
  },
  "payloadVersion": "1",
  "mode": "Event",
  "environment": "Live",
  "generated": "2026-03-11T06:17:03Z"
}
                    }
                  }
                },
                "responses": {
                  "200": {
                    "description": "Your server implementation should return this HTTP status code if the data was received successfully."
                  },
                  "503": {
                    "description": "Return this status code if your server is down for maintenance or overloaded. This should only be used for temporary conditions. Any time estimates specified in a <code>Retry-After</code> response header will be honoured."
                  }
                }
              }
            }
          },
          "shipment.logger.status.changed.delivered": {
            "https://YOUR-SERVER.URL/": {
              "post": {
                "summary": "shipment.logger.status.changed.delivered",
                "parameters": [
                  {
                    "name": "x-event-name",
                    "in": "header",
                    "description": "The event type that triggered the delivery (for example <code>shipment.create</code>).",
                    "schema": {
                      "type": "string"
                    }
                  },
                  {
                    "name": "x-signature",
                    "in": "header",
                    "description": "<p>An authenticity request signature to verify that this event post comes from Controlant. This value is a Base64 UTF8 string of the SHA512 hash of the concatenation of the <br/><code>SecretToken</code> + <code>http method</code> + <code>URL</code> + <code>body.DeliveryId</code> + <code>body.Attempt</code> + <code>body.Reference</code></code>. </p><note>Both <code>http method</code> and <code>URL</code> must be converted to lower-case before calculating the signature hash. Other values should have the same casing as in the body sent to the client. All text must be UTF-8 encoded prior to generating a signature hash.</note>",
                    "schema": {
                      "type": "string"
                    }
                  },
                  {
                    "name": "x-correlation-id",
                    "in": "header",
                    "description": "This value should be used to track a request through the Controlant systems and can aid in incident investigations.",
                    "schema": {
                      "type": "string"
                    }
                  }
                ],
                "requestBody": {
                  "content": {
                    "application/json": {
                      "schema": {
                        "$ref": "#/components/schemas/EventSubscriptionShipmentLoggerStatusChangedDeliveredPayloadEventSubscription"
                      },
                      "example": {
  "deliveryId": "9e1731d6-be85-4d12-bd76-6b8e820c6a0b",
  "attempt": 1,
  "reference": "My_ShipmentLoggerStatusChangedDelivered_Event",
  "eventType": "shipment.logger.status.changed.delivered",
  "payload": {
    "status": "Delivered",
    "timeStamp": "2026-03-10T06:16:08Z",
    "shipmentReference": "My-Delivered-Shipment",
    "loggerId": "3E000100"
  },
  "payloadVersion": "1",
  "mode": "Event",
  "environment": "Live",
  "generated": "2026-03-11T06:17:03Z"
}
                    }
                  }
                },
                "responses": {
                  "200": {
                    "description": "Your server implementation should return this HTTP status code if the data was received successfully."
                  },
                  "503": {
                    "description": "Return this status code if your server is down for maintenance or overloaded. This should only be used for temporary conditions. Any time estimates specified in a <code>Retry-After</code> response header will be honoured."
                  }
                }
              }
            }
          },
          "shipment.logger.light.changed": {
            "https://YOUR-SERVER.URL/": {
              "post": {
                "summary": "shipment.logger.light.changed",
                "parameters": [
                  {
                    "name": "x-event-name",
                    "in": "header",
                    "description": "The event type that triggered the delivery (for example <code>shipment.create</code>).",
                    "schema": {
                      "type": "string"
                    }
                  },
                  {
                    "name": "x-signature",
                    "in": "header",
                    "description": "<p>An authenticity request signature to verify that this event post comes from Controlant. This value is a Base64 UTF8 string of the SHA512 hash of the concatenation of the <br/><code>SecretToken</code> + <code>http method</code> + <code>URL</code> + <code>body.DeliveryId</code> + <code>body.Attempt</code> + <code>body.Reference</code></code>. </p><note>Both <code>http method</code> and <code>URL</code> must be converted to lower-case before calculating the signature hash. Other values should have the same casing as in the body sent to the client. All text must be UTF-8 encoded prior to generating a signature hash.</note>",
                    "schema": {
                      "type": "string"
                    }
                  },
                  {
                    "name": "x-correlation-id",
                    "in": "header",
                    "description": "This value should be used to track a request through the Controlant systems and can aid in incident investigations.",
                    "schema": {
                      "type": "string"
                    }
                  }
                ],
                "requestBody": {
                  "content": {
                    "application/json": {
                      "schema": {
                        "$ref": "#/components/schemas/EventSubscriptionShipmentLoggerLightPayloadEventSubscription"
                      },
                      "example": {
  "deliveryId": "6fa1fc06-1c4b-4c0e-a1d0-7f0bbd446a99",
  "attempt": 1,
  "reference": "My_ShipmentLoggerLightChanged_Event",
  "eventType": "shipment.logger.light.changed",
  "payload": {
    "lightStatus": "On",
    "timeStamp": "2026-03-11T03:26:03Z",
    "shipmentReference": "My-Ongoing-Shipment",
    "loggerId": "30000100"
  },
  "payloadVersion": "1",
  "mode": "Event",
  "environment": "Live",
  "generated": "2026-03-11T06:17:03Z"
}
                    }
                  }
                },
                "responses": {
                  "200": {
                    "description": "Your server implementation should return this HTTP status code if the data was received successfully."
                  },
                  "503": {
                    "description": "Return this status code if your server is down for maintenance or overloaded. This should only be used for temporary conditions. Any time estimates specified in a <code>Retry-After</code> response header will be honoured."
                  }
                }
              }
            }
          },
          "shipment.logger.geostatus.changed": {
            "https://YOUR-SERVER.URL/": {
              "post": {
                "summary": "shipment.logger.geostatus.changed",
                "parameters": [
                  {
                    "name": "x-event-name",
                    "in": "header",
                    "description": "The event type that triggered the delivery (for example <code>shipment.create</code>).",
                    "schema": {
                      "type": "string"
                    }
                  },
                  {
                    "name": "x-signature",
                    "in": "header",
                    "description": "<p>An authenticity request signature to verify that this event post comes from Controlant. This value is a Base64 UTF8 string of the SHA512 hash of the concatenation of the <br/><code>SecretToken</code> + <code>http method</code> + <code>URL</code> + <code>body.DeliveryId</code> + <code>body.Attempt</code> + <code>body.Reference</code></code>. </p><note>Both <code>http method</code> and <code>URL</code> must be converted to lower-case before calculating the signature hash. Other values should have the same casing as in the body sent to the client. All text must be UTF-8 encoded prior to generating a signature hash.</note>",
                    "schema": {
                      "type": "string"
                    }
                  },
                  {
                    "name": "x-correlation-id",
                    "in": "header",
                    "description": "This value should be used to track a request through the Controlant systems and can aid in incident investigations.",
                    "schema": {
                      "type": "string"
                    }
                  }
                ],
                "requestBody": {
                  "content": {
                    "application/json": {
                      "schema": {
                        "$ref": "#/components/schemas/EventSubscriptionShipmentLoggerGeoStatusChangedPayloadEventSubscription"
                      },
                      "example": {
  "deliveryId": "c90736d2-a8de-4595-bccb-e3e9a506741e",
  "attempt": 1,
  "reference": "My_ShipmentLoggerGeoStatusChanged_Event",
  "eventType": "shipment.logger.geostatus.changed",
  "payload": {
    "geoStatus": "EnRoute",
    "timeStamp": "2026-03-11T06:16:08Z",
    "shipmentReference": "My-Ongoing-Shipment",
    "loggerId": "30000100"
  },
  "payloadVersion": "1",
  "mode": "Event",
  "environment": "Live",
  "generated": "2026-03-11T06:17:03Z"
}
                    }
                  }
                },
                "responses": {
                  "200": {
                    "description": "Your server implementation should return this HTTP status code if the data was received successfully."
                  },
                  "503": {
                    "description": "Return this status code if your server is down for maintenance or overloaded. This should only be used for temporary conditions. Any time estimates specified in a <code>Retry-After</code> response header will be honoured."
                  }
                }
              }
            }
          },
          "shipment.analysis.completed": {
            "https://YOUR-SERVER.URL/": {
              "post": {
                "summary": "shipment.analysis.completed",
                "parameters": [
                  {
                    "name": "x-event-name",
                    "in": "header",
                    "description": "The event type that triggered the delivery (for example <code>shipment.create</code>).",
                    "schema": {
                      "type": "string"
                    }
                  },
                  {
                    "name": "x-signature",
                    "in": "header",
                    "description": "<p>An authenticity request signature to verify that this event post comes from Controlant. This value is a Base64 UTF8 string of the SHA512 hash of the concatenation of the <br/><code>SecretToken</code> + <code>http method</code> + <code>URL</code> + <code>body.DeliveryId</code> + <code>body.Attempt</code> + <code>body.Reference</code></code>. </p><note>Both <code>http method</code> and <code>URL</code> must be converted to lower-case before calculating the signature hash. Other values should have the same casing as in the body sent to the client. All text must be UTF-8 encoded prior to generating a signature hash.</note>",
                    "schema": {
                      "type": "string"
                    }
                  },
                  {
                    "name": "x-correlation-id",
                    "in": "header",
                    "description": "This value should be used to track a request through the Controlant systems and can aid in incident investigations.",
                    "schema": {
                      "type": "string"
                    }
                  }
                ],
                "requestBody": {
                  "content": {
                    "application/json": {
                      "schema": {
                        "$ref": "#/components/schemas/EventSubscriptionShipmentAnalysisCompletedPayloadEventSubscription"
                      },
                      "example": {
  "deliveryId": "95dfef8b-b8c9-4468-9887-7423b46df022",
  "attempt": 1,
  "reference": "My_ShipmentAnalysisCompleted_Event",
  "eventType": "shipment.analysis.completed",
  "payload": {
    "shipmentReference": "1020-Oslo-To-Bergen",
    "result": "Good"
  },
  "payloadVersion": "1",
  "mode": "Event",
  "environment": "Live",
  "generated": "2026-03-11T06:17:03Z"
}
                    }
                  }
                },
                "responses": {
                  "200": {
                    "description": "Your server implementation should return this HTTP status code if the data was received successfully."
                  },
                  "503": {
                    "description": "Return this status code if your server is down for maintenance or overloaded. This should only be used for temporary conditions. Any time estimates specified in a <code>Retry-After</code> response header will be honoured."
                  }
                }
              }
            }
          },
          "carrier.milestone.published": {
            "https://YOUR-SERVER.URL/": {
              "post": {
                "summary": "carrier.milestone.published",
                "parameters": [
                  {
                    "name": "x-event-name",
                    "in": "header",
                    "description": "The event type that triggered the delivery (for example <code>shipment.create</code>).",
                    "schema": {
                      "type": "string"
                    }
                  },
                  {
                    "name": "x-signature",
                    "in": "header",
                    "description": "<p>An authenticity request signature to verify that this event post comes from Controlant. This value is a Base64 UTF8 string of the SHA512 hash of the concatenation of the <br/><code>SecretToken</code> + <code>http method</code> + <code>URL</code> + <code>body.DeliveryId</code> + <code>body.Attempt</code> + <code>body.Reference</code></code>. </p><note>Both <code>http method</code> and <code>URL</code> must be converted to lower-case before calculating the signature hash. Other values should have the same casing as in the body sent to the client. All text must be UTF-8 encoded prior to generating a signature hash.</note>",
                    "schema": {
                      "type": "string"
                    }
                  },
                  {
                    "name": "x-correlation-id",
                    "in": "header",
                    "description": "This value should be used to track a request through the Controlant systems and can aid in incident investigations.",
                    "schema": {
                      "type": "string"
                    }
                  }
                ],
                "requestBody": {
                  "content": {
                    "application/json": {
                      "schema": {
                        "$ref": "#/components/schemas/EventSubscriptionCarrierMilestonePublishedPayloadEventSubscription"
                      },
                      "example": {
  "deliveryId": "60da0fde-07ab-41b8-8177-b83b5a7391aa",
  "attempt": 1,
  "reference": "My_CarrierMilestonePublished_Event",
  "eventType": "carrier.milestone.published",
  "payload": {
    "shipmentReference": "carrier-milestone-example-reference",
    "courierCode": "UPS",
    "originLocation": {
      "city": "FAIRDALE",
      "country": "US",
      "rawLocation": "FAIRDALE, KY, US",
      "state": "KY"
    },
    "currentLocation": {
      "city": "FRASER",
      "country": "US",
      "rawLocation": "FRASER, MI, US",
      "state": "MI",
      "zipCode": "48026"
    },
    "destinationLocation": {
      "city": "FRASER",
      "country": "US",
      "rawLocation": "FRASER, MI, US",
      "state": "MI"
    },
    "deliveryStatus": "InTransit",
    "deliverySubStatus": "ArrivedAtTheDestinationCountry",
    "description": "Arrived at Facility",
    "eta": "2026-03-11T09:44:03Z",
    "milestoneCreated": "2026-03-08T06:17:03Z",
    "referenceId": "654321",
    "trackingNumber": "1Z08X342A202583994"
  },
  "payloadVersion": "1",
  "mode": "Event",
  "environment": "Live",
  "generated": "2026-03-11T06:17:03Z"
}
                    }
                  }
                },
                "responses": {
                  "200": {
                    "description": "Your server implementation should return this HTTP status code if the data was received successfully."
                  },
                  "503": {
                    "description": "Return this status code if your server is down for maintenance or overloaded. This should only be used for temporary conditions. Any time estimates specified in a <code>Retry-After</code> response header will be honoured."
                  }
                }
              }
            }
          },
          "shipment.data.temperatures.added": {
            "https://YOUR-SERVER.URL/": {
              "post": {
                "summary": "shipment.data.temperatures.added",
                "parameters": [
                  {
                    "name": "x-event-name",
                    "in": "header",
                    "description": "The event type that triggered the delivery (for example <code>shipment.create</code>).",
                    "schema": {
                      "type": "string"
                    }
                  },
                  {
                    "name": "x-signature",
                    "in": "header",
                    "description": "<p>An authenticity request signature to verify that this event post comes from Controlant. This value is a Base64 UTF8 string of the SHA512 hash of the concatenation of the <br/><code>SecretToken</code> + <code>http method</code> + <code>URL</code> + <code>body.DeliveryId</code> + <code>body.Attempt</code> + <code>body.Reference</code></code>. </p><note>Both <code>http method</code> and <code>URL</code> must be converted to lower-case before calculating the signature hash. Other values should have the same casing as in the body sent to the client. All text must be UTF-8 encoded prior to generating a signature hash.</note>",
                    "schema": {
                      "type": "string"
                    }
                  },
                  {
                    "name": "x-correlation-id",
                    "in": "header",
                    "description": "This value should be used to track a request through the Controlant systems and can aid in incident investigations.",
                    "schema": {
                      "type": "string"
                    }
                  }
                ],
                "requestBody": {
                  "content": {
                    "application/json": {
                      "schema": {
                        "$ref": "#/components/schemas/EventSubscriptionShipmentDataTemperaturesAddedPayloadEventSubscription"
                      },
                      "example": {
  "deliveryId": "4e24efa3-9d2d-4202-beff-69fd0768eb40",
  "attempt": 1,
  "reference": "My_ShipmentDataTemperaturesAdded_Event",
  "eventType": "shipment.data.temperatures.added",
  "payload": {
    "items": [
      {
        "shipmentReference": "63a41d23-9e08-4653-9807-03e669ae0fe7",
        "loggers": [
          {
            "loggerId": "3E000100",
            "temperatures": [
              {
                "timeStamp": "2026-03-11T05:17:03Z",
                "value": 200
              },
              {
                "timeStamp": "2026-03-11T05:27:03Z",
                "value": 202
              },
              {
                "timeStamp": "2026-03-11T05:37:03Z",
                "value": 204
              },
              {
                "timeStamp": "2026-03-11T05:47:03Z",
                "value": 202
              },
              {
                "timeStamp": "2026-03-11T05:57:03Z",
                "value": 200
              },
              {
                "timeStamp": "2026-03-11T06:07:03Z",
                "value": 200
              }
            ],
            "temperaturesCount": 6
          },
          {
            "loggerId": "30001100",
            "temperatures": [
              {
                "timeStamp": "2026-03-11T05:17:03Z",
                "value": 200
              },
              {
                "timeStamp": "2026-03-11T05:27:03Z",
                "value": 202
              },
              {
                "timeStamp": "2026-03-11T05:37:03Z",
                "value": 204
              },
              {
                "timeStamp": "2026-03-11T05:47:03Z",
                "value": 202
              },
              {
                "timeStamp": "2026-03-11T05:57:03Z",
                "value": 200
              },
              {
                "timeStamp": "2026-03-11T06:07:03Z",
                "value": 200
              }
            ],
            "temperaturesCount": 6
          }
        ]
      },
      {
        "shipmentReference": "d3974f74-7e2d-4f9d-a487-66a55d06985b",
        "loggers": [
          {
            "loggerId": "3E000101",
            "temperatures": [
              {
                "timeStamp": "2026-03-11T05:17:03Z",
                "value": 237
              }
            ],
            "temperaturesCount": 1
          }
        ]
      }
    ]
  },
  "payloadVersion": "1",
  "mode": "Event",
  "environment": "Live",
  "generated": "2026-03-11T06:17:03Z"
}
                    }
                  }
                },
                "responses": {
                  "200": {
                    "description": "Your server implementation should return this HTTP status code if the data was received successfully."
                  },
                  "503": {
                    "description": "Return this status code if your server is down for maintenance or overloaded. This should only be used for temporary conditions. Any time estimates specified in a <code>Retry-After</code> response header will be honoured."
                  }
                }
              }
            }
          },
          "shipment.data.geotraces.added": {
            "https://YOUR-SERVER.URL/": {
              "post": {
                "summary": "shipment.data.geotraces.added",
                "parameters": [
                  {
                    "name": "x-event-name",
                    "in": "header",
                    "description": "The event type that triggered the delivery (for example <code>shipment.create</code>).",
                    "schema": {
                      "type": "string"
                    }
                  },
                  {
                    "name": "x-signature",
                    "in": "header",
                    "description": "<p>An authenticity request signature to verify that this event post comes from Controlant. This value is a Base64 UTF8 string of the SHA512 hash of the concatenation of the <br/><code>SecretToken</code> + <code>http method</code> + <code>URL</code> + <code>body.DeliveryId</code> + <code>body.Attempt</code> + <code>body.Reference</code></code>. </p><note>Both <code>http method</code> and <code>URL</code> must be converted to lower-case before calculating the signature hash. Other values should have the same casing as in the body sent to the client. All text must be UTF-8 encoded prior to generating a signature hash.</note>",
                    "schema": {
                      "type": "string"
                    }
                  },
                  {
                    "name": "x-correlation-id",
                    "in": "header",
                    "description": "This value should be used to track a request through the Controlant systems and can aid in incident investigations.",
                    "schema": {
                      "type": "string"
                    }
                  }
                ],
                "requestBody": {
                  "content": {
                    "application/json": {
                      "schema": {
                        "$ref": "#/components/schemas/EventSubscriptionShipmentDataGeoTracesAddedPayloadEventSubscription"
                      },
                      "example": {
  "deliveryId": "04f4ae7c-c3d9-4599-ba71-9f6980fb7a62",
  "attempt": 1,
  "reference": "My_ShipmentDataGeoTracesAdded_Event",
  "eventType": "shipment.data.geotraces.added",
  "payload": {
    "items": [
      {
        "shipmentReference": "addd2390-de75-42b9-ba8e-7be11376ecc8",
        "loggers": [
          {
            "loggerId": "3E000100",
            "traces": [
              {
                "timeStamp": "2026-03-11T04:17:03Z",
                "latitude": 45.882446,
                "longitude": -123.9653255,
                "type": "Approximate",
                "accuracyInMeters": 15
              },
              {
                "timeStamp": "2026-03-11T05:17:03Z",
                "latitude": 45.882446,
                "longitude": -123.9653255,
                "type": "Approximate",
                "accuracyInMeters": 40
              }
            ],
            "tracesCount": 2
          },
          {
            "loggerId": "30001100",
            "traces": [
              {
                "timeStamp": "2026-03-11T06:17:03Z",
                "latitude": 45.882446,
                "longitude": -123.9653255,
                "type": "Approximate",
                "accuracyInMeters": 22
              }
            ],
            "tracesCount": 1
          }
        ]
      },
      {
        "shipmentReference": "43ccb32c-9ff4-42e6-b9dc-c53aac17feaf",
        "loggers": [
          {
            "loggerId": "3E000101",
            "traces": [
              {
                "timeStamp": "2026-03-11T05:17:03Z",
                "latitude": 38.882446,
                "longitude": -80.9653255,
                "type": "Approximate",
                "accuracyInMeters": 8
              }
            ],
            "tracesCount": 1
          }
        ]
      }
    ]
  },
  "payloadVersion": "1",
  "mode": "Event",
  "environment": "Live",
  "generated": "2026-03-11T06:17:03Z"
}
                    }
                  }
                },
                "responses": {
                  "200": {
                    "description": "Your server implementation should return this HTTP status code if the data was received successfully."
                  },
                  "503": {
                    "description": "Return this status code if your server is down for maintenance or overloaded. This should only be used for temporary conditions. Any time estimates specified in a <code>Retry-After</code> response header will be honoured."
                  }
                }
              }
            }
          }
        }
      }
    },
    "/api/events/subscriptions/list": {
      "post": {
        "tags": [
          "Events"
        ],
        "summary": "List Subscriptions",
        "description": "<span class=\"addon-feature\">Requires enabling the Event System API key feature to use standard event features, please contact your Controlant account manager for further details.</span>Lists all registered event subscriptions. If an event subscription reference is supplied\r\nthen only the details for that particular event subscription are retrieved.",
        "requestBody": {
          "description": "An Event Subscription Search request",
          "content": {
            "application/json": {
              "schema": {
                "allOf": [
                  {
                    "$ref": "#/components/schemas/EventSubscriptionSearchRequest"
                  }
                ],
                "description": "Defines an Event Subscription Search Request"
              },
              "example": {
  "subscriptionReference": "MyEventReference"
}
            }
          }
        },
        "responses": {
          "200": {
            "description": "OK",
            "headers": {
              "x-correlation-id": {
                "description": "The unique id identifying the original requests path through the Controlant systems. Callers should log this value to facilitate easier troubleshooting and incident resolution.",
                "schema": {
                  "type": "string"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/EventSubscriptionSearchResponse"
                },
                "examples": {
                  "Single subscription": {
                    "value": {
  "subscriptions": [
    {
      "reference": "MyEventSubscription",
      "url": "https://my-logistics-provider.eu/integrations/controlant/shipments",
      "authenticationReference": "MyAuthenticationReference",
      "certificateReference": "MyCertificateReference",
      "secretToken": "MySecretToken",
      "payloadVersion": "latest",
      "eventType": "shipment.report.created",
      "description": "Event feed to our primary logistics provider",
      "filters": [
        {
          "propertyName": "properties.LogisticsProvider",
          "value": "MyLogisticsProvider",
          "mode": "MustEqual"
        },
        {
          "propertyName": "properties.InterCompany",
          "value": "true",
          "mode": "MustNotEqual"
        },
        {
          "propertyName": "originlocation.country",
          "value": "DE",
          "mode": "MustEqual"
        }
      ],
      "properties": [
        {
          "name": "SourceSystem",
          "value": "MyPharmaCompany"
        },
        {
          "name": "TransportMode",
          "value": "Road"
        }
      ],
      "retryPolicy": "Default"
    }
  ],
  "subscriptionsCount": 1,
  "success": true,
  "responseTime": 0
}
                  },
                  "Two simple subscriptions": {
                    "value": {
  "subscriptions": [
    {
      "reference": "MyShipmentReportCreatedSubscriptionReference",
      "url": "https://my-logistics-provider.eu/integrations/controlant/shipments/reports",
      "authenticationReference": "MyAuthenticationReference",
      "certificateReference": "MyCertificateReference",
      "secretToken": "MySecretToken",
      "payloadVersion": "latest",
      "eventType": "shipment.report.created",
      "description": "Event feed for our ShipmentReportCreated event",
      "retryPolicy": "Default"
    },
    {
      "reference": "MyProductQualityChangedSubscriptionReference",
      "url": "https://my-logistics-provider.eu/integrations/controlant/product/quality/changed",
      "authenticationReference": "MyAuthenticationReference",
      "certificateReference": "MyCertificateReference",
      "payloadVersion": "latest",
      "eventType": "shipment.product.quality.changed",
      "description": "Event feed for our ProductQualityChanged event",
      "retryPolicy": "Default"
    }
  ],
  "subscriptionsCount": 2,
  "success": true,
  "responseTime": 0
}
                  },
                  "Empty subscriptions": {
                    "value": {
  "subscriptions": [],
  "subscriptionsCount": 0,
  "success": true,
  "responseTime": 0
}
                  }
                }
              }
            }
          },
          "400": {
            "description": "Bad Request",
            "headers": {
              "x-correlation-id": {
                "description": "The unique id identifying the original requests path through the Controlant systems. Callers should log this value to facilitate easier troubleshooting and incident resolution.",
                "schema": {
                  "type": "string"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/GenericInputValidationErrorResponse"
                },
                "example": {
  "errorMessage": "One or more validation errors occurred.",
  "status": 400,
  "errors": {
    "Reference": "'Reference' must not be empty.",
    "OriginReference": "'OriginReference' must not be empty.",
    "DestinationReference": "'DestinationReference' must not be empty."
  },
  "success": false,
  "responseTime": 0
}
              }
            }
          },
          "500": {
            "description": "Internal Server Error",
            "headers": {
              "x-correlation-id": {
                "description": "The unique id identifying the original requests path through the Controlant systems. Callers should log this value to facilitate easier troubleshooting and incident resolution.",
                "schema": {
                  "type": "string"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                },
                "example": {
  "errorMessage": "Unexpected error while processing request",
  "status": 500,
  "success": false,
  "responseTime": 150,
  "message": "Internal Error"
}
              }
            }
          }
        }
      }
    },
    "/api/events/subscriptions/delete": {
      "post": {
        "tags": [
          "Events"
        ],
        "summary": "Delete Subscription",
        "description": "<span class=\"addon-feature\">Requires enabling the Event System API key feature to use standard event features, please contact your Controlant account manager for further details.</span>Deletes an event subscription to stop receiving related events at the specified endpoint.",
        "requestBody": {
          "description": "An Event Subscription delete request",
          "content": {
            "application/json": {
              "schema": {
                "allOf": [
                  {
                    "$ref": "#/components/schemas/EventSubscriptionDeleteRequest"
                  }
                ],
                "description": "Defines an Event Subscription Delete Request"
              },
              "example": {
  "subscriptionReference": "MyEventReference"
}
            }
          }
        },
        "responses": {
          "200": {
            "description": "OK",
            "headers": {
              "x-correlation-id": {
                "description": "The unique id identifying the original requests path through the Controlant systems. Callers should log this value to facilitate easier troubleshooting and incident resolution.",
                "schema": {
                  "type": "string"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/EventSubscriptionDeleteResponse"
                },
                "example": {
  "subscriptionReference": "MyEventReference",
  "success": true,
  "responseTime": 0
}
              }
            }
          },
          "400": {
            "description": "Bad Request",
            "headers": {
              "x-correlation-id": {
                "description": "The unique id identifying the original requests path through the Controlant systems. Callers should log this value to facilitate easier troubleshooting and incident resolution.",
                "schema": {
                  "type": "string"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/GenericInputValidationErrorResponse"
                },
                "example": {
  "errorMessage": "One or more validation errors occurred.",
  "status": 400,
  "errors": {
    "Reference": "'Reference' must not be empty.",
    "OriginReference": "'OriginReference' must not be empty.",
    "DestinationReference": "'DestinationReference' must not be empty."
  },
  "success": false,
  "responseTime": 0
}
              }
            }
          },
          "500": {
            "description": "Internal Server Error",
            "headers": {
              "x-correlation-id": {
                "description": "The unique id identifying the original requests path through the Controlant systems. Callers should log this value to facilitate easier troubleshooting and incident resolution.",
                "schema": {
                  "type": "string"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                },
                "example": {
  "errorMessage": "Unexpected error while processing request",
  "status": 500,
  "success": false,
  "responseTime": 150,
  "message": "Internal Error"
}
              }
            }
          }
        }
      }
    },
    "/api/events/subscriptions/delivery/status": {
      "post": {
        "tags": [
          "Events"
        ],
        "summary": "Event Delivery Status",
        "description": "<span class=\"addon-feature\">Requires enabling the Event System API key feature to use standard event features, please contact your Controlant account manager for further details.</span>Gets status of event subscription deliveries for a given period, optionally for a given subscription. Please note that information on deliveries will only be stored for 180 days.\r\n<info>\r\nThis endpoint supports paging result data. You can determine if you need additional calls to the endpoint by looking at the <code>paging</code> object in the response and evaluating the <code>page</code> vs the <code>numberOfPages</code> values.\n\r\nIf you need to call the endpoint again for other pages than the first one, it is <b>imperative</b> that you supply the exact same values in the request, except for the <code>page</code> value in the <code>paging</code> object, otherwise the return data\r\nis not guaranteed to be properly paged.\r\n</info>",
        "requestBody": {
          "description": "An Event Subscription delivery status request",
          "content": {
            "application/json": {
              "schema": {
                "allOf": [
                  {
                    "$ref": "#/components/schemas/EventSubscriptionDeliveryStatusRequest"
                  }
                ],
                "description": "Defines an Event Subscription Delivery Status Request"
              },
              "examples": {
                "First page": {
                  "value": {
  "subscriptionReference": "MyEventReference",
  "fromDate": "2026-03-06T03:17:04Z",
  "toDate": "2026-03-06T06:17:04Z",
  "paging": {
    "page": 1,
    "pageSize": 500
  }
}
                },
                "Second page": {
                  "value": {
  "subscriptionReference": "MyEventReference",
  "fromDate": "2026-03-06T03:17:04Z",
  "toDate": "2026-03-06T06:17:04Z",
  "paging": {
    "page": 2,
    "pageSize": 500
  }
}
                },
                "All subscriptions": {
                  "value": {
  "fromDate": "2026-03-06T03:17:04Z",
  "toDate": "2026-03-06T06:17:04Z",
  "paging": {
    "page": 1,
    "pageSize": 500
  }
}
                }
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "OK",
            "headers": {
              "x-correlation-id": {
                "description": "The unique id identifying the original requests path through the Controlant systems. Callers should log this value to facilitate easier troubleshooting and incident resolution.",
                "schema": {
                  "type": "string"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/EventSubscriptionDeliveryStatusResponse"
                },
                "examples": {
                  "Simple return": {
                    "value": {
  "statuses": [
    {
      "subscriptionReference": "MyEventReference",
      "eventType": "shipment.logger.light.changed",
      "counts": {
        "pendingDeliveriesCount": 0,
        "failedDeliveriesCount": 2,
        "successfulDeliveriesCount": 133
      },
      "failedDeliveries": [
        {
          "deliveryReference": "636cfd72-e363-441f-8a1a-2a0fca48a648",
          "lastDeliveryAttempt": "2026-03-06T06:12:03Z",
          "numberOfDeliveryAttempts": 1,
          "payload": "{ \"Some\" : \"json payload for the event \" }",
          "lastError": {
            "errorCode": 401,
            "errorMessage": "Authentication error",
            "errorType": "HttpEndpoint"
          }
        },
        {
          "deliveryReference": "391c13b8-a3fd-46a2-9e1e-b54400d5b159",
          "lastDeliveryAttempt": "2026-03-08T06:25:25Z",
          "numberOfDeliveryAttempts": 2,
          "payload": "{ \"Some\" : \"json payload for the event \" }",
          "lastError": {
            "errorCode": 0,
            "errorMessage": "Unknown error",
            "errorType": "HttpEndpoint"
          }
        }
      ]
    }
  ],
  "firstEventTimestamp": "2026-03-06T06:12:03Z",
  "lastEventTimestamp": "2026-03-08T06:25:25Z",
  "counts": {
    "pendingDeliveriesCount": 0,
    "failedDeliveriesCount": 2,
    "successfulDeliveriesCount": 133
  },
  "paging": {
    "page": 1,
    "pageSize": 500,
    "numberOfPages": 1,
    "numberOfRecords": 135
  },
  "success": true,
  "responseTime": 0
}
                  },
                  "Multi page": {
                    "value": {
  "statuses": [
    {
      "subscriptionReference": "MyEventReference",
      "eventType": "shipment.status.changed.delivered",
      "counts": {
        "pendingDeliveriesCount": 0,
        "failedDeliveriesCount": 1,
        "successfulDeliveriesCount": 351
      },
      "failedDeliveries": [
        {
          "deliveryReference": "4f1f5264-21e8-4fc0-84cc-8f3a0731fd43",
          "lastDeliveryAttempt": "2026-03-06T06:12:03Z",
          "numberOfDeliveryAttempts": 1,
          "payload": "{ \"Some\" : \"json payload for the event \" }",
          "lastError": {
            "errorCode": 401,
            "errorMessage": "Authentication error",
            "errorType": "HttpEndpoint"
          }
        }
      ]
    },
    {
      "subscriptionReference": "MyOtherEventReference",
      "eventType": "shipment.report.created",
      "counts": {
        "pendingDeliveriesCount": 0,
        "failedDeliveriesCount": 2,
        "successfulDeliveriesCount": 146
      },
      "failedDeliveries": [
        {
          "deliveryReference": "15e36823-57c6-45d6-b7cb-3482be37ceb5",
          "lastDeliveryAttempt": "2026-03-08T06:25:25Z",
          "numberOfDeliveryAttempts": 1,
          "payload": "{ \"Some\" : \"json payload for the event \" }",
          "lastError": {
            "errorCode": 401,
            "errorMessage": "Authentication error",
            "errorType": "HttpEndpoint"
          }
        },
        {
          "deliveryReference": "c48cdcb5-5ec6-4ca7-bede-dbed063773ad",
          "lastDeliveryAttempt": "2026-03-07T07:17:04Z",
          "numberOfDeliveryAttempts": 1,
          "payload": "{ \"Some\" : \"json payload for the event \" }",
          "lastError": {
            "errorCode": 404,
            "errorMessage": "Not found",
            "errorType": "HttpEndpoint"
          }
        }
      ]
    }
  ],
  "firstEventTimestamp": "2026-03-06T06:12:03Z",
  "lastEventTimestamp": "2026-03-08T06:25:25Z",
  "counts": {
    "pendingDeliveriesCount": 0,
    "failedDeliveriesCount": 3,
    "successfulDeliveriesCount": 497
  },
  "paging": {
    "page": 2,
    "pageSize": 500,
    "numberOfPages": 3,
    "numberOfRecords": 1003
  },
  "success": true,
  "responseTime": 0
}
                  }
                }
              }
            }
          },
          "400": {
            "description": "Bad Request",
            "headers": {
              "x-correlation-id": {
                "description": "The unique id identifying the original requests path through the Controlant systems. Callers should log this value to facilitate easier troubleshooting and incident resolution.",
                "schema": {
                  "type": "string"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/GenericInputValidationErrorResponse"
                },
                "example": {
  "errorMessage": "One or more validation errors occurred.",
  "status": 400,
  "errors": {
    "Reference": "'Reference' must not be empty.",
    "OriginReference": "'OriginReference' must not be empty.",
    "DestinationReference": "'DestinationReference' must not be empty."
  },
  "success": false,
  "responseTime": 0
}
              }
            }
          },
          "500": {
            "description": "Internal Server Error",
            "headers": {
              "x-correlation-id": {
                "description": "The unique id identifying the original requests path through the Controlant systems. Callers should log this value to facilitate easier troubleshooting and incident resolution.",
                "schema": {
                  "type": "string"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                },
                "example": {
  "errorMessage": "Unexpected error while processing request",
  "status": 500,
  "success": false,
  "responseTime": 150,
  "message": "Internal Error"
}
              }
            }
          }
        }
      }
    },
    "/api/events/simulate": {
      "post": {
        "tags": [
          "Events"
        ],
        "summary": "Simulate Event",
        "description": "<span class=\"addon-feature\">Requires enabling the Event System API key feature to use standard event features, please contact your Controlant account manager for further details.</span>Triggers an existing customer event subscription with a simulated payload data, this feature is intended for\r\ndevelopment or integration testing purposes only and should not be run in production.\r\nAll manually triggered events will have their <code>mode</code> parameter set to <code>Simulated</code>.\r\n<info>\r\nThe events that this call generates only serve to validate the connection to the listener URL\r\nand to show how sent events work for development purposes.\r\n</info>",
        "requestBody": {
          "description": "An Event Subscription Simulation request",
          "content": {
            "application/json": {
              "schema": {
                "allOf": [
                  {
                    "$ref": "#/components/schemas/EventSubscriptionSimulationRequest"
                  }
                ],
                "description": "Defines an Event Subscription Simulation Request"
              },
              "examples": {
                "Shipment report created event": {
                  "value": {
  "subscriptionReference": "MyShipmentReference",
  "simulationPayload": {
    "ShipmentReference": "MyShipmentReference",
    "ReportType": "DeliveryReport",
    "ReportNumber": 1,
    "ReportTotalCount": 2,
    "DownloadUrl": "https://integrations.controlant.com/api/scm/shipments/reports/MyShipmentReference/1",
    "LanguageCode": "en"
  }
}
                },
                "Shipment status changed event Shipping": {
                  "value": {
  "subscriptionReference": "MyShipmentReference",
  "simulationPayload": {
    "ShipmentReference": "MyShipmentReference",
    "Status": "Shipping",
    "PreviousStatus": "Ready",
    "TransitionType": "Manual",
    "StatusChangedTimeStamp": "2026-03-11T06:17:04Z",
    "EffectiveTimeStamp": "2026-03-11T06:17:04Z"
  }
}
                },
                "Shipment status changed event Delivered": {
                  "value": {
  "subscriptionReference": "MyShipmentReference",
  "simulationPayload": {
    "ShipmentReference": "MyShipmentReference",
    "Status": "Delivered",
    "PreviousStatus": "Shipping",
    "TransitionType": "Manual",
    "StatusChangedTimeStamp": "2026-03-11T06:17:04Z",
    "EffectiveTimeStamp": "2026-03-11T06:17:04Z"
  }
}
                },
                "Shipment product changed event WithinBudget": {
                  "value": {
  "subscriptionReference": "MyShipmentReference",
  "simulationPayload": {
    "ShipmentReference": "MyShipmentReference",
    "ProductReference": "MY-PRODUCT",
    "EvaluationStatus": "WithinBudget",
    "QualityChangedTimeStamp": "2026-03-11T06:17:04Z"
  }
}
                },
                "Shipment product changed event ExceedsBudget": {
                  "value": {
  "subscriptionReference": "MyShipmentReference",
  "simulationPayload": {
    "ShipmentReference": "MyShipmentReference",
    "ProductReference": "MY-PRODUCT",
    "EvaluationStatus": "ExceedsBudget",
    "QualityChangedTimeStamp": "2026-03-11T06:17:04Z"
  }
}
                },
                "Shipment logger rearm event": {
                  "value": {
  "subscriptionReference": "MyShipmentReference",
  "simulationPayload": {
    "Alert": {
      "Bounds": "DualBounds",
      "RearmDelayUntil": "2026-03-11T08:17:04Z",
      "DataType": "Temperature",
      "LowerBoundary": -500,
      "UpperBoundary": 50,
      "AccumulativeTimeLimit": 600,
      "Severity": "Level1"
    },
    "ShipmentReference": "MyShipmentReference",
    "LoggerId": "CMS 10100000"
  }
}
                }
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "OK",
            "headers": {
              "x-correlation-id": {
                "description": "The unique id identifying the original requests path through the Controlant systems. Callers should log this value to facilitate easier troubleshooting and incident resolution.",
                "schema": {
                  "type": "string"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/EventSubscriptionSimulationResponse"
                },
                "example": {
  "success": true,
  "responseTime": 250,
  "message": "Success"
}
              }
            }
          },
          "400": {
            "description": "Bad Request",
            "headers": {
              "x-correlation-id": {
                "description": "The unique id identifying the original requests path through the Controlant systems. Callers should log this value to facilitate easier troubleshooting and incident resolution.",
                "schema": {
                  "type": "string"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/GenericInputValidationErrorResponse"
                },
                "example": {
  "errorMessage": "One or more validation errors occurred.",
  "status": 400,
  "errors": {
    "Reference": "'Reference' must not be empty.",
    "OriginReference": "'OriginReference' must not be empty.",
    "DestinationReference": "'DestinationReference' must not be empty."
  },
  "success": false,
  "responseTime": 0
}
              }
            }
          },
          "500": {
            "description": "Internal Server Error",
            "headers": {
              "x-correlation-id": {
                "description": "The unique id identifying the original requests path through the Controlant systems. Callers should log this value to facilitate easier troubleshooting and incident resolution.",
                "schema": {
                  "type": "string"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                },
                "example": {
  "errorMessage": "Unexpected error while processing request",
  "status": 500,
  "success": false,
  "responseTime": 150,
  "message": "Internal Error"
}
              }
            }
          }
        }
      }
    },
    "/api/locations/create": {
      "post": {
        "tags": [
          "Locations"
        ],
        "summary": "Create Location",
        "description": "Creates a new location with the given reference value.\r\nLocation can be used for both Shipment Origins and Destinations for the Supply Chain Monitoring.",
        "requestBody": {
          "description": "A Location create request",
          "content": {
            "application/json": {
              "schema": {
                "allOf": [
                  {
                    "$ref": "#/components/schemas/LocationCreateRequest"
                  }
                ],
                "description": "Defines a Location request"
              },
              "example": {
  "reference": "controlant-boston-us",
  "name": "Where Everybody Knows Your Name",
  "description": "Cheers!",
  "phone": "555-4568",
  "addressLine1": "84 Beacon Street",
  "city": "Boston",
  "region": "MA",
  "postCode": "66678",
  "country": "US"
}
            }
          }
        },
        "responses": {
          "200": {
            "description": "OK",
            "headers": {
              "x-correlation-id": {
                "description": "The unique id identifying the original requests path through the Controlant systems. Callers should log this value to facilitate easier troubleshooting and incident resolution.",
                "schema": {
                  "type": "string"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/LocationUpdateResponse"
                },
                "example": {
  "locationReference": "controlant-boston-us",
  "success": true,
  "responseTime": 0
}
              }
            }
          },
          "400": {
            "description": "Bad Request",
            "headers": {
              "x-correlation-id": {
                "description": "The unique id identifying the original requests path through the Controlant systems. Callers should log this value to facilitate easier troubleshooting and incident resolution.",
                "schema": {
                  "type": "string"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/GenericInputValidationErrorResponse"
                },
                "example": {
  "errorMessage": "One or more validation errors occurred.",
  "status": 400,
  "errors": {
    "Reference": "'Reference' must not be empty.",
    "OriginReference": "'OriginReference' must not be empty.",
    "DestinationReference": "'DestinationReference' must not be empty."
  },
  "success": false,
  "responseTime": 0
}
              }
            }
          },
          "500": {
            "description": "Internal Server Error",
            "headers": {
              "x-correlation-id": {
                "description": "The unique id identifying the original requests path through the Controlant systems. Callers should log this value to facilitate easier troubleshooting and incident resolution.",
                "schema": {
                  "type": "string"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                },
                "example": {
  "errorMessage": "Unexpected error while processing request",
  "status": 500,
  "success": false,
  "responseTime": 150,
  "message": "Internal Error"
}
              }
            }
          }
        }
      }
    },
    "/api/locations/get": {
      "post": {
        "tags": [
          "Locations"
        ],
        "summary": "Get Location",
        "description": "Gets a previously created location from the system.",
        "requestBody": {
          "description": "A Location get request",
          "content": {
            "application/json": {
              "schema": {
                "allOf": [
                  {
                    "$ref": "#/components/schemas/LocationGetRequest"
                  }
                ],
                "description": "Defines a Location Get"
              },
              "example": {
  "locationReference": "controlant-boston-us"
}
            }
          }
        },
        "responses": {
          "200": {
            "description": "OK",
            "headers": {
              "x-correlation-id": {
                "description": "The unique id identifying the original requests path through the Controlant systems. Callers should log this value to facilitate easier troubleshooting and incident resolution.",
                "schema": {
                  "type": "string"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/LocationGetResponse"
                },
                "example": {
  "location": {
    "created": "2025-12-04T06:17:04Z",
    "updated": "2026-03-10T10:50:24Z",
    "reference": "controlant-boston-us",
    "name": "Where Everybody Knows Your Name",
    "description": "Cheers!",
    "phone": "555-4568",
    "addressLine1": "84 Beacon Street",
    "city": "Boston",
    "region": "MA",
    "postCode": "66678",
    "country": "US",
    "latitude": 42.35614,
    "longitude": -71.07126,
    "radius": 1000
  },
  "success": true,
  "responseTime": 0
}
              }
            }
          },
          "400": {
            "description": "Bad Request",
            "headers": {
              "x-correlation-id": {
                "description": "The unique id identifying the original requests path through the Controlant systems. Callers should log this value to facilitate easier troubleshooting and incident resolution.",
                "schema": {
                  "type": "string"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/GenericInputValidationErrorResponse"
                },
                "example": {
  "errorMessage": "One or more validation errors occurred.",
  "status": 400,
  "errors": {
    "Reference": "'Reference' must not be empty.",
    "OriginReference": "'OriginReference' must not be empty.",
    "DestinationReference": "'DestinationReference' must not be empty."
  },
  "success": false,
  "responseTime": 0
}
              }
            }
          },
          "500": {
            "description": "Internal Server Error",
            "headers": {
              "x-correlation-id": {
                "description": "The unique id identifying the original requests path through the Controlant systems. Callers should log this value to facilitate easier troubleshooting and incident resolution.",
                "schema": {
                  "type": "string"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                },
                "example": {
  "errorMessage": "Unexpected error while processing request",
  "status": 500,
  "success": false,
  "responseTime": 150,
  "message": "Internal Error"
}
              }
            }
          }
        }
      }
    },
    "/api/locations/delete": {
      "post": {
        "tags": [
          "Locations"
        ],
        "summary": "Delete Location",
        "description": "Deletes a previously created location from the system.",
        "requestBody": {
          "description": "A Location delete request",
          "content": {
            "application/json": {
              "schema": {
                "allOf": [
                  {
                    "$ref": "#/components/schemas/LocationDeleteRequest"
                  }
                ],
                "description": "Defines a Location Delete"
              },
              "example": {
  "locationReference": "controlant-boston-us"
}
            }
          }
        },
        "responses": {
          "200": {
            "description": "OK",
            "headers": {
              "x-correlation-id": {
                "description": "The unique id identifying the original requests path through the Controlant systems. Callers should log this value to facilitate easier troubleshooting and incident resolution.",
                "schema": {
                  "type": "string"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/LocationUpdateResponse"
                },
                "example": {
  "locationReference": "controlant-boston-us",
  "success": true,
  "responseTime": 0
}
              }
            }
          },
          "400": {
            "description": "Bad Request",
            "headers": {
              "x-correlation-id": {
                "description": "The unique id identifying the original requests path through the Controlant systems. Callers should log this value to facilitate easier troubleshooting and incident resolution.",
                "schema": {
                  "type": "string"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/GenericInputValidationErrorResponse"
                },
                "example": {
  "errorMessage": "One or more validation errors occurred.",
  "status": 400,
  "errors": {
    "Reference": "'Reference' must not be empty.",
    "OriginReference": "'OriginReference' must not be empty.",
    "DestinationReference": "'DestinationReference' must not be empty."
  },
  "success": false,
  "responseTime": 0
}
              }
            }
          },
          "500": {
            "description": "Internal Server Error",
            "headers": {
              "x-correlation-id": {
                "description": "The unique id identifying the original requests path through the Controlant systems. Callers should log this value to facilitate easier troubleshooting and incident resolution.",
                "schema": {
                  "type": "string"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                },
                "example": {
  "errorMessage": "Unexpected error while processing request",
  "status": 500,
  "success": false,
  "responseTime": 150,
  "message": "Internal Error"
}
              }
            }
          }
        }
      }
    },
    "/api/scm/loggers/status/check": {
      "post": {
        "tags": [
          "Loggers"
        ],
        "summary": "Logger Status Check",
        "description": "Performs status check for requested logger by checking the logger operational and calibration status to determine whether a logger is allowed in a shipment.\r\n<note><b>Logger Operational Status</b>\n\r\n      Logger operational status must be <code>Active</code></note><note><b>Logger Calibration</b>\n\r\n      Logger calibration must be valid\r\n</note>",
        "requestBody": {
          "description": "A logger status request",
          "content": {
            "application/json": {
              "schema": {
                "allOf": [
                  {
                    "$ref": "#/components/schemas/LoggerStatusCheckRequest"
                  }
                ],
                "description": "Defines a request for logger status check"
              },
              "example": {
  "loggerId": "CMS 10011011"
}
            }
          }
        },
        "responses": {
          "200": {
            "description": "OK",
            "headers": {
              "x-correlation-id": {
                "description": "The unique id identifying the original requests path through the Controlant systems. Callers should log this value to facilitate easier troubleshooting and incident resolution.",
                "schema": {
                  "type": "string"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/LoggerStatusCheckResponse"
                },
                "examples": {
                  "Allowed In Shipment": {
                    "value": {
  "loggerId": "30100000",
  "allowedInShipment": true,
  "operationStatus": "Active",
  "calibration": {
    "lastCalibrationDate": "2025-12-11T00:00:00Z"
  },
  "loggerType": "Saga",
  "success": true,
  "responseTime": 0
}
                  },
                  "Recalled Logger": {
                    "value": {
  "loggerId": "30001000",
  "allowedInShipment": false,
  "operationStatus": "Deactivated",
  "notAllowedReason": "Logger '30001000' is in a 'Deactivated' state, only loggers in 'Active' state can be used for shipments.",
  "calibration": {
    "lastCalibrationDate": "2025-12-11T00:00:00Z"
  },
  "loggerType": "Saga",
  "success": true,
  "responseTime": 0
}
                  },
                  "Calibration Expired": {
                    "value": {
  "loggerId": "30001100",
  "allowedInShipment": false,
  "operationStatus": "Active",
  "notAllowedReason": "Calibration for logger '30001100' is expired, expiry date was '2026-02-11T00:00:00Z'",
  "calibration": {
    "lastCalibrationDate": "2027-04-11T00:00:00Z"
  },
  "loggerType": "Saga",
  "success": true,
  "responseTime": 0
}
                  },
                  "Entered Recalibration Period": {
                    "value": {
  "loggerId": "30001100",
  "allowedInShipment": false,
  "operationStatus": "Active",
  "notAllowedReason": "Logger '30001100' has entered a recalibration period. The recalibration period start date is '2026-02-11T00:00:00Z'",
  "calibration": {
    "lastCalibrationDate": "2025-05-11T00:00:00Z"
  },
  "loggerType": "Saga",
  "success": true,
  "responseTime": 0
}
                  },
                  "Logger Not Calibrated": {
                    "value": {
  "loggerId": "30001100",
  "allowedInShipment": false,
  "operationStatus": "Active",
  "notAllowedReason": "No calibration exists for Logger: '30001100'",
  "loggerType": "Saga",
  "success": true,
  "responseTime": 0
}
                  },
                  "Calibration Policy Missing": {
                    "value": {
  "loggerId": "30001100",
  "allowedInShipment": false,
  "operationStatus": "Active",
  "notAllowedReason": "Calibration policy does not exist for logger '30001100'",
  "loggerType": "Saga",
  "success": true,
  "responseTime": 0
}
                  }
                }
              }
            }
          },
          "400": {
            "description": "Bad Request",
            "headers": {
              "x-correlation-id": {
                "description": "The unique id identifying the original requests path through the Controlant systems. Callers should log this value to facilitate easier troubleshooting and incident resolution.",
                "schema": {
                  "type": "string"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/GenericInputValidationErrorResponse"
                },
                "example": {
  "errorMessage": "One or more validation errors occurred.",
  "status": 400,
  "errors": {
    "Reference": "'Reference' must not be empty.",
    "OriginReference": "'OriginReference' must not be empty.",
    "DestinationReference": "'DestinationReference' must not be empty."
  },
  "success": false,
  "responseTime": 0
}
              }
            }
          },
          "500": {
            "description": "Internal Server Error",
            "headers": {
              "x-correlation-id": {
                "description": "The unique id identifying the original requests path through the Controlant systems. Callers should log this value to facilitate easier troubleshooting and incident resolution.",
                "schema": {
                  "type": "string"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                },
                "example": {
  "errorMessage": "Unexpected error while processing request",
  "status": 500,
  "success": false,
  "responseTime": 150,
  "message": "Internal Error"
}
              }
            }
          }
        }
      }
    },
    "/api/scm/loggers/info": {
      "post": {
        "tags": [
          "Loggers"
        ],
        "summary": "Get Loggers Info",
        "description": "Retrieves information for requested loggers about their performance.\r\nThe loggers info currently retrievable are battery level and cellular signal (in percentages).",
        "requestBody": {
          "description": "Loggers info request",
          "content": {
            "application/json": {
              "schema": {
                "allOf": [
                  {
                    "$ref": "#/components/schemas/LoggersInfoRequest"
                  }
                ],
                "description": "Defines a request for logger information for requested loggers"
              },
              "example": {
  "loggerIds": [
    "CMS 30000001",
    "CMS 30001001"
  ]
}
            }
          }
        },
        "responses": {
          "200": {
            "description": "OK",
            "headers": {
              "x-correlation-id": {
                "description": "The unique id identifying the original requests path through the Controlant systems. Callers should log this value to facilitate easier troubleshooting and incident resolution.",
                "schema": {
                  "type": "string"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/LoggersInfoResponse"
                },
                "examples": {
                  "Standard response": {
                    "value": {
  "loggers": [
    {
      "loggerId": "30000001",
      "infoData": [
        {
          "value": 50.0,
          "type": "Battery",
          "lastUpdatedTimeStamp": "2026-03-11T04:17:04Z"
        },
        {
          "value": 70.0,
          "type": "CellSignal",
          "lastUpdatedTimeStamp": "2026-03-11T05:17:04Z"
        }
      ],
      "loggerType": "Saga"
    },
    {
      "loggerId": "30001001",
      "infoData": [
        {
          "value": 100.0,
          "type": "Battery",
          "lastUpdatedTimeStamp": "2026-03-11T04:17:04Z"
        },
        {
          "value": 100.0,
          "type": "CellSignal",
          "lastUpdatedTimeStamp": "2026-03-11T05:17:04Z"
        }
      ],
      "loggerType": "Saga"
    }
  ],
  "loggersCount": 2,
  "success": true,
  "responseTime": 0
}
                  },
                  "With events": {
                    "value": {
  "loggers": [
    {
      "loggerId": "30000001",
      "infoData": [
        {
          "value": 50.0,
          "type": "Battery",
          "lastUpdatedTimeStamp": "2026-03-11T04:17:04Z"
        },
        {
          "value": 70.0,
          "type": "CellSignal",
          "lastUpdatedTimeStamp": "2026-03-11T05:17:04Z"
        }
      ],
      "loggerType": "Saga",
      "eventsCount": 1,
      "events": [
        {
          "event": "ButtonPressed",
          "timestamp": "2026-03-09T06:17:04Z",
          "payload": {
            "state": "Start"
          },
          "location": {
            "timeStamp": "2026-03-09T06:13:54Z",
            "latitude": 62.1243,
            "longitude": 13.129,
            "type": "Interpolated",
            "accuracyInMeters": 1000
          }
        }
      ]
    },
    {
      "loggerId": "30001001",
      "infoData": [
        {
          "value": 100.0,
          "type": "Battery",
          "lastUpdatedTimeStamp": "2026-03-11T04:17:04Z"
        },
        {
          "value": 100.0,
          "type": "CellSignal",
          "lastUpdatedTimeStamp": "2026-03-11T05:17:04Z"
        }
      ],
      "loggerType": "Saga",
      "eventsCount": 1,
      "events": [
        {
          "event": "ButtonPressed",
          "timestamp": "2026-03-09T06:17:04Z",
          "payload": {
            "state": "Start"
          },
          "location": {
            "timeStamp": "2026-03-09T06:13:54Z",
            "latitude": 62.1243,
            "longitude": 13.129,
            "type": "Interpolated",
            "accuracyInMeters": 1000
          }
        }
      ]
    }
  ],
  "loggersCount": 2,
  "success": true,
  "responseTime": 0
}
                  }
                }
              }
            }
          },
          "400": {
            "description": "Bad Request",
            "headers": {
              "x-correlation-id": {
                "description": "The unique id identifying the original requests path through the Controlant systems. Callers should log this value to facilitate easier troubleshooting and incident resolution.",
                "schema": {
                  "type": "string"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/GenericInputValidationErrorResponse"
                },
                "example": {
  "errorMessage": "One or more validation errors occurred.",
  "status": 400,
  "errors": {
    "Reference": "'Reference' must not be empty.",
    "OriginReference": "'OriginReference' must not be empty.",
    "DestinationReference": "'DestinationReference' must not be empty."
  },
  "success": false,
  "responseTime": 0
}
              }
            }
          },
          "500": {
            "description": "Internal Server Error",
            "headers": {
              "x-correlation-id": {
                "description": "The unique id identifying the original requests path through the Controlant systems. Callers should log this value to facilitate easier troubleshooting and incident resolution.",
                "schema": {
                  "type": "string"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                },
                "example": {
  "errorMessage": "Unexpected error while processing request",
  "status": 500,
  "success": false,
  "responseTime": 150,
  "message": "Internal Error"
}
              }
            }
          }
        }
      }
    },
    "/api/scm/loggers/list": {
      "post": {
        "tags": [
          "Loggers"
        ],
        "summary": "Get Logger list",
        "description": "Retrieves a list of loggers registered to the customer account, optionally filtered either on inclusion or exclusion.\r\n<info>\r\nThis endpoint supports paging result data.You can determine if you need additional calls to the endpoint by looking at the <code>paging</code> object in the response and evaluating the <code>page</code> vs the <code>numberOfPages</code> values.\n\r\nIf you need to call the endpoint again for other pages than the first one, it is <b>imperative</b> that you supply the exact same values in the request, except for the <code>page</code> value in the <code>paging</code> object, otherwise the return data\r\nis not guaranteed to be properly paged.\r\n</info>",
        "requestBody": {
          "description": "Logger list request",
          "content": {
            "application/json": {
              "schema": {
                "allOf": [
                  {
                    "$ref": "#/components/schemas/LoggerListRequest"
                  }
                ],
                "description": "Defines a request for assigned loggers"
              },
              "examples": {
                "Including specific loggers": {
                  "value": {
  "loggerIds": [
    "30000001",
    "30001001"
  ]
}
                },
                "Excluding specific loggers": {
                  "value": {
  "excludeLoggerIds": [
    "30000001",
    "30001001"
  ]
}
                }
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "OK",
            "headers": {
              "x-correlation-id": {
                "description": "The unique id identifying the original requests path through the Controlant systems. Callers should log this value to facilitate easier troubleshooting and incident resolution.",
                "schema": {
                  "type": "string"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/LoggerListResponse"
                },
                "example": {
  "loggers": [
    {
      "loggerId": "301652C4",
      "firmware": {
        "id": 379,
        "version": "SAGA.2.4.2"
      },
      "operationStatus": "Active",
      "loggerType": "Saga"
    },
    {
      "loggerId": "3001B619",
      "firmware": {
        "id": 378,
        "version": "SAGA.2.4.1",
        "targetId": 379,
        "targetVersion": "SAGA.2.4.2"
      },
      "operationStatus": "Active",
      "loggerType": "Saga"
    }
  ],
  "loggersCount": 2,
  "success": true,
  "responseTime": 0
}
              }
            }
          },
          "400": {
            "description": "Bad Request",
            "headers": {
              "x-correlation-id": {
                "description": "The unique id identifying the original requests path through the Controlant systems. Callers should log this value to facilitate easier troubleshooting and incident resolution.",
                "schema": {
                  "type": "string"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/GenericInputValidationErrorResponse"
                },
                "example": {
  "errorMessage": "One or more validation errors occurred.",
  "status": 400,
  "errors": {
    "Reference": "'Reference' must not be empty.",
    "OriginReference": "'OriginReference' must not be empty.",
    "DestinationReference": "'DestinationReference' must not be empty."
  },
  "success": false,
  "responseTime": 0
}
              }
            }
          },
          "500": {
            "description": "Internal Server Error",
            "headers": {
              "x-correlation-id": {
                "description": "The unique id identifying the original requests path through the Controlant systems. Callers should log this value to facilitate easier troubleshooting and incident resolution.",
                "schema": {
                  "type": "string"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                },
                "example": {
  "errorMessage": "Unexpected error while processing request",
  "status": 500,
  "success": false,
  "responseTime": 150,
  "message": "Internal Error"
}
              }
            }
          }
        }
      }
    },
    "/api/products/create": {
      "post": {
        "tags": [
          "Products"
        ],
        "summary": "Create Product",
        "description": "<span class=\"addon-feature\">This is an optional added value feature, please contact your Controlant account manager for further details.</span>Creates a new product  profile with the given reference value.\r\nThis profile is used to specify release condition information for a given\r\nproduct when added to shipments. This includes temperature stability data as well\r\nas freeze-thaw tolerances and transport conditions.",
        "requestBody": {
          "description": "A Product create request",
          "content": {
            "application/json": {
              "schema": {
                "allOf": [
                  {
                    "$ref": "#/components/schemas/ProductCreateRequest"
                  }
                ],
                "description": "Defines a Product"
              },
              "example": {
  "reference": "acetylsalicylic_acid",
  "name": "Acetylsalicylic Acid",
  "description": "Important medicine",
  "transportConditions": {
    "lowerTemperatureThreshold": 20,
    "upperTemperatureThreshold": 80
  },
  "freezeThawCycles": {
    "threshold": -5,
    "maxCycles": 3
  },
  "temperatureProfile": {
    "ruleGroups": [
      {
        "rules": [
          {
            "type": "Lower",
            "lowerThreshold": 20,
            "duration": "576h"
          },
          {
            "type": "Lower",
            "lowerThreshold": -200,
            "duration": "0h"
          },
          {
            "type": "Upper",
            "upperThreshold": 80,
            "duration": "141h"
          },
          {
            "type": "Upper",
            "upperThreshold": 150,
            "duration": "21h"
          },
          {
            "type": "Upper",
            "upperThreshold": 250,
            "duration": "11h"
          },
          {
            "type": "Upper",
            "upperThreshold": 300,
            "duration": "0h"
          }
        ]
      }
    ]
  }
}
            }
          }
        },
        "responses": {
          "200": {
            "description": "OK",
            "headers": {
              "x-correlation-id": {
                "description": "The unique id identifying the original requests path through the Controlant systems. Callers should log this value to facilitate easier troubleshooting and incident resolution.",
                "schema": {
                  "type": "string"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProductUpdateResponse"
                },
                "example": {
  "productReference": "maxdevin-400mg",
  "success": true,
  "responseTime": 0
}
              }
            }
          },
          "400": {
            "description": "Bad Request",
            "headers": {
              "x-correlation-id": {
                "description": "The unique id identifying the original requests path through the Controlant systems. Callers should log this value to facilitate easier troubleshooting and incident resolution.",
                "schema": {
                  "type": "string"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/GenericInputValidationErrorResponse"
                },
                "example": {
  "errorMessage": "One or more validation errors occurred.",
  "status": 400,
  "errors": {
    "Reference": "'Reference' must not be empty.",
    "OriginReference": "'OriginReference' must not be empty.",
    "DestinationReference": "'DestinationReference' must not be empty."
  },
  "success": false,
  "responseTime": 0
}
              }
            }
          },
          "500": {
            "description": "Internal Server Error",
            "headers": {
              "x-correlation-id": {
                "description": "The unique id identifying the original requests path through the Controlant systems. Callers should log this value to facilitate easier troubleshooting and incident resolution.",
                "schema": {
                  "type": "string"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                },
                "example": {
  "errorMessage": "Unexpected error while processing request",
  "status": 500,
  "success": false,
  "responseTime": 150,
  "message": "Internal Error"
}
              }
            }
          }
        }
      }
    },
    "/api/scm/shipments/inspections/create": {
      "post": {
        "tags": [
          "Shipments"
        ],
        "summary": "Create Shipment Inspection",
        "description": "Attaches a new or updates existing inspection data for a shipment. Inspection can be created for shipments that are currently in a <code>Ready</code>, <code>Shipping</code> or <code>Delivered</code> state.",
        "requestBody": {
          "description": "A Shipment Inspection create request",
          "content": {
            "application/json": {
              "schema": {
                "allOf": [
                  {
                    "$ref": "#/components/schemas/ShipmentInspectionRequest"
                  }
                ],
                "description": "Defines a Shipment Inspection Request"
              },
              "example": {
  "shipmentReference": "8248a492-2a96-48b3-8e9f-64e57b557582",
  "inspection": {
    "inspectionStatus": "Inspected",
    "inspectionQuality": "Rejected",
    "inspectionComment": "Shipment inspected"
  }
}
            }
          }
        },
        "responses": {
          "200": {
            "description": "OK",
            "headers": {
              "x-correlation-id": {
                "description": "The unique id identifying the original requests path through the Controlant systems. Callers should log this value to facilitate easier troubleshooting and incident resolution.",
                "schema": {
                  "type": "string"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ShipmentUpdateResponse"
                },
                "example": {
  "shipmentReference": "Oslo-to-Copenhagen-Jan2020",
  "success": true,
  "responseTime": 0
}
              }
            }
          },
          "400": {
            "description": "Bad Request",
            "headers": {
              "x-correlation-id": {
                "description": "The unique id identifying the original requests path through the Controlant systems. Callers should log this value to facilitate easier troubleshooting and incident resolution.",
                "schema": {
                  "type": "string"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/GenericInputValidationErrorResponse"
                },
                "example": {
  "errorMessage": "One or more validation errors occurred.",
  "status": 400,
  "errors": {
    "Reference": "'Reference' must not be empty.",
    "OriginReference": "'OriginReference' must not be empty.",
    "DestinationReference": "'DestinationReference' must not be empty."
  },
  "success": false,
  "responseTime": 0
}
              }
            }
          },
          "500": {
            "description": "Internal Server Error",
            "headers": {
              "x-correlation-id": {
                "description": "The unique id identifying the original requests path through the Controlant systems. Callers should log this value to facilitate easier troubleshooting and incident resolution.",
                "schema": {
                  "type": "string"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                },
                "example": {
  "errorMessage": "Unexpected error while processing request",
  "status": 500,
  "success": false,
  "responseTime": 150,
  "message": "Internal Error"
}
              }
            }
          }
        }
      }
    },
    "/api/scm/shipments/create": {
      "post": {
        "tags": [
          "Shipments"
        ],
        "summary": "Create Shipment",
        "description": "Creates a new shipment in a <code>Draft</code> state based on predefined reference templates stored in the Controlant systems.\r\n<info>If an existing shipment is found with the same <code>Reference</code> then this function returns an error.</info>",
        "requestBody": {
          "description": "A Shipment create request",
          "content": {
            "application/json": {
              "schema": {
                "allOf": [
                  {
                    "$ref": "#/components/schemas/ShipmentCreateRequest"
                  }
                ],
                "description": "Defines a Shipment"
              },
              "examples": {
                "With AlertTemplateReference": {
                  "value": {
  "reference": "768f8f74-b0d1-4e76-8dd2-402d4d34da58",
  "description": "Shipment created from our ERP system",
  "contactTemplateReference": "Supportdesk-level1",
  "loggerTemplateReference": "airfreight-loggersettings",
  "alertTemplateReference": [
    "Amoxil-1000mg-Generic"
  ],
  "originReference": "dubai-warehouse-A1-eastside",
  "destinationReference": "kork-siteB-loadingdock",
  "createOptions": {
    "draftMode": "Regular",
    "shipmentType": "Regular"
  },
  "loggers": [
    {
      "loggerId": "10004857",
      "palletReference": "Pallet A",
      "placementReference": "Top"
    },
    {
      "loggerId": "10004858",
      "palletReference": "Pallet B",
      "placementReference": "Top"
    },
    {
      "loggerId": "10004859",
      "palletReference": "Pallet C",
      "placementReference": "Bottom"
    },
    {
      "loggerId": "10004850",
      "palletReference": "Pallet C",
      "placementReference": "Middle"
    }
  ],
  "properties": [
    {
      "name": "ERPShipmentRef",
      "value": "TDL64-648DDRRR"
    },
    {
      "name": "TrackingId",
      "value": "ITTT654654687987GB"
    }
  ],
  "products": [
    {
      "productReference": "maxdevin-400mg",
      "palletReference": "Pallet C",
      "batchReference": "12345",
      "properties": [
        {
          "name": "MaterialId",
          "value": "6655"
        }
      ]
    },
    {
      "productReference": "maxdevin-400mg",
      "palletReference": "Pallet A",
      "batchReference": "5566",
      "properties": [
        {
          "name": "MaterialId",
          "value": "8899"
        }
      ]
    },
    {
      "productReference": "maxdevin-400mg",
      "palletReference": "Pallet B",
      "batchReference": "5566",
      "properties": [
        {
          "name": "MaterialId",
          "value": "8899"
        }
      ]
    }
  ]
}
                },
                "With Lower Boundary alert": {
                  "value": {
  "reference": "b2e3f49b-cfe7-4ad9-8bea-0b747c380f59",
  "description": "Shipment created from our ERP system",
  "contactTemplateReference": "Supportdesk-level1",
  "loggerTemplateReference": "airfreight-loggersettings",
  "alerts": [
    {
      "dataType": "Temperature",
      "lowerBoundary": 100,
      "accumulativeTimeLimit": 600,
      "severity": "Level1"
    }
  ],
  "originReference": "dubai-warehouse-A1-eastside",
  "destinationReference": "kork-siteB-loadingdock",
  "createOptions": {
    "draftMode": "Regular",
    "shipmentType": "Regular"
  },
  "loggers": [
    {
      "loggerId": "10004857",
      "palletReference": "Pallet A",
      "placementReference": "Top"
    },
    {
      "loggerId": "10004858",
      "palletReference": "Pallet B",
      "placementReference": "Top"
    },
    {
      "loggerId": "10004859",
      "palletReference": "Pallet C",
      "placementReference": "Bottom"
    },
    {
      "loggerId": "10004850",
      "palletReference": "Pallet C",
      "placementReference": "Middle"
    }
  ],
  "properties": [
    {
      "name": "ERPShipmentRef",
      "value": "TDL64-648DDRRR"
    },
    {
      "name": "TrackingId",
      "value": "ITTT654654687987GB"
    }
  ],
  "products": [
    {
      "productReference": "maxdevin-400mg",
      "palletReference": "Pallet C",
      "batchReference": "12345",
      "properties": [
        {
          "name": "MaterialId",
          "value": "6655"
        }
      ]
    },
    {
      "productReference": "maxdevin-400mg",
      "palletReference": "Pallet A",
      "batchReference": "5566",
      "properties": [
        {
          "name": "MaterialId",
          "value": "8899"
        }
      ]
    },
    {
      "productReference": "maxdevin-400mg",
      "palletReference": "Pallet B",
      "batchReference": "5566",
      "properties": [
        {
          "name": "MaterialId",
          "value": "8899"
        }
      ]
    }
  ]
}
                },
                "With Upper Boundary alert": {
                  "value": {
  "reference": "367e93ba-dc1a-463e-88ff-f1ccab44a483",
  "description": "Shipment created from our ERP system",
  "contactTemplateReference": "Supportdesk-level1",
  "loggerTemplateReference": "airfreight-loggersettings",
  "alerts": [
    {
      "dataType": "Temperature",
      "upperBoundary": 500,
      "accumulativeTimeLimit": 600,
      "severity": "Level1"
    }
  ],
  "originReference": "dubai-warehouse-A1-eastside",
  "destinationReference": "kork-siteB-loadingdock",
  "createOptions": {
    "draftMode": "Regular",
    "shipmentType": "Regular"
  },
  "loggers": [
    {
      "loggerId": "10004857",
      "palletReference": "Pallet A",
      "placementReference": "Top"
    },
    {
      "loggerId": "10004858",
      "palletReference": "Pallet B",
      "placementReference": "Top"
    },
    {
      "loggerId": "10004859",
      "palletReference": "Pallet C",
      "placementReference": "Bottom"
    },
    {
      "loggerId": "10004850",
      "palletReference": "Pallet C",
      "placementReference": "Middle"
    }
  ],
  "properties": [
    {
      "name": "ERPShipmentRef",
      "value": "TDL64-648DDRRR"
    },
    {
      "name": "TrackingId",
      "value": "ITTT654654687987GB"
    }
  ],
  "products": [
    {
      "productReference": "maxdevin-400mg",
      "palletReference": "Pallet C",
      "batchReference": "12345",
      "properties": [
        {
          "name": "MaterialId",
          "value": "6655"
        }
      ]
    },
    {
      "productReference": "maxdevin-400mg",
      "palletReference": "Pallet A",
      "batchReference": "5566",
      "properties": [
        {
          "name": "MaterialId",
          "value": "8899"
        }
      ]
    },
    {
      "productReference": "maxdevin-400mg",
      "palletReference": "Pallet B",
      "batchReference": "5566",
      "properties": [
        {
          "name": "MaterialId",
          "value": "8899"
        }
      ]
    }
  ]
}
                },
                "With Dual Boundaries alert": {
                  "value": {
  "reference": "c3f52096-140e-41fd-b769-4b2d8c66b812",
  "description": "Shipment created from our ERP system",
  "contactTemplateReference": "Supportdesk-level1",
  "loggerTemplateReference": "airfreight-loggersettings",
  "alerts": [
    {
      "dataType": "Temperature",
      "lowerBoundary": 100,
      "upperBoundary": 500,
      "accumulativeTimeLimit": 600,
      "severity": "Level1"
    }
  ],
  "originReference": "dubai-warehouse-A1-eastside",
  "destinationReference": "kork-siteB-loadingdock",
  "createOptions": {
    "draftMode": "Regular",
    "shipmentType": "Regular"
  },
  "loggers": [
    {
      "loggerId": "10004857",
      "palletReference": "Pallet A",
      "placementReference": "Top"
    },
    {
      "loggerId": "10004858",
      "palletReference": "Pallet B",
      "placementReference": "Top"
    },
    {
      "loggerId": "10004859",
      "palletReference": "Pallet C",
      "placementReference": "Bottom"
    },
    {
      "loggerId": "10004850",
      "palletReference": "Pallet C",
      "placementReference": "Middle"
    }
  ],
  "properties": [
    {
      "name": "ERPShipmentRef",
      "value": "TDL64-648DDRRR"
    },
    {
      "name": "TrackingId",
      "value": "ITTT654654687987GB"
    }
  ],
  "products": [
    {
      "productReference": "maxdevin-400mg",
      "palletReference": "Pallet C",
      "batchReference": "12345",
      "properties": [
        {
          "name": "MaterialId",
          "value": "6655"
        }
      ]
    },
    {
      "productReference": "maxdevin-400mg",
      "palletReference": "Pallet A",
      "batchReference": "5566",
      "properties": [
        {
          "name": "MaterialId",
          "value": "8899"
        }
      ]
    },
    {
      "productReference": "maxdevin-400mg",
      "palletReference": "Pallet B",
      "batchReference": "5566",
      "properties": [
        {
          "name": "MaterialId",
          "value": "8899"
        }
      ]
    }
  ]
}
                },
                "Editable draft shipment": {
                  "value": {
  "reference": "f561d5cd-04d9-4adc-8e8e-aada442c562d",
  "description": "Shipment created from our ERP system",
  "contactTemplateReference": "Supportdesk-level1",
  "originReference": "dubai-warehouse-A1-eastside",
  "destinationReference": "kork-siteB-loadingdock",
  "createOptions": {
    "draftMode": "Editable",
    "shipmentType": "Regular"
  }
}
                }
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "OK",
            "headers": {
              "x-correlation-id": {
                "description": "The unique id identifying the original requests path through the Controlant systems. Callers should log this value to facilitate easier troubleshooting and incident resolution.",
                "schema": {
                  "type": "string"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ShipmentUpdateResponse"
                },
                "example": {
  "shipmentReference": "Oslo-to-Copenhagen-Jan2020",
  "success": true,
  "responseTime": 0
}
              }
            }
          },
          "400": {
            "description": "Bad Request",
            "headers": {
              "x-correlation-id": {
                "description": "The unique id identifying the original requests path through the Controlant systems. Callers should log this value to facilitate easier troubleshooting and incident resolution.",
                "schema": {
                  "type": "string"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/GenericInputValidationErrorResponse"
                },
                "example": {
  "errorMessage": "One or more validation errors occurred.",
  "status": 400,
  "errors": {
    "Reference": "'Reference' must not be empty.",
    "OriginReference": "'OriginReference' must not be empty.",
    "DestinationReference": "'DestinationReference' must not be empty."
  },
  "success": false,
  "responseTime": 0
}
              }
            }
          },
          "500": {
            "description": "Internal Server Error",
            "headers": {
              "x-correlation-id": {
                "description": "The unique id identifying the original requests path through the Controlant systems. Callers should log this value to facilitate easier troubleshooting and incident resolution.",
                "schema": {
                  "type": "string"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                },
                "example": {
  "errorMessage": "Unexpected error while processing request",
  "status": 500,
  "success": false,
  "responseTime": 150,
  "message": "Internal Error"
}
              }
            }
          }
        }
      }
    },
    "/api/scm/shipments/properties/update": {
      "post": {
        "tags": [
          "Shipments"
        ],
        "summary": "Update Shipment Properties",
        "description": "Updates shipment custom properties based on the supplied <code>ShipmentReference</code>.\r\nCustom properties can be updated for shipments that are currently in a <code>Ready</code>, <code>Shipping</code> or <code>Delivered</code> state.",
        "requestBody": {
          "description": "A Shipment Properties update request",
          "content": {
            "application/json": {
              "schema": {
                "allOf": [
                  {
                    "$ref": "#/components/schemas/ShipmentPropertiesUpdateRequest"
                  }
                ],
                "description": "Defines a Shipment Properties Update"
              },
              "example": {
  "shipmentReference": "f64ab6a9-a765-405f-865e-7172b64046f0",
  "updateMode": "Add",
  "properties": [
    {
      "name": "ERPShipmentRef",
      "value": "TDL64-648DDRRR"
    },
    {
      "name": "TrackingId",
      "value": "ITTT654654687987GB"
    }
  ]
}
            }
          }
        },
        "responses": {
          "200": {
            "description": "OK",
            "headers": {
              "x-correlation-id": {
                "description": "The unique id identifying the original requests path through the Controlant systems. Callers should log this value to facilitate easier troubleshooting and incident resolution.",
                "schema": {
                  "type": "string"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ShipmentUpdateResponse"
                },
                "example": {
  "shipmentReference": "Oslo-to-Copenhagen-Jan2020",
  "success": true,
  "responseTime": 0
}
              }
            }
          },
          "400": {
            "description": "Bad Request",
            "headers": {
              "x-correlation-id": {
                "description": "The unique id identifying the original requests path through the Controlant systems. Callers should log this value to facilitate easier troubleshooting and incident resolution.",
                "schema": {
                  "type": "string"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/GenericInputValidationErrorResponse"
                },
                "example": {
  "errorMessage": "One or more validation errors occurred.",
  "status": 400,
  "errors": {
    "Reference": "'Reference' must not be empty.",
    "OriginReference": "'OriginReference' must not be empty.",
    "DestinationReference": "'DestinationReference' must not be empty."
  },
  "success": false,
  "responseTime": 0
}
              }
            }
          },
          "500": {
            "description": "Internal Server Error",
            "headers": {
              "x-correlation-id": {
                "description": "The unique id identifying the original requests path through the Controlant systems. Callers should log this value to facilitate easier troubleshooting and incident resolution.",
                "schema": {
                  "type": "string"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                },
                "example": {
  "errorMessage": "Unexpected error while processing request",
  "status": 500,
  "success": false,
  "responseTime": 150,
  "message": "Internal Error"
}
              }
            }
          }
        }
      }
    },
    "/api/scm/shipments/products/update": {
      "post": {
        "tags": [
          "Shipments"
        ],
        "summary": "Update Shipment Products",
        "description": "<span class=\"addon-feature\">This is an optional added value feature, please contact your Controlant account manager for further details.</span>Updates shipment products list based on the supplied <code>ShipmentReference</code>.\r\nProduct lists for shipments can be updated for shipments that are currently in a <code>Ready</code> or <code>Shipping</code> state.\r\n<info>This message must contain values for one or both of the <code>Products</code> or <code>PartialProducts</code> properties.</info>",
        "requestBody": {
          "description": "A Shipment Products update request",
          "content": {
            "application/json": {
              "schema": {
                "allOf": [
                  {
                    "$ref": "#/components/schemas/ShipmentProductsUpdateRequest"
                  }
                ],
                "description": "Defines a Shipment Products Update"
              },
              "example": {
  "shipmentReference": "Oslo-to-Copenhagen-Jan2020",
  "products": [
    {
      "productReference": "maxdevin-400mg",
      "palletReference": "Pallet C",
      "batchReference": "12345",
      "properties": [
        {
          "name": "MaterialId",
          "value": "6655"
        }
      ]
    },
    {
      "productReference": "maxdevin-100mg",
      "palletReference": "Pallet A",
      "batchReference": "5566",
      "properties": [
        {
          "name": "MaterialId",
          "value": "8899"
        }
      ]
    },
    {
      "productReference": "maxdevin-200mg",
      "palletReference": "Pallet B",
      "batchReference": "5566",
      "properties": [
        {
          "name": "MaterialId",
          "value": "8899"
        }
      ]
    }
  ]
}
            }
          }
        },
        "responses": {
          "200": {
            "description": "OK",
            "headers": {
              "x-correlation-id": {
                "description": "The unique id identifying the original requests path through the Controlant systems. Callers should log this value to facilitate easier troubleshooting and incident resolution.",
                "schema": {
                  "type": "string"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ShipmentUpdateResponse"
                },
                "example": {
  "shipmentReference": "Oslo-to-Copenhagen-Jan2020",
  "success": true,
  "responseTime": 0
}
              }
            }
          },
          "400": {
            "description": "Bad Request",
            "headers": {
              "x-correlation-id": {
                "description": "The unique id identifying the original requests path through the Controlant systems. Callers should log this value to facilitate easier troubleshooting and incident resolution.",
                "schema": {
                  "type": "string"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/GenericInputValidationErrorResponse"
                },
                "example": {
  "errorMessage": "One or more validation errors occurred.",
  "status": 400,
  "errors": {
    "Reference": "'Reference' must not be empty.",
    "OriginReference": "'OriginReference' must not be empty.",
    "DestinationReference": "'DestinationReference' must not be empty."
  },
  "success": false,
  "responseTime": 0
}
              }
            }
          },
          "500": {
            "description": "Internal Server Error",
            "headers": {
              "x-correlation-id": {
                "description": "The unique id identifying the original requests path through the Controlant systems. Callers should log this value to facilitate easier troubleshooting and incident resolution.",
                "schema": {
                  "type": "string"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                },
                "example": {
  "errorMessage": "Unexpected error while processing request",
  "status": 500,
  "success": false,
  "responseTime": 150,
  "message": "Internal Error"
}
              }
            }
          }
        }
      }
    },
    "/api/scm/shipments/delete": {
      "post": {
        "tags": [
          "Shipments"
        ],
        "summary": "Delete Shipment",
        "description": "Deletes a previously created shipment from the system.\r\n<info>If the shipment is in <code>Draft</code> state when deleted, then the delete operation is irrevocable.</info>",
        "requestBody": {
          "description": "A Shipment delete request",
          "content": {
            "application/json": {
              "schema": {
                "allOf": [
                  {
                    "$ref": "#/components/schemas/ShipmentDeleteRequest"
                  }
                ],
                "description": "Defines a Shipment Delete"
              },
              "example": {
  "shipmentReference": "d3128d56-ad1c-4185-9e96-0e5406501217"
}
            }
          }
        },
        "responses": {
          "200": {
            "description": "OK",
            "headers": {
              "x-correlation-id": {
                "description": "The unique id identifying the original requests path through the Controlant systems. Callers should log this value to facilitate easier troubleshooting and incident resolution.",
                "schema": {
                  "type": "string"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ShipmentUpdateResponse"
                },
                "example": {
  "shipmentReference": "Oslo-to-Copenhagen-Jan2020",
  "success": true,
  "responseTime": 0
}
              }
            }
          },
          "400": {
            "description": "Bad Request",
            "headers": {
              "x-correlation-id": {
                "description": "The unique id identifying the original requests path through the Controlant systems. Callers should log this value to facilitate easier troubleshooting and incident resolution.",
                "schema": {
                  "type": "string"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/GenericInputValidationErrorResponse"
                },
                "example": {
  "errorMessage": "One or more validation errors occurred.",
  "status": 400,
  "errors": {
    "Reference": "'Reference' must not be empty.",
    "OriginReference": "'OriginReference' must not be empty.",
    "DestinationReference": "'DestinationReference' must not be empty."
  },
  "success": false,
  "responseTime": 0
}
              }
            }
          },
          "500": {
            "description": "Internal Server Error",
            "headers": {
              "x-correlation-id": {
                "description": "The unique id identifying the original requests path through the Controlant systems. Callers should log this value to facilitate easier troubleshooting and incident resolution.",
                "schema": {
                  "type": "string"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                },
                "example": {
  "errorMessage": "Unexpected error while processing request",
  "status": 500,
  "success": false,
  "responseTime": 150,
  "message": "Internal Error"
}
              }
            }
          }
        }
      }
    },
    "/api/scm/shipments/links": {
      "post": {
        "tags": [
          "Shipments"
        ],
        "summary": "Get Shipment Links",
        "description": "Gets one or more shipment links for the specified shipment reference.\r\n<info>No links are returned for <code>Cancelled</code> or <code>Deleted</code> shipments.</info><info>If you have subscribed to the added-value Controlant Share Shipment feature, you can request ```Custom``` links which will return \r\nControlant Share Shipment links, which do not require logging in to SCM, and can be configured to contain more detail.</info>",
        "requestBody": {
          "description": "A Shipment Links request",
          "content": {
            "application/json": {
              "schema": {
                "allOf": [
                  {
                    "$ref": "#/components/schemas/ShipmentLinksRequest"
                  }
                ],
                "description": "Defines a Shipment Links Request"
              },
              "example": {
  "linkType": "Private",
  "shipmentReference": "BostonToMiami-ShipmentT0001"
}
            }
          }
        },
        "responses": {
          "200": {
            "description": "OK",
            "headers": {
              "x-correlation-id": {
                "description": "The unique id identifying the original requests path through the Controlant systems. Callers should log this value to facilitate easier troubleshooting and incident resolution.",
                "schema": {
                  "type": "string"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ShipmentLinksResponse"
                },
                "examples": {
                  "Default": {
                    "value": {
  "shipmentReference": "MyShipmentReference",
  "shipmentLinks": [
    {
      "shipmentNumber": 1,
      "url": "https://scm.controlant.com/global/shipments/active/998/info"
    },
    {
      "shipmentNumber": 2,
      "url": "https://scm.controlant.com/global/shipments/active/999/info"
    }
  ],
  "shipmentLinksCount": 2,
  "linkType": "Private",
  "success": true,
  "responseTime": 0
}
                  },
                  "Private link": {
                    "value": {
  "shipmentReference": "MyShipmentReference",
  "shipmentLinks": [
    {
      "shipmentNumber": 1,
      "url": "https://scm.controlant.com/global/shipments/active/1000/info"
    }
  ],
  "shipmentLinksCount": 1,
  "linkType": "Private",
  "success": true,
  "responseTime": 0
}
                  },
                  "Public link": {
                    "value": {
  "shipmentReference": "MyShipmentReference",
  "shipmentLinks": [
    {
      "shipmentNumber": 1,
      "url": "https://scm.controlant.com/shared/shipments/1000/info?sharingToken=[YOUR_TOKEN]"
    }
  ],
  "shipmentLinksCount": 1,
  "linkType": "Public",
  "success": true,
  "responseTime": 0
}
                  },
                  "Custom links": {
                    "value": {
  "shipmentReference": "MyShipmentReference",
  "shipmentLinks": [
    {
      "shipmentNumber": 1,
      "url": "https://scm.controlant.com/shared/shipments/1000/info?sharingToken=[YOUR_TOKEN]",
      "linkReference": "with-temperatures-and-geo-tracking"
    },
    {
      "shipmentNumber": 1,
      "url": "https://scm.controlant.com/shared/shipments/1000/info?sharingToken=[YOUR_TOKEN2]",
      "linkReference": "with-geo-tracking"
    }
  ],
  "shipmentLinksCount": 2,
  "linkType": "Custom",
  "success": true,
  "responseTime": 0
}
                  }
                }
              }
            }
          },
          "400": {
            "description": "Bad Request",
            "headers": {
              "x-correlation-id": {
                "description": "The unique id identifying the original requests path through the Controlant systems. Callers should log this value to facilitate easier troubleshooting and incident resolution.",
                "schema": {
                  "type": "string"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/GenericInputValidationErrorResponse"
                },
                "example": {
  "errorMessage": "One or more validation errors occurred.",
  "status": 400,
  "errors": {
    "Reference": "'Reference' must not be empty.",
    "OriginReference": "'OriginReference' must not be empty.",
    "DestinationReference": "'DestinationReference' must not be empty."
  },
  "success": false,
  "responseTime": 0
}
              }
            }
          },
          "500": {
            "description": "Internal Server Error",
            "headers": {
              "x-correlation-id": {
                "description": "The unique id identifying the original requests path through the Controlant systems. Callers should log this value to facilitate easier troubleshooting and incident resolution.",
                "schema": {
                  "type": "string"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                },
                "example": {
  "errorMessage": "Unexpected error while processing request",
  "status": 500,
  "success": false,
  "responseTime": 150,
  "message": "Internal Error"
}
              }
            }
          }
        }
      }
    },
    "/api/scm/shipments/tracking/update": {
      "post": {
        "tags": [
          "Shipments"
        ],
        "summary": "Update Shipment Tracking",
        "description": "Updates shipment tracking information for the supplied <code>ShipmentReference</code>.\r\n<info>Note that this method returns ```202 (Accepted)``` and not ```200 (Ok)``` on success. The reason is that the process of accepting tracking information is an asynchronous operation. \r\nIn the near future Controlant will add events that customers can subscribe to in order to validate the outcome of the tracking request.</info>",
        "requestBody": {
          "description": "A Shipment Tracking Update request",
          "content": {
            "application/json": {
              "schema": {
                "allOf": [
                  {
                    "$ref": "#/components/schemas/ShipmentTrackingUpdateRequest"
                  }
                ],
                "description": "Defines a Shipment Tracking Update Request"
              },
              "example": {
  "shipmentReference": "BostonToMiami-ShipmentT0001",
  "trackingInformation": [
    {
      "value": "LP-12345-628-110",
      "type": "TrackingNumber"
    }
  ]
}
            }
          }
        },
        "responses": {
          "202": {
            "description": "Accepted",
            "headers": {
              "x-correlation-id": {
                "description": "The unique id identifying the original requests path through the Controlant systems. Callers should log this value to facilitate easier troubleshooting and incident resolution.",
                "schema": {
                  "type": "string"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ShipmentUpdateResponse"
                },
                "example": {
  "shipmentReference": "Oslo-to-Copenhagen-Jan2020",
  "success": true,
  "responseTime": 0
}
              }
            }
          },
          "400": {
            "description": "Bad Request",
            "headers": {
              "x-correlation-id": {
                "description": "The unique id identifying the original requests path through the Controlant systems. Callers should log this value to facilitate easier troubleshooting and incident resolution.",
                "schema": {
                  "type": "string"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/GenericInputValidationErrorResponse"
                },
                "example": {
  "errorMessage": "One or more validation errors occurred.",
  "status": 400,
  "errors": {
    "Reference": "'Reference' must not be empty.",
    "OriginReference": "'OriginReference' must not be empty.",
    "DestinationReference": "'DestinationReference' must not be empty."
  },
  "success": false,
  "responseTime": 0
}
              }
            }
          },
          "500": {
            "description": "Internal Server Error",
            "headers": {
              "x-correlation-id": {
                "description": "The unique id identifying the original requests path through the Controlant systems. Callers should log this value to facilitate easier troubleshooting and incident resolution.",
                "schema": {
                  "type": "string"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                },
                "example": {
  "errorMessage": "Unexpected error while processing request",
  "status": 500,
  "success": false,
  "responseTime": 150,
  "message": "Internal Error"
}
              }
            }
          }
        }
      }
    },
    "/api/scm/shipments/reports/delivery/{shipmentReference}/{reportNumber}/{languageCode}": {
      "post": {
        "tags": [
          "Shipments » Reports"
        ],
        "summary": "Delivery Report",
        "description": "Get a shipment delivery report for a particular shipment.",
        "parameters": [
          {
            "name": "shipmentReference",
            "in": "path",
            "description": "Customer supplied unique reference value that identifies the shipment. If multiple shipments are behind a single reference, then the report number should be used to get a report.",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "reportNumber",
            "in": "path",
            "description": "Number of the specific shipment to get report for in a split shipments. If shipment reference does not contain split shipments, then ```reportNumber``` must be set to 1.",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "languageCode",
            "in": "path",
            "description": "An optional language code for the report. The language is specified as a two letter value as defined in the <a href=\"https://en.wikipedia.org/wiki/List_of_ISO_639-1_codes\" target=\"_blank\">ISO 639-1 standard</a> for language codes.",
            "required": true,
            "schema": {
              "type": "string",
              "default": "en"
            }
          },
          {
            "name": "Content-Type",
            "in": "header",
            "description": "Content-Type must have the value <code>application/octet-stream</code>",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "404": {
            "description": "Requested report not found",
            "headers": {
              "x-correlation-id": {
                "description": "The unique id identifying the original requests path through the Controlant systems. Callers should log this value to facilitate easier troubleshooting and incident resolution.",
                "schema": {
                  "type": "string"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/NotFoundErrorResponse"
                },
                "example": {
  "errorMessage": "Item requested not found.",
  "status": 404,
  "success": false,
  "responseTime": 0
}
              }
            }
          },
          "400": {
            "description": "Bad Request",
            "headers": {
              "x-correlation-id": {
                "description": "The unique id identifying the original requests path through the Controlant systems. Callers should log this value to facilitate easier troubleshooting and incident resolution.",
                "schema": {
                  "type": "string"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/GenericInputValidationErrorResponse"
                },
                "example": {
  "errorMessage": "One or more validation errors occurred.",
  "status": 400,
  "errors": {
    "Reference": "'Reference' must not be empty.",
    "OriginReference": "'OriginReference' must not be empty.",
    "DestinationReference": "'DestinationReference' must not be empty."
  },
  "success": false,
  "responseTime": 0
}
              }
            }
          },
          "500": {
            "description": "Internal Server Error",
            "headers": {
              "x-correlation-id": {
                "description": "The unique id identifying the original requests path through the Controlant systems. Callers should log this value to facilitate easier troubleshooting and incident resolution.",
                "schema": {
                  "type": "string"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                },
                "example": {
  "errorMessage": "Unexpected error while processing request",
  "status": 500,
  "success": false,
  "responseTime": 150,
  "message": "Internal Error"
}
              }
            }
          },
          "200": {
            "description": "Shipment delivery report PDF",
            "headers": {
              "Content-Disposition": {
                "description": "Contains file name for the shipment delivery report pdf file",
                "schema": {
                  "type": "string",
                  "description": "Contains file name for the shipment delivery report pdf file",
                  "format": ""
                }
              },
              "x-correlation-id": {
                "description": "The unique id identifying the original requests path through the Controlant systems. Callers should log this value to facilitate easier troubleshooting and incident resolution.",
                "schema": {
                  "type": "string"
                }
              }
            },
            "content": {
              "application/pdf": {
                "schema": {
                  "type": "string"
                }
              }
            }
          }
        }
      }
    },
    "/api/scm/shipments/state/info": {
      "post": {
        "tags": [
          "Shipments » State"
        ],
        "summary": "Get Shipment Info",
        "description": "<span />            Retrieves the base state of a given shipment in the system along with all loggers assigned etc.\r\n            This function will work for shipments that are currently in a ```Draft```, ```Ready```, ```Shipping```, ```Delivered``` or ```Closed``` state.\r\n            <info>\r\n\t\t\tThis endpoint will only work for shipments that are either undelivered or were delivered less than 30 days ago (configurable per customer, please contact your Controlant account manager for further details).\r\n\t\t</info>",
        "requestBody": {
          "description": "A Shipment State request",
          "content": {
            "application/json": {
              "schema": {
                "allOf": [
                  {
                    "$ref": "#/components/schemas/ShipmentStateRequest"
                  }
                ],
                "description": "Defines a Shipment State Request"
              },
              "example": {
  "shipmentReference": "Oslo-to-Copenhagen-Jan2020"
}
            }
          }
        },
        "responses": {
          "200": {
            "description": "OK",
            "headers": {
              "x-correlation-id": {
                "description": "The unique id identifying the original requests path through the Controlant systems. Callers should log this value to facilitate easier troubleshooting and incident resolution.",
                "schema": {
                  "type": "string"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ShipmentStateInfoResponse"
                },
                "examples": {
                  "Default": {
                    "value": {
  "description": "Our important shipment",
  "originLocation": {
    "reference": "controlant-boston-us",
    "name": "Where Everybody Knows Your Name",
    "description": "Cheers!",
    "phone": "555-4568",
    "addressLine1": "84 Beacon Street",
    "city": "Boston",
    "region": "MA",
    "postCode": "66678",
    "country": "US"
  },
  "destinationLocation": {
    "reference": "The-Salamander-VA",
    "name": "The Salamander Resort & Spa",
    "addressLine1": "500 N Pendleton St",
    "city": "Middleburg",
    "region": "VA",
    "postCode": "20117",
    "country": "US"
  },
  "status": "Delivered",
  "excursionSeverity": "Level2",
  "timeStampCreated": "2026-03-01T06:17:04Z",
  "timeStampReady": "2026-03-02T06:17:04Z",
  "timeStampShipped": "2026-03-09T06:17:04Z",
  "timeStampDelivered": "2026-03-11T06:07:04Z",
  "timeStampClosed": "2026-03-11T06:16:04Z",
  "properties": [
    {
      "name": "ERPShipmentRef",
      "value": "TDL64-648DDRRR"
    },
    {
      "name": "TrackingId",
      "value": "ITTT654654687987GB"
    }
  ],
  "propertiesCount": 2,
  "inspection": {
    "inspectionStatus": "NotInspected",
    "inspectionQuality": "Released"
  },
  "deliveryState": "Automatic",
  "shippedState": "Manual",
  "processingInfo": {
    "processingStatus": "Processed"
  },
  "loggerTemplate": {
    "reference": "1234567890AB",
    "shippingMethod": "Button",
    "deliveryMethod": "GeoFenceAndButton",
    "warningsIgnorePeriodAtStart": 0,
    "warningsIgnorePeriodAtEnd": 0,
    "excursionSeverityThreshold": "Level3",
    "preferredWakeUpInterval": "Default"
  },
  "loggerStates": [
    {
      "loggerId": "30001001",
      "palletReference": "HU-1342",
      "placementReference": "Top of Pallet",
      "timeStampLastSync": "2026-03-11T06:16:04Z",
      "timeStampDeparted": "2026-03-09T08:41:04Z",
      "timeStampArrived": "2026-03-11T05:57:04Z",
      "timeStampShipped": "2026-03-09T06:17:04Z",
      "timeStampDelivered": "2026-03-11T06:07:04Z",
      "sensorConfigurations": [
        {
          "channel": 0,
          "type": "Temperature",
          "alerts": [
            {
              "dataType": "Temperature",
              "bounds": "UpperBounds",
              "thresholdValue": 30,
              "accumulativeTimeLimit": 600,
              "severity": "Level3"
            },
            {
              "dataType": "Temperature",
              "bounds": "LowerBounds",
              "thresholdValue": -1,
              "accumulativeTimeLimit": 600,
              "severity": "Level3"
            },
            {
              "dataType": "Temperature",
              "bounds": "UpperBounds",
              "thresholdValue": 15,
              "accumulativeTimeLimit": 600,
              "severity": "Level2"
            },
            {
              "dataType": "Temperature",
              "bounds": "LowerBounds",
              "thresholdValue": 5,
              "accumulativeTimeLimit": 600,
              "severity": "Level2"
            },
            {
              "dataType": "Temperature",
              "bounds": "DualBounds",
              "thresholdValues": {
                "upperThreshold": 15,
                "lowerThreshold": -5
              },
              "accumulativeTimeLimit": 600,
              "severity": "Level1"
            }
          ]
        }
      ],
      "preferredWakeUpInterval": "TwoHours",
      "status": "Delivered",
      "loggerType": "Saga"
    }
  ],
  "loggerStatesCount": 1,
  "shipmentReference": "MyShipmentReference",
  "shipmentType": "Regular",
  "success": true,
  "responseTime": 0
}
                  },
                  "Shipment Ready": {
                    "value": {
  "description": "Our important shipment",
  "originLocation": {
    "reference": "controlant-boston-us",
    "name": "Where Everybody Knows Your Name",
    "description": "Cheers!",
    "phone": "555-4568",
    "addressLine1": "84 Beacon Street",
    "city": "Boston",
    "region": "MA",
    "postCode": "66678",
    "country": "US"
  },
  "destinationLocation": {
    "reference": "The-Salamander-VA",
    "name": "The Salamander Resort & Spa",
    "addressLine1": "500 N Pendleton St",
    "city": "Middleburg",
    "region": "VA",
    "postCode": "20117",
    "country": "US"
  },
  "status": "Ready",
  "excursionSeverity": "NoExcursion",
  "timeStampCreated": "2026-03-01T06:17:04Z",
  "timeStampReady": "2026-03-02T06:17:04Z",
  "propertiesCount": 0,
  "inspection": {
    "inspectionStatus": "NotInspected",
    "inspectionQuality": "Undecided"
  },
  "deliveryState": "Automatic",
  "shippedState": "Manual",
  "processingInfo": {
    "processingStatus": "NotProcessed"
  },
  "loggerTemplate": {
    "reference": "1234567890AB",
    "shippingMethod": "Button",
    "deliveryMethod": "GeoFenceAndButton",
    "warningsIgnorePeriodAtStart": 0,
    "warningsIgnorePeriodAtEnd": 0,
    "excursionSeverityThreshold": "Level3",
    "preferredWakeUpInterval": "Default"
  },
  "loggerStates": [
    {
      "loggerId": "30011002",
      "sensorConfigurations": [
        {
          "channel": 0,
          "type": "Temperature",
          "alerts": [
            {
              "dataType": "Temperature",
              "bounds": "UpperBounds",
              "thresholdValue": 30,
              "accumulativeTimeLimit": 600,
              "severity": "Level3"
            }
          ]
        }
      ],
      "preferredWakeUpInterval": "TwoHours",
      "status": "Ready",
      "loggerType": "Saga"
    }
  ],
  "loggerStatesCount": 1,
  "shipmentReference": "MyShipmentReference",
  "shipmentType": "Regular",
  "success": true,
  "responseTime": 0
}
                  },
                  "Shipment Shipping": {
                    "value": {
  "description": "Our important shipment",
  "originLocation": {
    "reference": "controlant-boston-us",
    "name": "Where Everybody Knows Your Name",
    "description": "Cheers!",
    "phone": "555-4568",
    "addressLine1": "84 Beacon Street",
    "city": "Boston",
    "region": "MA",
    "postCode": "66678",
    "country": "US"
  },
  "destinationLocation": {
    "reference": "The-Salamander-VA",
    "name": "The Salamander Resort & Spa",
    "addressLine1": "500 N Pendleton St",
    "city": "Middleburg",
    "region": "VA",
    "postCode": "20117",
    "country": "US"
  },
  "status": "Shipping",
  "excursionSeverity": "NoExcursion",
  "timeStampCreated": "2026-03-01T06:17:04Z",
  "timeStampReady": "2026-03-02T06:17:04Z",
  "timeStampShipped": "2026-03-09T06:17:04Z",
  "propertiesCount": 0,
  "inspection": {
    "inspectionStatus": "NotInspected",
    "inspectionQuality": "Undecided"
  },
  "deliveryState": "Automatic",
  "shippedState": "Automatic",
  "processingInfo": {
    "processingStatus": "NotProcessed"
  },
  "loggerTemplate": {
    "reference": "1234567890AB",
    "shippingMethod": "Button",
    "deliveryMethod": "GeoFenceAndButton",
    "warningsIgnorePeriodAtStart": 0,
    "warningsIgnorePeriodAtEnd": 0,
    "excursionSeverityThreshold": "Level3",
    "preferredWakeUpInterval": "Default"
  },
  "loggerStates": [
    {
      "loggerId": "3000100F",
      "timeStampLastSync": "2026-03-11T06:16:04Z",
      "timeStampDeparted": "2026-03-09T08:41:04Z",
      "timeStampShipped": "2026-03-09T06:17:04Z",
      "sensorConfigurations": [
        {
          "channel": 0,
          "type": "Temperature",
          "alerts": [
            {
              "dataType": "Temperature",
              "bounds": "UpperBounds",
              "thresholdValue": 30,
              "accumulativeTimeLimit": 600,
              "severity": "Level3"
            }
          ]
        }
      ],
      "preferredWakeUpInterval": "TwoHours",
      "status": "Shipping",
      "loggerType": "Saga"
    }
  ],
  "loggerStatesCount": 1,
  "shipmentReference": "MyShipmentReference",
  "shipmentType": "Regular",
  "success": true,
  "responseTime": 0
}
                  },
                  "Shipment Delivered": {
                    "value": {
  "description": "Our important shipment",
  "originLocation": {
    "reference": "controlant-boston-us",
    "name": "Where Everybody Knows Your Name",
    "description": "Cheers!",
    "phone": "555-4568",
    "addressLine1": "84 Beacon Street",
    "city": "Boston",
    "region": "MA",
    "postCode": "66678",
    "country": "US"
  },
  "destinationLocation": {
    "reference": "The-Salamander-VA",
    "name": "The Salamander Resort & Spa",
    "addressLine1": "500 N Pendleton St",
    "city": "Middleburg",
    "region": "VA",
    "postCode": "20117",
    "country": "US"
  },
  "status": "Delivered",
  "excursionSeverity": "NoExcursion",
  "timeStampCreated": "2026-03-01T06:17:04Z",
  "timeStampReady": "2026-03-02T06:17:04Z",
  "timeStampShipped": "2026-03-09T06:17:04Z",
  "timeStampDelivered": "2026-03-11T04:17:04Z",
  "propertiesCount": 0,
  "inspection": {
    "inspectionStatus": "UnderInspection",
    "inspectionQuality": "Undecided"
  },
  "deliveryState": "Automatic",
  "shippedState": "Automatic",
  "processingInfo": {
    "processingStatus": "BeingProcessed"
  },
  "loggerTemplate": {
    "reference": "1234567890AB",
    "shippingMethod": "Button",
    "deliveryMethod": "GeoFenceAndButton",
    "warningsIgnorePeriodAtStart": 0,
    "warningsIgnorePeriodAtEnd": 0,
    "excursionSeverityThreshold": "Level3",
    "preferredWakeUpInterval": "Default"
  },
  "loggerStates": [
    {
      "loggerId": "3000100E",
      "timeStampLastSync": "2026-03-11T06:16:04Z",
      "timeStampDeparted": "2026-03-09T08:41:04Z",
      "timeStampArrived": "2026-03-11T03:47:04Z",
      "timeStampShipped": "2026-03-09T06:17:04Z",
      "timeStampDelivered": "2026-03-11T04:17:04Z",
      "sensorConfigurations": [
        {
          "channel": 0,
          "type": "Temperature",
          "alerts": [
            {
              "dataType": "Temperature",
              "bounds": "UpperBounds",
              "thresholdValue": 30,
              "accumulativeTimeLimit": 600,
              "severity": "Level3"
            }
          ]
        }
      ],
      "preferredWakeUpInterval": "TwoHours",
      "status": "Delivered",
      "loggerType": "Saga"
    }
  ],
  "loggerStatesCount": 1,
  "shipmentReference": "MyShipmentReference",
  "shipmentType": "Regular",
  "success": true,
  "responseTime": 0
}
                  },
                  "Shipment Closed": {
                    "value": {
  "description": "Our important shipment",
  "originLocation": {
    "reference": "controlant-boston-us",
    "name": "Where Everybody Knows Your Name",
    "description": "Cheers!",
    "phone": "555-4568",
    "addressLine1": "84 Beacon Street",
    "city": "Boston",
    "region": "MA",
    "postCode": "66678",
    "country": "US"
  },
  "destinationLocation": {
    "reference": "The-Salamander-VA",
    "name": "The Salamander Resort & Spa",
    "addressLine1": "500 N Pendleton St",
    "city": "Middleburg",
    "region": "VA",
    "postCode": "20117",
    "country": "US"
  },
  "status": "Closed",
  "excursionSeverity": "NoExcursion",
  "timeStampCreated": "2026-03-01T06:17:04Z",
  "timeStampReady": "2026-03-02T06:17:04Z",
  "timeStampShipped": "2026-03-09T06:17:04Z",
  "timeStampDelivered": "2026-03-11T04:17:04Z",
  "timeStampClosed": "2026-03-11T05:17:04Z",
  "propertiesCount": 0,
  "inspection": {
    "inspectionStatus": "Inspected",
    "inspectionQuality": "Released"
  },
  "deliveryState": "Automatic",
  "shippedState": "Automatic",
  "processingInfo": {
    "processingStatus": "Processed"
  },
  "loggerTemplate": {
    "reference": "1234567890AB",
    "shippingMethod": "Button",
    "deliveryMethod": "GeoFenceAndButton",
    "warningsIgnorePeriodAtStart": 0,
    "warningsIgnorePeriodAtEnd": 0,
    "excursionSeverityThreshold": "Level3",
    "preferredWakeUpInterval": "Default"
  },
  "loggerStates": [
    {
      "loggerId": "30011010",
      "timeStampLastSync": "2026-03-11T06:16:04Z",
      "timeStampDeparted": "2026-03-09T08:41:04Z",
      "timeStampArrived": "2026-03-11T03:47:04Z",
      "timeStampShipped": "2026-03-09T06:17:04Z",
      "timeStampDelivered": "2026-03-11T04:17:04Z",
      "sensorConfigurations": [
        {
          "channel": 0,
          "type": "Temperature",
          "alerts": [
            {
              "dataType": "Temperature",
              "bounds": "UpperBounds",
              "thresholdValue": 30,
              "accumulativeTimeLimit": 600,
              "severity": "Level3"
            }
          ]
        }
      ],
      "preferredWakeUpInterval": "TwoHours",
      "status": "Closed",
      "loggerType": "Saga"
    }
  ],
  "loggerStatesCount": 1,
  "shipmentReference": "MyShipmentReference",
  "shipmentType": "Regular",
  "success": true,
  "responseTime": 0
}
                  },
                  "Inspection Rejected": {
                    "value": {
  "description": "Our important shipment",
  "originLocation": {
    "reference": "controlant-boston-us",
    "name": "Where Everybody Knows Your Name",
    "description": "Cheers!",
    "phone": "555-4568",
    "addressLine1": "84 Beacon Street",
    "city": "Boston",
    "region": "MA",
    "postCode": "66678",
    "country": "US"
  },
  "destinationLocation": {
    "reference": "The-Salamander-VA",
    "name": "The Salamander Resort & Spa",
    "addressLine1": "500 N Pendleton St",
    "city": "Middleburg",
    "region": "VA",
    "postCode": "20117",
    "country": "US"
  },
  "status": "Delivered",
  "excursionSeverity": "NoExcursion",
  "timeStampCreated": "2026-03-01T06:17:04Z",
  "timeStampReady": "2026-03-02T06:17:04Z",
  "timeStampShipped": "2026-03-09T06:17:04Z",
  "timeStampDelivered": "2026-03-10T18:17:04Z",
  "propertiesCount": 0,
  "inspection": {
    "inspectionStatus": "Inspected",
    "inspectionQuality": "Rejected",
    "inspectionComment": "This example shipment has been rejected"
  },
  "deliveryState": "Automatic",
  "shippedState": "Automatic",
  "processingInfo": {
    "processingStatus": "MissingData"
  },
  "loggerTemplate": {
    "reference": "1234567890AB",
    "shippingMethod": "Button",
    "deliveryMethod": "GeoFenceAndButton",
    "warningsIgnorePeriodAtStart": 0,
    "warningsIgnorePeriodAtEnd": 0,
    "excursionSeverityThreshold": "Level3",
    "preferredWakeUpInterval": "Default"
  },
  "loggerStates": [
    {
      "loggerId": "30011011",
      "timeStampLastSync": "2026-03-11T06:16:04Z",
      "timeStampDeparted": "2026-03-09T08:41:04Z",
      "timeStampArrived": "2026-03-10T06:17:04Z",
      "timeStampShipped": "2026-03-09T06:17:04Z",
      "timeStampDelivered": "2026-03-10T06:17:04Z",
      "sensorConfigurations": [
        {
          "channel": 0,
          "type": "Temperature",
          "alerts": [
            {
              "dataType": "Temperature",
              "bounds": "UpperBounds",
              "thresholdValue": 30,
              "accumulativeTimeLimit": 600,
              "severity": "Level3"
            }
          ]
        }
      ],
      "preferredWakeUpInterval": "TwoHours",
      "status": "Delivered",
      "loggerType": "Saga"
    }
  ],
  "loggerStatesCount": 1,
  "shipmentReference": "MyShipmentReference",
  "shipmentType": "Regular",
  "success": true,
  "responseTime": 0
}
                  },
                  "Different logger states": {
                    "value": {
  "description": "Our important shipment",
  "originLocation": {
    "reference": "controlant-boston-us",
    "name": "Where Everybody Knows Your Name",
    "description": "Cheers!",
    "phone": "555-4568",
    "addressLine1": "84 Beacon Street",
    "city": "Boston",
    "region": "MA",
    "postCode": "66678",
    "country": "US"
  },
  "destinationLocation": {
    "reference": "The-Salamander-VA",
    "name": "The Salamander Resort & Spa",
    "addressLine1": "500 N Pendleton St",
    "city": "Middleburg",
    "region": "VA",
    "postCode": "20117",
    "country": "US"
  },
  "status": "Shipping",
  "excursionSeverity": "NoExcursion",
  "timeStampCreated": "2026-03-01T06:17:04Z",
  "timeStampReady": "2026-03-02T06:17:04Z",
  "timeStampShipped": "2026-03-09T06:17:04Z",
  "timeStampDelivered": "2026-03-10T18:17:04Z",
  "propertiesCount": 0,
  "inspection": {
    "inspectionStatus": "NotInspected",
    "inspectionQuality": "Undecided"
  },
  "deliveryState": "Manual",
  "shippedState": "Manual",
  "processingInfo": {
    "processingStatus": "NotProcessed"
  },
  "loggerTemplate": {
    "reference": "1234567890AB",
    "shippingMethod": "Button",
    "deliveryMethod": "GeoFenceAndButton",
    "warningsIgnorePeriodAtStart": 0,
    "warningsIgnorePeriodAtEnd": 0,
    "excursionSeverityThreshold": "Level3",
    "preferredWakeUpInterval": "Default"
  },
  "loggerStates": [
    {
      "loggerId": "30001000",
      "timeStampLastSync": "2026-03-11T06:16:04Z",
      "sensorConfigurations": [
        {
          "channel": 0,
          "type": "Temperature",
          "alerts": [
            {
              "dataType": "Temperature",
              "bounds": "UpperBounds",
              "thresholdValue": 30,
              "accumulativeTimeLimit": 600,
              "severity": "Level3"
            }
          ]
        }
      ],
      "preferredWakeUpInterval": "TwoHours",
      "status": "Ready",
      "loggerType": "Saga"
    },
    {
      "loggerId": "30001001",
      "timeStampLastSync": "2026-03-11T06:16:04Z",
      "timeStampDeparted": "2026-03-09T08:41:04Z",
      "timeStampShipped": "2026-03-09T06:17:04Z",
      "sensorConfigurations": [
        {
          "channel": 0,
          "type": "Temperature",
          "alerts": [
            {
              "dataType": "Temperature",
              "bounds": "UpperBounds",
              "thresholdValue": 30,
              "accumulativeTimeLimit": 600,
              "severity": "Level3"
            }
          ]
        }
      ],
      "preferredWakeUpInterval": "TwoHours",
      "status": "Shipping",
      "loggerType": "Saga"
    },
    {
      "loggerId": "30001200",
      "timeStampLastSync": "2026-03-11T06:16:04Z",
      "timeStampDeparted": "2026-03-09T08:41:04Z",
      "timeStampArrived": "2026-03-10T06:17:04Z",
      "timeStampShipped": "2026-03-09T06:17:04Z",
      "timeStampDelivered": "2026-03-10T06:17:04Z",
      "sensorConfigurations": [
        {
          "channel": 0,
          "type": "Temperature",
          "alerts": [
            {
              "dataType": "Temperature",
              "bounds": "UpperBounds",
              "thresholdValue": 30,
              "accumulativeTimeLimit": 600,
              "severity": "Level3"
            }
          ]
        }
      ],
      "preferredWakeUpInterval": "TwoHours",
      "status": "Delivered",
      "loggerType": "Saga"
    },
    {
      "loggerId": "30001000",
      "timeStampLastSync": "2026-03-11T06:16:04Z",
      "timeStampDeparted": "2026-03-09T08:41:04Z",
      "timeStampArrived": "2026-03-10T06:17:04Z",
      "timeStampShipped": "2026-03-09T06:17:04Z",
      "timeStampDelivered": "2026-03-10T06:17:04Z",
      "sensorConfigurations": [
        {
          "channel": 0,
          "type": "Temperature",
          "alerts": [
            {
              "dataType": "Temperature",
              "bounds": "UpperBounds",
              "thresholdValue": 30,
              "accumulativeTimeLimit": 600,
              "severity": "Level3"
            }
          ]
        }
      ],
      "preferredWakeUpInterval": "TwoHours",
      "status": "Closed",
      "loggerType": "Saga"
    }
  ],
  "loggerStatesCount": 1,
  "shipmentReference": "MyShipmentReference",
  "shipmentType": "Regular",
  "success": true,
  "responseTime": 0
}
                  }
                }
              }
            }
          },
          "400": {
            "description": "Bad Request",
            "headers": {
              "x-correlation-id": {
                "description": "The unique id identifying the original requests path through the Controlant systems. Callers should log this value to facilitate easier troubleshooting and incident resolution.",
                "schema": {
                  "type": "string"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/GenericInputValidationErrorResponse"
                },
                "example": {
  "errorMessage": "One or more validation errors occurred.",
  "status": 400,
  "errors": {
    "Reference": "'Reference' must not be empty.",
    "OriginReference": "'OriginReference' must not be empty.",
    "DestinationReference": "'DestinationReference' must not be empty."
  },
  "success": false,
  "responseTime": 0
}
              }
            }
          },
          "500": {
            "description": "Internal Server Error",
            "headers": {
              "x-correlation-id": {
                "description": "The unique id identifying the original requests path through the Controlant systems. Callers should log this value to facilitate easier troubleshooting and incident resolution.",
                "schema": {
                  "type": "string"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                },
                "example": {
  "errorMessage": "Unexpected error while processing request",
  "status": 500,
  "success": false,
  "responseTime": 150,
  "message": "Internal Error"
}
              }
            }
          }
        }
      }
    },
    "/api/scm/shipments/state/geotraces": {
      "post": {
        "tags": [
          "Shipments » State"
        ],
        "summary": "Get Geo Traces",
        "description": "<span />            Retrieves the geo states for all loggers in the shipment in the system.\r\n            This function will only work for shipments that are currently in a ```Shipping```, ```Delivered``` or ```Closed``` state.\r\n            <info>\r\n\t\t\tThis endpoint will only work for shipments that are either undelivered or were delivered less than 30 days ago (configurable per customer, please contact your Controlant account manager for further details).\r\n\t\t</info>",
        "requestBody": {
          "description": "A Shipment State Geo Trace request",
          "content": {
            "application/json": {
              "schema": {
                "allOf": [
                  {
                    "$ref": "#/components/schemas/ShipmentStateGeoTraceRequest"
                  }
                ],
                "description": "Defines a Shipment State Geo Trace Request"
              },
              "examples": {
                "All geo-coordinates for the shipment": {
                  "value": {
  "shipmentReference": "Oslo-to-Copenhagen-Jan2020"
}
                },
                "Geo-coordinates within a server time range": {
                  "value": {
  "serverTimeFrom": "2026-03-11T06:02:04Z",
  "serverTimeTo": "2026-03-11T06:17:04Z",
  "shipmentReference": "Oslo-to-Copenhagen-Jan2020"
}
                }
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "OK",
            "headers": {
              "x-correlation-id": {
                "description": "The unique id identifying the original requests path through the Controlant systems. Callers should log this value to facilitate easier troubleshooting and incident resolution.",
                "schema": {
                  "type": "string"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ShipmentStateGeoTraceResponse"
                },
                "example": {
  "locationTraces": [
    {
      "loggerId": "1000205A",
      "traces": [
        {
          "timeStamp": "2026-03-11T04:17:04Z",
          "latitude": 45.882446,
          "longitude": -123.9653255,
          "type": "Approximate",
          "accuracyInMeters": 40
        },
        {
          "timeStamp": "2026-03-11T05:17:04Z",
          "latitude": 45.882446,
          "longitude": -123.9653255,
          "type": "Approximate",
          "accuracyInMeters": 40
        },
        {
          "timeStamp": "2026-03-11T06:17:04Z",
          "latitude": 45.882446,
          "longitude": -123.9653255,
          "type": "Approximate",
          "accuracyInMeters": 40
        }
      ],
      "tracesCount": 3
    }
  ],
  "loggersWithTracesCount": 3,
  "shipmentReference": "279e6e06-3d95-4e85-afff-53bf513d1dea",
  "shipmentType": "Regular",
  "success": true,
  "responseTime": 0
}
              }
            }
          },
          "400": {
            "description": "Bad Request",
            "headers": {
              "x-correlation-id": {
                "description": "The unique id identifying the original requests path through the Controlant systems. Callers should log this value to facilitate easier troubleshooting and incident resolution.",
                "schema": {
                  "type": "string"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/GenericInputValidationErrorResponse"
                },
                "example": {
  "errorMessage": "One or more validation errors occurred.",
  "status": 400,
  "errors": {
    "Reference": "'Reference' must not be empty.",
    "OriginReference": "'OriginReference' must not be empty.",
    "DestinationReference": "'DestinationReference' must not be empty."
  },
  "success": false,
  "responseTime": 0
}
              }
            }
          },
          "500": {
            "description": "Internal Server Error",
            "headers": {
              "x-correlation-id": {
                "description": "The unique id identifying the original requests path through the Controlant systems. Callers should log this value to facilitate easier troubleshooting and incident resolution.",
                "schema": {
                  "type": "string"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                },
                "example": {
  "errorMessage": "Unexpected error while processing request",
  "status": 500,
  "success": false,
  "responseTime": 150,
  "message": "Internal Error"
}
              }
            }
          }
        }
      }
    },
    "/api/scm/shipments/state/temperatures": {
      "post": {
        "tags": [
          "Shipments » State"
        ],
        "summary": "Get Temperatures",
        "description": "<span />            Retrieves full temperatures of all sensor measurements for a given shipment in the system.\r\n            This function will only work for shipments that are currently in a ```Shipping```, ```Delivered``` or ```Closed``` state.\r\n            <info>\r\n\t\t\tThis endpoint will only work for shipments that are either undelivered or were delivered less than 30 days ago (configurable per customer, please contact your Controlant account manager for further details).\r\n\t\t</info>",
        "requestBody": {
          "description": "A Shipment State Temperatures request",
          "content": {
            "application/json": {
              "schema": {
                "allOf": [
                  {
                    "$ref": "#/components/schemas/ShipmentStateTemperaturesRequest"
                  }
                ],
                "description": "Defines a Shipment State Temperatures Request"
              },
              "examples": {
                "All temperatures for the shipment": {
                  "value": {
  "shipmentReference": "Oslo-to-Copenhagen-Jan2020"
}
                },
                "Temperatures within a server time range": {
                  "value": {
  "serverTimeFrom": "2026-03-11T06:02:04Z",
  "serverTimeTo": "2026-03-11T06:17:04Z",
  "shipmentReference": "Oslo-to-Copenhagen-Jan2020"
}
                }
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "OK",
            "headers": {
              "x-correlation-id": {
                "description": "The unique id identifying the original requests path through the Controlant systems. Callers should log this value to facilitate easier troubleshooting and incident resolution.",
                "schema": {
                  "type": "string"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ShipmentStateTemperaturesResponse"
                },
                "example": {
  "full": [
    {
      "loggerId": "1000201A",
      "temperatures": [
        {
          "timeStamp": "2026-03-11T05:17:04Z",
          "value": 200
        },
        {
          "timeStamp": "2026-03-11T05:27:04Z",
          "value": 202
        },
        {
          "timeStamp": "2026-03-11T05:37:04Z",
          "value": 204
        },
        {
          "timeStamp": "2026-03-11T05:47:04Z",
          "value": 202
        },
        {
          "timeStamp": "2026-03-11T05:57:04Z",
          "value": 200
        },
        {
          "timeStamp": "2026-03-11T06:07:04Z",
          "value": 200
        }
      ],
      "temperaturesCount": 6
    },
    {
      "loggerId": "1000201B",
      "temperatures": [
        {
          "timeStamp": "2026-03-11T05:17:04Z",
          "value": 200
        },
        {
          "timeStamp": "2026-03-11T05:27:04Z",
          "value": 202
        },
        {
          "timeStamp": "2026-03-11T05:37:04Z",
          "value": 204
        },
        {
          "timeStamp": "2026-03-11T05:47:04Z",
          "value": 202
        },
        {
          "timeStamp": "2026-03-11T05:57:04Z",
          "value": 200
        },
        {
          "timeStamp": "2026-03-11T06:07:04Z",
          "value": 200
        }
      ],
      "temperaturesCount": 6
    }
  ],
  "temperaturesCount": 12,
  "shipmentReference": "89fbf045-07cb-4d57-968e-f3987d19d12a",
  "shipmentType": "Regular",
  "success": true,
  "responseTime": 0
}
              }
            }
          },
          "400": {
            "description": "Bad Request",
            "headers": {
              "x-correlation-id": {
                "description": "The unique id identifying the original requests path through the Controlant systems. Callers should log this value to facilitate easier troubleshooting and incident resolution.",
                "schema": {
                  "type": "string"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/GenericInputValidationErrorResponse"
                },
                "example": {
  "errorMessage": "One or more validation errors occurred.",
  "status": 400,
  "errors": {
    "Reference": "'Reference' must not be empty.",
    "OriginReference": "'OriginReference' must not be empty.",
    "DestinationReference": "'DestinationReference' must not be empty."
  },
  "success": false,
  "responseTime": 0
}
              }
            }
          },
          "500": {
            "description": "Internal Server Error",
            "headers": {
              "x-correlation-id": {
                "description": "The unique id identifying the original requests path through the Controlant systems. Callers should log this value to facilitate easier troubleshooting and incident resolution.",
                "schema": {
                  "type": "string"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                },
                "example": {
  "errorMessage": "Unexpected error while processing request",
  "status": 500,
  "success": false,
  "responseTime": 150,
  "message": "Internal Error"
}
              }
            }
          }
        }
      }
    },
    "/api/scm/shipments/state/products": {
      "post": {
        "tags": [
          "Shipments » State"
        ],
        "summary": "Get Products",
        "description": "<span />            Retrieves all products in the system, either with or without product evaluation for given shipment in the system.\r\n            This function will work for shipments that are currently in a ```Draft```, ```Ready```, ```Shipping```, ```Delivered``` or ```Closed``` state.\r\n            <info>\r\n\t\t\tThis endpoint will only work for shipments that are either undelivered or were delivered less than 30 days ago (configurable per customer, please contact your Controlant account manager for further details).\r\n\t\t</info>",
        "requestBody": {
          "description": "A Shipment State Products request",
          "content": {
            "application/json": {
              "schema": {
                "allOf": [
                  {
                    "$ref": "#/components/schemas/ShipmentStateProductsRequest"
                  }
                ],
                "description": "Defines a Shipment State Products Request"
              },
              "example": {
  "detailLevel": "Full",
  "shipmentReference": "Oslo-to-Copenhagen-Jan2020"
}
            }
          }
        },
        "responses": {
          "200": {
            "description": "OK",
            "headers": {
              "x-correlation-id": {
                "description": "The unique id identifying the original requests path through the Controlant systems. Callers should log this value to facilitate easier troubleshooting and incident resolution.",
                "schema": {
                  "type": "string"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ShipmentStateProductsResponse"
                },
                "examples": {
                  "Default": {
                    "value": {
  "products": [
    {
      "evaluation": {
        "status": "WithinBudget",
        "loggers": [
          {
            "loggerId": "1000202A",
            "evaluation": {
              "status": "WithinBudget",
              "temperatureStatus": "WithinBudget",
              "freezeThawStatus": "WithinBudget"
            }
          }
        ]
      },
      "productReference": "maxdevin-400mg",
      "productName": "Maxdevin",
      "properties": [
        {
          "name": "MaterialId",
          "value": "6655"
        }
      ],
      "palletReference": "Pallet C",
      "batchReference": "12345"
    },
    {
      "evaluation": {
        "status": "WithinBudget",
        "loggers": [
          {
            "loggerId": "1000203A",
            "evaluation": {
              "status": "WithinBudget",
              "temperatureStatus": "WithinBudget",
              "freezeThawStatus": "WithinBudget"
            }
          }
        ]
      },
      "productReference": "maxdevin-100mg",
      "productName": "Maxdevin",
      "properties": [
        {
          "name": "MaterialId",
          "value": "8899"
        }
      ],
      "palletReference": "Pallet A",
      "batchReference": "5566"
    },
    {
      "evaluation": {
        "status": "WithinBudget",
        "loggers": [
          {
            "loggerId": "1000204A",
            "evaluation": {
              "status": "WithinBudget",
              "temperatureStatus": "WithinBudget",
              "freezeThawStatus": "WithinBudget"
            }
          }
        ]
      },
      "productReference": "maxdevin-200mg",
      "productName": "Maxdevin",
      "properties": [
        {
          "name": "MaterialId",
          "value": "8888"
        }
      ],
      "palletReference": "Pallet B",
      "batchReference": "5566"
    }
  ],
  "productsCount": 3,
  "shipmentReference": "MyShipmentReference",
  "shipmentType": "Regular",
  "success": true,
  "responseTime": 0
}
                  },
                  "Different evaluations": {
                    "value": {
  "products": [
    {
      "evaluation": {
        "status": "WithinBudget",
        "loggers": [
          {
            "loggerId": "1000203A",
            "evaluation": {
              "status": "WithinBudget",
              "temperatureStatus": "WithinBudget",
              "freezeThawStatus": "WithinBudget"
            }
          },
          {
            "loggerId": "1000203B",
            "evaluation": {
              "status": "ExceedsBudget",
              "temperatureStatus": "WithinBudget",
              "freezeThawStatus": "ExceedsBudget"
            }
          },
          {
            "loggerId": "1000203C",
            "evaluation": {
              "status": "ExceedsBudget",
              "temperatureStatus": "ExceedsBudget",
              "freezeThawStatus": "WithinBudget"
            }
          },
          {
            "loggerId": "1000203D",
            "evaluation": {
              "status": "Undecided",
              "temperatureStatus": "Undecided",
              "freezeThawStatus": "Undecided"
            }
          }
        ]
      },
      "productReference": "maxdevin-400mg",
      "productName": "Maxdevin"
    }
  ],
  "productsCount": 1,
  "shipmentReference": "MyShipmentReference",
  "shipmentType": "Regular",
  "success": true,
  "responseTime": 0
}
                  },
                  "Multiple product properties": {
                    "value": {
  "products": [
    {
      "productReference": "maxdevin-400mg",
      "productName": "Maxdevin",
      "properties": [
        {
          "name": "Property_A",
          "value": "Value_A"
        },
        {
          "name": "Property_B",
          "value": "Value_B"
        },
        {
          "name": "Property_C",
          "value": "Value_C"
        }
      ]
    }
  ],
  "productsCount": 1,
  "shipmentReference": "MyShipmentReference",
  "shipmentType": "Regular",
  "success": true,
  "responseTime": 0
}
                  },
                  "Simple": {
                    "value": {
  "products": [
    {
      "evaluation": {
        "status": "WithinBudget",
        "loggers": [
          {
            "loggerId": "1000204A",
            "evaluation": {
              "status": "WithinBudget",
              "temperatureStatus": "WithinBudget",
              "freezeThawStatus": "WithinBudget"
            }
          }
        ]
      },
      "productReference": "maxdevin-400mg",
      "productName": "Maxdevin"
    }
  ],
  "productsCount": 1,
  "shipmentReference": "MyShipmentReference",
  "shipmentType": "Regular",
  "success": true,
  "responseTime": 0
}
                  }
                }
              }
            }
          },
          "400": {
            "description": "Bad Request",
            "headers": {
              "x-correlation-id": {
                "description": "The unique id identifying the original requests path through the Controlant systems. Callers should log this value to facilitate easier troubleshooting and incident resolution.",
                "schema": {
                  "type": "string"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/GenericInputValidationErrorResponse"
                },
                "example": {
  "errorMessage": "One or more validation errors occurred.",
  "status": 400,
  "errors": {
    "Reference": "'Reference' must not be empty.",
    "OriginReference": "'OriginReference' must not be empty.",
    "DestinationReference": "'DestinationReference' must not be empty."
  },
  "success": false,
  "responseTime": 0
}
              }
            }
          },
          "500": {
            "description": "Internal Server Error",
            "headers": {
              "x-correlation-id": {
                "description": "The unique id identifying the original requests path through the Controlant systems. Callers should log this value to facilitate easier troubleshooting and incident resolution.",
                "schema": {
                  "type": "string"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                },
                "example": {
  "errorMessage": "Unexpected error while processing request",
  "status": 500,
  "success": false,
  "responseTime": 150,
  "message": "Internal Error"
}
              }
            }
          }
        }
      }
    },
    "/api/scm/shipments/state/analysis": {
      "post": {
        "tags": [
          "Shipments » State"
        ],
        "summary": "Get Analysis",
        "description": "<span />            Retrieves analysis of temperature measurements for a requested shipment. Contains temperature analysis for each logger in the shipment and temperature excursions.\r\n            This function will only work for shipments that are currently in a ```Closed``` or ```Delivered``` state.\r\n            <info>\r\n\t\t\tThis endpoint will only work for shipments that are either undelivered or were delivered less than 30 days ago (configurable per customer, please contact your Controlant account manager for further details).\r\n\t\t</info>",
        "requestBody": {
          "description": "A Shipment Analysis request",
          "content": {
            "application/json": {
              "schema": {
                "allOf": [
                  {
                    "$ref": "#/components/schemas/ShipmentAnalysisRequest"
                  }
                ],
                "description": "Defines a shipment analysis request"
              },
              "example": {
  "shipmentReference": "MyShipmentReference"
}
            }
          }
        },
        "responses": {
          "200": {
            "description": "OK",
            "headers": {
              "x-correlation-id": {
                "description": "The unique id identifying the original requests path through the Controlant systems. Callers should log this value to facilitate easier troubleshooting and incident resolution.",
                "schema": {
                  "type": "string"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ShipmentAnalysisResponse"
                },
                "examples": {
                  "Excursion for all loggers": {
                    "value": {
  "shipmentReference": "MyShipmentReference",
  "shipmentType": "Regular",
  "loggers": [
    {
      "loggerId": "3000580D",
      "analysis": {
        "temperature": {
          "max": 206,
          "min": -30,
          "mean": 121,
          "mkt": 136
        }
      },
      "analysisAvailability": "Available",
      "analysisExists": true,
      "excursions": [
        {
          "timeStamp": "2026-03-10T06:17:04Z",
          "severity": "Medium",
          "limit": "<2°C",
          "timeLimit": 600,
          "timeOutOfLimits": 28200,
          "triggered": true
        },
        {
          "timeStamp": "2026-03-10T20:17:04Z",
          "severity": "High",
          "limit": "<0.5°C",
          "timeLimit": 600,
          "timeOutOfLimits": 19800,
          "triggered": true
        }
      ],
      "excursionsCount": 2
    },
    {
      "loggerId": "3000581B",
      "analysis": {
        "temperature": {
          "max": 205,
          "min": -41,
          "mean": 116,
          "mkt": 132
        }
      },
      "analysisAvailability": "Available",
      "analysisExists": true,
      "excursions": [
        {
          "timeStamp": "2026-03-09T08:17:04Z",
          "severity": "Low",
          "limit": "<2°C",
          "timeLimit": 600,
          "timeOutOfLimits": 32400,
          "triggered": true
        },
        {
          "timeStamp": "2026-03-11T01:17:04Z",
          "severity": "High",
          "limit": "<0.5°C",
          "timeLimit": 600,
          "timeOutOfLimits": 24000,
          "triggered": true
        }
      ],
      "excursionsCount": 2
    }
  ],
  "loggersCount": 2,
  "shipmentAnalysisAvailability": "Available",
  "success": true,
  "responseTime": 0
}
                  },
                  "No excursions for any logger": {
                    "value": {
  "shipmentReference": "MyShipmentReference",
  "shipmentType": "Regular",
  "loggers": [
    {
      "loggerId": "3000580D",
      "analysis": {
        "temperature": {
          "max": 206,
          "min": -30,
          "mean": 121,
          "mkt": 136
        }
      },
      "analysisAvailability": "Available",
      "analysisExists": true,
      "excursions": [
        {
          "timeStamp": "2026-03-10T06:17:04Z",
          "severity": "Medium",
          "limit": "<2°C",
          "timeLimit": 600,
          "timeOutOfLimits": 28200,
          "triggered": true
        },
        {
          "timeStamp": "2026-03-10T20:17:04Z",
          "severity": "High",
          "limit": "<0.5°C",
          "timeLimit": 600,
          "timeOutOfLimits": 19800,
          "triggered": true
        }
      ],
      "excursionsCount": 0
    },
    {
      "loggerId": "3000581B",
      "analysis": {
        "temperature": {
          "max": 205,
          "min": -41,
          "mean": 116,
          "mkt": 132
        }
      },
      "analysisAvailability": "Available",
      "analysisExists": true,
      "excursionsCount": 0
    }
  ],
  "loggersCount": 2,
  "shipmentAnalysisAvailability": "Available",
  "success": true,
  "responseTime": 0
}
                  },
                  "Partly analysed": {
                    "value": {
  "shipmentReference": "MyShipmentReference",
  "shipmentType": "Regular",
  "loggers": [
    {
      "loggerId": "3000580D",
      "analysis": {
        "temperature": {
          "max": 206,
          "min": -30,
          "mean": 121,
          "mkt": 136
        }
      },
      "analysisAvailability": "Available",
      "analysisExists": true,
      "excursions": [
        {
          "timeStamp": "2026-03-10T06:17:04Z",
          "severity": "Medium",
          "limit": "<2°C",
          "timeLimit": 600,
          "timeOutOfLimits": 28200,
          "triggered": true
        },
        {
          "timeStamp": "2026-03-10T20:17:04Z",
          "severity": "High",
          "limit": "<0.5°C",
          "timeLimit": 600,
          "timeOutOfLimits": 19800,
          "triggered": true
        }
      ],
      "excursionsCount": 0
    },
    {
      "loggerId": "3000581B",
      "analysisAvailability": "NotAvailable",
      "analysisExists": false,
      "excursionsCount": 0
    }
  ],
  "loggersCount": 2,
  "shipmentAnalysisAvailability": "PartlyAvailable",
  "success": true,
  "responseTime": 0
}
                  },
                  "No analysis available": {
                    "value": {
  "shipmentReference": "MyShipmentReference",
  "shipmentType": "Regular",
  "loggers": [
    {
      "loggerId": "3000580D",
      "analysisAvailability": "NotAvailable",
      "analysisExists": false,
      "excursionsCount": 0
    },
    {
      "loggerId": "3000581B",
      "analysisAvailability": "NotAvailable",
      "analysisExists": false,
      "excursionsCount": 0
    }
  ],
  "loggersCount": 2,
  "shipmentAnalysisAvailability": "NotAvailable",
  "success": true,
  "responseTime": 0
}
                  }
                }
              }
            }
          },
          "400": {
            "description": "Bad Request",
            "headers": {
              "x-correlation-id": {
                "description": "The unique id identifying the original requests path through the Controlant systems. Callers should log this value to facilitate easier troubleshooting and incident resolution.",
                "schema": {
                  "type": "string"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/GenericInputValidationErrorResponse"
                },
                "example": {
  "errorMessage": "One or more validation errors occurred.",
  "status": 400,
  "errors": {
    "Reference": "'Reference' must not be empty.",
    "OriginReference": "'OriginReference' must not be empty.",
    "DestinationReference": "'DestinationReference' must not be empty."
  },
  "success": false,
  "responseTime": 0
}
              }
            }
          },
          "500": {
            "description": "Internal Server Error",
            "headers": {
              "x-correlation-id": {
                "description": "The unique id identifying the original requests path through the Controlant systems. Callers should log this value to facilitate easier troubleshooting and incident resolution.",
                "schema": {
                  "type": "string"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                },
                "example": {
  "errorMessage": "Unexpected error while processing request",
  "status": 500,
  "success": false,
  "responseTime": 150,
  "message": "Internal Error"
}
              }
            }
          }
        }
      }
    },
    "/api/scm/shipments/state/loggers/events": {
      "post": {
        "tags": [
          "Shipments » State"
        ],
        "summary": "Get Logger Events",
        "description": "            Retrieves all requested logger events raised for a given shipment while it was active (not in ```Draft``` or ```Deleted``` state).\r\n            <info>\r\n\t\t\tThis endpoint will only work for shipments that are either undelivered or were delivered less than 30 days ago (configurable per customer, please contact your Controlant account manager for further details).\r\n\t\t</info>",
        "requestBody": {
          "description": "A Logger Events request",
          "content": {
            "application/json": {
              "schema": {
                "allOf": [
                  {
                    "$ref": "#/components/schemas/LoggerEventsRequest"
                  }
                ],
                "description": "Defines a Logger Events Request"
              },
              "examples": {
                "Event selection": {
                  "value": {
  "events": [
    "ButtonPressed",
    "Light"
  ],
  "shipmentReference": "a5cae4c2-d750-4598-87ba-72145265f8e3"
}
                },
                "Server time range": {
                  "value": {
  "serverTimeFrom": "2026-03-11T06:02:04Z",
  "serverTimeTo": "2026-03-11T06:17:04Z",
  "shipmentReference": "ab2cbc92-01a8-4b5b-9252-5a4d80a5fffe"
}
                }
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "OK",
            "headers": {
              "x-correlation-id": {
                "description": "The unique id identifying the original requests path through the Controlant systems. Callers should log this value to facilitate easier troubleshooting and incident resolution.",
                "schema": {
                  "type": "string"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/LoggerEventsResponse"
                },
                "examples": {
                  "Default": {
                    "value": {
  "shipmentReference": "ShipmentWithTwoLoggersAndFourEvents",
  "totalEventsCount": 4,
  "loggersCount": 2,
  "loggerEvents": [
    {
      "loggerId": "10011011",
      "eventsCount": 2,
      "events": [
        {
          "event": "Light",
          "timestamp": "2026-03-09T06:17:04Z",
          "payload": {
            "state": "High"
          },
          "location": {
            "latitude": 64.1882714,
            "longitude": -21.907402,
            "type": "Approximate",
            "accuracyInMeters": 40
          }
        },
        {
          "event": "ButtonPressed",
          "timestamp": "2026-03-09T06:17:21Z",
          "payload": {
            "state": "Start"
          },
          "location": {
            "timeStamp": "2026-03-09T06:17:04Z",
            "latitude": 64.1882714,
            "longitude": -21.907402,
            "type": "Interpolated",
            "accuracyInMeters": 1120
          }
        },
        {
          "event": "ButtonPressed",
          "timestamp": "2026-03-10T06:54:04Z",
          "payload": {
            "state": "Start"
          },
          "location": {
            "latitude": 62.1450126,
            "longitude": -6.991516,
            "accuracyInMeters": 1423
          }
        }
      ]
    },
    {
      "loggerId": "10007FC7",
      "eventsCount": 2,
      "events": [
        {
          "event": "ButtonPressed",
          "timestamp": "2026-03-09T06:18:04Z",
          "payload": {
            "state": "Stop"
          }
        },
        {
          "event": "ExcursionNotification",
          "timestamp": "2026-03-10T05:20:04Z",
          "payload": {
            "type": "First",
            "severity": "Level1",
            "state": "EnRoute",
            "temperature": {
              "thresholdValue": 450,
              "bounds": "UpperBounds",
              "value": 380
            }
          }
        }
      ]
    }
  ],
  "success": true,
  "responseTime": 0
}
                  },
                  "All event payloads": {
                    "value": {
  "shipmentReference": "ShipmentWithAllEvents",
  "totalEventsCount": 5,
  "loggersCount": 1,
  "loggerEvents": [
    {
      "loggerId": "10011011",
      "eventsCount": 5,
      "events": [
        {
          "event": "ButtonPressed",
          "timestamp": "2026-03-09T06:17:04Z",
          "payload": {
            "state": "Start"
          },
          "location": {
            "latitude": 64.0980262,
            "longitude": -21.8900893,
            "type": "Approximate",
            "accuracyInMeters": 580
          }
        },
        {
          "event": "Status",
          "timestamp": "2026-03-09T06:17:04Z",
          "payload": {
            "state": "EnRoute"
          },
          "location": {
            "latitude": 64.0980262,
            "longitude": -21.8900893,
            "type": "Approximate",
            "accuracyInMeters": 40
          }
        },
        {
          "event": "Light",
          "timestamp": "2026-03-09T06:17:04Z",
          "payload": {
            "state": "High"
          },
          "location": {
            "latitude": 64.0980262,
            "longitude": -21.8900893,
            "type": "Approximate",
            "accuracyInMeters": 110
          }
        },
        {
          "event": "ExcursionNotification",
          "timestamp": "2026-03-09T06:17:04Z",
          "payload": {
            "type": "First",
            "severity": "Level2",
            "state": "EnRoute",
            "temperature": {
              "thresholdValue": -50,
              "bounds": "LowerBounds",
              "value": -48
            }
          },
          "location": {
            "latitude": 64.0980262,
            "longitude": -21.8900893,
            "type": "Approximate",
            "accuracyInMeters": 223
          }
        },
        {
          "event": "SeverityChanged",
          "timestamp": "2026-03-09T06:17:04Z",
          "payload": {
            "severity": "Level2",
            "temperature": {
              "thresholdValue": -50,
              "bounds": "LowerBounds",
              "value": -48
            }
          },
          "location": {
            "latitude": 64.0980262,
            "longitude": -21.8900893,
            "type": "Approximate",
            "accuracyInMeters": 60
          }
        }
      ]
    }
  ],
  "success": true,
  "responseTime": 0
}
                  },
                  "Different excursion notifications": {
                    "value": {
  "shipmentReference": "ShipmentWithDifferentExcursionNotifications",
  "totalEventsCount": 3,
  "loggersCount": 1,
  "loggerEvents": [
    {
      "loggerId": "10011011",
      "eventsCount": 3,
      "events": [
        {
          "event": "ExcursionNotification",
          "timestamp": "2026-03-06T06:17:04Z",
          "payload": {
            "type": "First",
            "severity": "Level1",
            "state": "EnRoute",
            "temperature": {
              "thresholdValue": -50,
              "bounds": "LowerBounds",
              "value": -48
            }
          },
          "location": {
            "latitude": 64.1475,
            "longitude": -21.935,
            "type": "Approximate",
            "accuracyInMeters": 40
          }
        },
        {
          "event": "ExcursionNotification",
          "timestamp": "2026-03-06T06:17:04Z",
          "payload": {
            "type": "Subsequent",
            "severity": "Level2",
            "state": "EnRoute",
            "temperature": {
              "thresholdValue": -50,
              "bounds": "LowerBounds",
              "value": -20
            }
          },
          "location": {
            "latitude": 40.62313086260791,
            "longitude": -73.7841995873414,
            "type": "Approximate",
            "accuracyInMeters": 40
          }
        },
        {
          "event": "ExcursionNotification",
          "timestamp": "2026-03-06T06:17:04Z",
          "payload": {
            "type": "Subsequent",
            "severity": "Level3",
            "state": "EnRoute",
            "temperature": {
              "thresholdValue": -50,
              "bounds": "LowerBounds",
              "value": 10
            }
          },
          "location": {
            "latitude": 33.93360027087666,
            "longitude": -118.41811687874925,
            "type": "Approximate",
            "accuracyInMeters": 40
          }
        }
      ]
    }
  ],
  "success": true,
  "responseTime": 0
}
                  },
                  "Geo event notifications": {
                    "value": {
  "shipmentReference": "ShipmentGeoEventNotifications",
  "totalEventsCount": 8,
  "loggersCount": 1,
  "loggerEvents": [
    {
      "loggerId": "10011011",
      "eventsCount": 8,
      "events": [
        {
          "event": "Status",
          "timestamp": "2026-03-10T18:17:04Z",
          "payload": {
            "state": "AtOrigin"
          },
          "location": {
            "timeStamp": "2026-03-10T18:17:04Z",
            "latitude": 64.0980262,
            "longitude": -21.8900893,
            "type": "Approximate",
            "accuracyInMeters": 40
          }
        },
        {
          "event": "Status",
          "timestamp": "2026-03-10T18:37:04Z",
          "payload": {
            "state": "EnRoute"
          },
          "location": {
            "timeStamp": "2026-03-10T18:37:04Z",
            "latitude": 64.02051296702844,
            "longitude": -22.138750952718258,
            "type": "Approximate",
            "accuracyInMeters": 40
          }
        },
        {
          "event": "Status",
          "timestamp": "2026-03-10T19:07:04Z",
          "payload": {
            "state": "EnRoute"
          },
          "location": {
            "timeStamp": "2026-03-10T19:07:04Z",
            "latitude": 63.981468,
            "longitude": -22.628293489229513,
            "type": "Approximate",
            "accuracyInMeters": 40
          }
        },
        {
          "event": "Status",
          "timestamp": "2026-03-10T20:17:04Z",
          "payload": {
            "state": "EnRoute"
          },
          "location": {
            "timeStamp": "2026-03-10T20:47:04Z",
            "latitude": 57.264603795959694,
            "longitude": -49.55111038270795,
            "type": "Interpolated",
            "accuracyInMeters": 40
          }
        },
        {
          "event": "Status",
          "timestamp": "2026-03-11T01:17:04Z",
          "payload": {
            "state": "EnRoute"
          },
          "location": {
            "latitude": 40.62313086260791,
            "longitude": -73.7841995873414,
            "type": "Approximate",
            "accuracyInMeters": 40
          }
        },
        {
          "event": "Status",
          "timestamp": "2026-03-11T03:17:04Z",
          "payload": {
            "state": "EnRoute"
          },
          "location": {
            "timeStamp": "2026-03-11T01:47:04Z",
            "latitude": 44.57177346726184,
            "longitude": -100.20233895526502,
            "type": "Interpolated",
            "accuracyInMeters": 40
          }
        },
        {
          "event": "Status",
          "timestamp": "2026-03-11T05:17:04Z",
          "payload": {
            "state": "EnRoute"
          },
          "location": {
            "latitude": 33.93360027087666,
            "longitude": -118.41811687874925,
            "type": "Approximate",
            "accuracyInMeters": 40
          }
        },
        {
          "event": "Status",
          "timestamp": "2026-03-11T06:17:04Z",
          "payload": {
            "state": "AtDestination"
          },
          "location": {
            "latitude": 34.04296221127687,
            "longitude": -118.26421271858561,
            "type": "Approximate",
            "accuracyInMeters": 40
          }
        }
      ]
    }
  ],
  "success": true,
  "responseTime": 0
}
                  }
                }
              }
            }
          },
          "400": {
            "description": "Bad Request",
            "headers": {
              "x-correlation-id": {
                "description": "The unique id identifying the original requests path through the Controlant systems. Callers should log this value to facilitate easier troubleshooting and incident resolution.",
                "schema": {
                  "type": "string"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/GenericInputValidationErrorResponse"
                },
                "example": {
  "errorMessage": "One or more validation errors occurred.",
  "status": 400,
  "errors": {
    "Reference": "'Reference' must not be empty.",
    "OriginReference": "'OriginReference' must not be empty.",
    "DestinationReference": "'DestinationReference' must not be empty."
  },
  "success": false,
  "responseTime": 0
}
              }
            }
          },
          "500": {
            "description": "Internal Server Error",
            "headers": {
              "x-correlation-id": {
                "description": "The unique id identifying the original requests path through the Controlant systems. Callers should log this value to facilitate easier troubleshooting and incident resolution.",
                "schema": {
                  "type": "string"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                },
                "example": {
  "errorMessage": "Unexpected error while processing request",
  "status": 500,
  "success": false,
  "responseTime": 150,
  "message": "Internal Error"
}
              }
            }
          }
        }
      }
    },
    "/api/scm/shipments/status/ready": {
      "post": {
        "tags": [
          "Shipments » Status"
        ],
        "summary": "Shipment to Ready",
        "description": "Updates the status of the shipment from ```Draft``` to ```Ready```.\r\n<info>If shipment is already marked as ```Ready``` this function has no effect, else if shipment is not in ```Draft``` state, a validation error will occur.</info><warn>```Draft``` shipment in the Integration API is not the same, and not compatible with, a draft shipment created in SCM. It is therefore not possible to\r\ncreate a draft shipment in SCM and then transition that shipment to ```Ready``` via the Integration API.</warn>",
        "requestBody": {
          "description": "A Shipment Status request",
          "content": {
            "application/json": {
              "schema": {
                "allOf": [
                  {
                    "$ref": "#/components/schemas/ShipmentStatusRequest"
                  }
                ],
                "description": "Defines a Shipment Base Status"
              },
              "example": {
  "shipmentReference": "BostonToMiami-ShipmentT0001"
}
            }
          }
        },
        "responses": {
          "200": {
            "description": "OK",
            "headers": {
              "x-correlation-id": {
                "description": "The unique id identifying the original requests path through the Controlant systems. Callers should log this value to facilitate easier troubleshooting and incident resolution.",
                "schema": {
                  "type": "string"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ShipmentUpdateResponse"
                },
                "example": {
  "shipmentReference": "Oslo-to-Copenhagen-Jan2020",
  "success": true,
  "responseTime": 0
}
              }
            }
          },
          "400": {
            "description": "Bad Request",
            "headers": {
              "x-correlation-id": {
                "description": "The unique id identifying the original requests path through the Controlant systems. Callers should log this value to facilitate easier troubleshooting and incident resolution.",
                "schema": {
                  "type": "string"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/GenericInputValidationErrorResponse"
                },
                "example": {
  "errorMessage": "One or more validation errors occurred.",
  "status": 400,
  "errors": {
    "Reference": "'Reference' must not be empty.",
    "OriginReference": "'OriginReference' must not be empty.",
    "DestinationReference": "'DestinationReference' must not be empty."
  },
  "success": false,
  "responseTime": 0
}
              }
            }
          },
          "500": {
            "description": "Internal Server Error",
            "headers": {
              "x-correlation-id": {
                "description": "The unique id identifying the original requests path through the Controlant systems. Callers should log this value to facilitate easier troubleshooting and incident resolution.",
                "schema": {
                  "type": "string"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                },
                "example": {
  "errorMessage": "Unexpected error while processing request",
  "status": 500,
  "success": false,
  "responseTime": 150,
  "message": "Internal Error"
}
              }
            }
          }
        }
      }
    },
    "/api/scm/shipments/status/closed": {
      "post": {
        "tags": [
          "Shipments » Status"
        ],
        "summary": "Shipment to Closed",
        "description": "Updates the status of the shipment from ```Delivered``` to ```Closed```.\r\n<info>If shipment is already marked as ```Closed``` this function has no effect, else if shipment\r\nis not in ```Delivered``` state, a validation error will occur.\r\n</info>",
        "requestBody": {
          "description": "A Shipment Status request",
          "content": {
            "application/json": {
              "schema": {
                "allOf": [
                  {
                    "$ref": "#/components/schemas/ShipmentStatusRequest"
                  }
                ],
                "description": "Defines a Shipment Base Status"
              },
              "example": {
  "shipmentReference": "BostonToMiami-ShipmentT0001"
}
            }
          }
        },
        "responses": {
          "200": {
            "description": "OK",
            "headers": {
              "x-correlation-id": {
                "description": "The unique id identifying the original requests path through the Controlant systems. Callers should log this value to facilitate easier troubleshooting and incident resolution.",
                "schema": {
                  "type": "string"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ShipmentUpdateResponse"
                },
                "example": {
  "shipmentReference": "Oslo-to-Copenhagen-Jan2020",
  "success": true,
  "responseTime": 0
}
              }
            }
          },
          "400": {
            "description": "Bad Request",
            "headers": {
              "x-correlation-id": {
                "description": "The unique id identifying the original requests path through the Controlant systems. Callers should log this value to facilitate easier troubleshooting and incident resolution.",
                "schema": {
                  "type": "string"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/GenericInputValidationErrorResponse"
                },
                "example": {
  "errorMessage": "One or more validation errors occurred.",
  "status": 400,
  "errors": {
    "Reference": "'Reference' must not be empty.",
    "OriginReference": "'OriginReference' must not be empty.",
    "DestinationReference": "'DestinationReference' must not be empty."
  },
  "success": false,
  "responseTime": 0
}
              }
            }
          },
          "500": {
            "description": "Internal Server Error",
            "headers": {
              "x-correlation-id": {
                "description": "The unique id identifying the original requests path through the Controlant systems. Callers should log this value to facilitate easier troubleshooting and incident resolution.",
                "schema": {
                  "type": "string"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                },
                "example": {
  "errorMessage": "Unexpected error while processing request",
  "status": 500,
  "success": false,
  "responseTime": 150,
  "message": "Internal Error"
}
              }
            }
          }
        }
      }
    },
    "/api/scm/shipments/status/shipped": {
      "post": {
        "tags": [
          "Shipments » Status"
        ],
        "summary": "Shipment to Shipping",
        "description": "Updates the status of the shipment from ```Ready``` to ```Shipping```.\r\n<info>\r\nIf shipment is already marked as ```Shipping``` this function has no effect, else if shipment\r\nis not in ```Ready``` state, a validation error will occur.\r\n</info>",
        "requestBody": {
          "description": "A Shipment Shipped Status request",
          "content": {
            "application/json": {
              "schema": {
                "allOf": [
                  {
                    "$ref": "#/components/schemas/ShipmentShippedStatusRequest"
                  }
                ],
                "description": "Defines a Shipment Shipped Status"
              },
              "example": {
  "timeShipped": "2026-03-11T06:17:04Z",
  "shipmentReference": "BostonToMiami-ShipmentT0001"
}
            }
          }
        },
        "responses": {
          "200": {
            "description": "OK",
            "headers": {
              "x-correlation-id": {
                "description": "The unique id identifying the original requests path through the Controlant systems. Callers should log this value to facilitate easier troubleshooting and incident resolution.",
                "schema": {
                  "type": "string"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ShipmentUpdateResponse"
                },
                "example": {
  "shipmentReference": "Oslo-to-Copenhagen-Jan2020",
  "success": true,
  "responseTime": 0
}
              }
            }
          },
          "400": {
            "description": "Bad Request",
            "headers": {
              "x-correlation-id": {
                "description": "The unique id identifying the original requests path through the Controlant systems. Callers should log this value to facilitate easier troubleshooting and incident resolution.",
                "schema": {
                  "type": "string"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/GenericInputValidationErrorResponse"
                },
                "example": {
  "errorMessage": "One or more validation errors occurred.",
  "status": 400,
  "errors": {
    "Reference": "'Reference' must not be empty.",
    "OriginReference": "'OriginReference' must not be empty.",
    "DestinationReference": "'DestinationReference' must not be empty."
  },
  "success": false,
  "responseTime": 0
}
              }
            }
          },
          "500": {
            "description": "Internal Server Error",
            "headers": {
              "x-correlation-id": {
                "description": "The unique id identifying the original requests path through the Controlant systems. Callers should log this value to facilitate easier troubleshooting and incident resolution.",
                "schema": {
                  "type": "string"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                },
                "example": {
  "errorMessage": "Unexpected error while processing request",
  "status": 500,
  "success": false,
  "responseTime": 150,
  "message": "Internal Error"
}
              }
            }
          }
        }
      }
    },
    "/api/scm/shipments/status/delivered": {
      "post": {
        "tags": [
          "Shipments » Status"
        ],
        "summary": "Shipment to Delivered",
        "description": "Updates the status of the shipment from ```Shipping``` to ```Delivered```delivered.\r\n<info>\r\nIf shipment is already marked as ```Delivered``` this function has no effect, else if shipment\r\nis not in ```Shipping``` state, a validation error will occur.\r\n</info>",
        "requestBody": {
          "description": "A Shipment Delivered Status request",
          "content": {
            "application/json": {
              "schema": {
                "allOf": [
                  {
                    "$ref": "#/components/schemas/ShipmentDeliveredStatusRequest"
                  }
                ],
                "description": "Defines a Shipment Delivered Status"
              },
              "example": {
  "timeDelivered": "2026-03-11T06:17:04Z",
  "shipmentReference": "BostonToMiami-ShipmentT0001"
}
            }
          }
        },
        "responses": {
          "200": {
            "description": "OK",
            "headers": {
              "x-correlation-id": {
                "description": "The unique id identifying the original requests path through the Controlant systems. Callers should log this value to facilitate easier troubleshooting and incident resolution.",
                "schema": {
                  "type": "string"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ShipmentUpdateResponse"
                },
                "example": {
  "shipmentReference": "Oslo-to-Copenhagen-Jan2020",
  "success": true,
  "responseTime": 0
}
              }
            }
          },
          "400": {
            "description": "Bad Request",
            "headers": {
              "x-correlation-id": {
                "description": "The unique id identifying the original requests path through the Controlant systems. Callers should log this value to facilitate easier troubleshooting and incident resolution.",
                "schema": {
                  "type": "string"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/GenericInputValidationErrorResponse"
                },
                "example": {
  "errorMessage": "One or more validation errors occurred.",
  "status": 400,
  "errors": {
    "Reference": "'Reference' must not be empty.",
    "OriginReference": "'OriginReference' must not be empty.",
    "DestinationReference": "'DestinationReference' must not be empty."
  },
  "success": false,
  "responseTime": 0
}
              }
            }
          },
          "500": {
            "description": "Internal Server Error",
            "headers": {
              "x-correlation-id": {
                "description": "The unique id identifying the original requests path through the Controlant systems. Callers should log this value to facilitate easier troubleshooting and incident resolution.",
                "schema": {
                  "type": "string"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                },
                "example": {
  "errorMessage": "Unexpected error while processing request",
  "status": 500,
  "success": false,
  "responseTime": 150,
  "message": "Internal Error"
}
              }
            }
          }
        }
      }
    },
    "/api/scm/templates/contact/create": {
      "post": {
        "tags": [
          "Templates"
        ],
        "summary": "Create Contact Template",
        "description": "Creates a new contact template with the given reference value.",
        "requestBody": {
          "description": "A Contact Template create request",
          "content": {
            "application/json": {
              "schema": {
                "allOf": [
                  {
                    "$ref": "#/components/schemas/ContactTemplateCreateRequest"
                  }
                ],
                "description": "Defines a Contact Template"
              },
              "example": {
  "reference": "1234567890AB",
  "contacts": [
    {
      "contactType": "Email",
      "contactAddress": "joe-wants-it-all@example.com",
      "deliveryEvent": "None",
      "minimumSeverity": "Level0"
    },
    {
      "contactType": "Email",
      "contactAddress": "support@example.com",
      "deliveryEvent": "Reports",
      "minimumSeverity": "Level2"
    },
    {
      "contactType": "SMS",
      "contactAddress": "555-8888",
      "deliveryEvent": "None",
      "minimumSeverity": "Level3"
    }
  ]
}
            }
          }
        },
        "responses": {
          "200": {
            "description": "OK",
            "headers": {
              "x-correlation-id": {
                "description": "The unique id identifying the original requests path through the Controlant systems. Callers should log this value to facilitate easier troubleshooting and incident resolution.",
                "schema": {
                  "type": "string"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/BaseTemplateResponse"
                },
                "example": {
  "templateReference": "1234567890AB",
  "success": true,
  "responseTime": 0
}
              }
            }
          },
          "400": {
            "description": "Bad Request",
            "headers": {
              "x-correlation-id": {
                "description": "The unique id identifying the original requests path through the Controlant systems. Callers should log this value to facilitate easier troubleshooting and incident resolution.",
                "schema": {
                  "type": "string"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/GenericInputValidationErrorResponse"
                },
                "example": {
  "errorMessage": "One or more validation errors occurred.",
  "status": 400,
  "errors": {
    "Reference": "'Reference' must not be empty.",
    "OriginReference": "'OriginReference' must not be empty.",
    "DestinationReference": "'DestinationReference' must not be empty."
  },
  "success": false,
  "responseTime": 0
}
              }
            }
          },
          "500": {
            "description": "Internal Server Error",
            "headers": {
              "x-correlation-id": {
                "description": "The unique id identifying the original requests path through the Controlant systems. Callers should log this value to facilitate easier troubleshooting and incident resolution.",
                "schema": {
                  "type": "string"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                },
                "example": {
  "errorMessage": "Unexpected error while processing request",
  "status": 500,
  "success": false,
  "responseTime": 150,
  "message": "Internal Error"
}
              }
            }
          }
        }
      }
    },
    "/api/scm/templates/logger/create": {
      "post": {
        "tags": [
          "Templates"
        ],
        "summary": "Create Logger Template",
        "description": "Creates a new logger template with the given reference value.\r\nThis template should be used to specify default values to assign to loggers when added to shipments",
        "requestBody": {
          "description": "A Logger Template create request",
          "content": {
            "application/json": {
              "schema": {
                "allOf": [
                  {
                    "$ref": "#/components/schemas/LoggerTemplateCreateRequest"
                  }
                ],
                "description": "Defines a Logger Template request"
              },
              "example": {
  "reference": "1234567890AB",
  "shippingMethod": "Button",
  "deliveryMethod": "GeoFenceAndButton",
  "warningsIgnorePeriodAtStart": 0,
  "warningsIgnorePeriodAtEnd": 0,
  "excursionSeverityThreshold": "Level3",
  "preferredWakeUpInterval": "Default"
}
            }
          }
        },
        "responses": {
          "200": {
            "description": "OK",
            "headers": {
              "x-correlation-id": {
                "description": "The unique id identifying the original requests path through the Controlant systems. Callers should log this value to facilitate easier troubleshooting and incident resolution.",
                "schema": {
                  "type": "string"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/BaseTemplateResponse"
                },
                "example": {
  "templateReference": "1234567890AB",
  "success": true,
  "responseTime": 0
}
              }
            }
          },
          "400": {
            "description": "Bad Request",
            "headers": {
              "x-correlation-id": {
                "description": "The unique id identifying the original requests path through the Controlant systems. Callers should log this value to facilitate easier troubleshooting and incident resolution.",
                "schema": {
                  "type": "string"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/GenericInputValidationErrorResponse"
                },
                "example": {
  "errorMessage": "One or more validation errors occurred.",
  "status": 400,
  "errors": {
    "Reference": "'Reference' must not be empty.",
    "OriginReference": "'OriginReference' must not be empty.",
    "DestinationReference": "'DestinationReference' must not be empty."
  },
  "success": false,
  "responseTime": 0
}
              }
            }
          },
          "500": {
            "description": "Internal Server Error",
            "headers": {
              "x-correlation-id": {
                "description": "The unique id identifying the original requests path through the Controlant systems. Callers should log this value to facilitate easier troubleshooting and incident resolution.",
                "schema": {
                  "type": "string"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                },
                "example": {
  "errorMessage": "Unexpected error while processing request",
  "status": 500,
  "success": false,
  "responseTime": 150,
  "message": "Internal Error"
}
              }
            }
          }
        }
      }
    },
    "/api/scm/templates/alert/create": {
      "post": {
        "tags": [
          "Templates"
        ],
        "summary": "Create Alert Template",
        "description": "Creates a new alert template with the given reference value.\r\nThis template should be used to assign upper and lower bound alert values to shipments and loggers",
        "requestBody": {
          "description": "An Alert Template create request",
          "content": {
            "application/json": {
              "schema": {
                "allOf": [
                  {
                    "$ref": "#/components/schemas/AlertTemplateCreateRequest"
                  }
                ],
                "description": "Defines an Alert Template"
              },
              "example": {
  "reference": "Actemura-400mg-Tablets-AlertTemplate",
  "alerts": [
    {
      "bounds": "UpperBounds",
      "thresholdValue": 30,
      "dataType": "Temperature",
      "accumulativeTimeLimit": 600,
      "severity": "Level3"
    },
    {
      "bounds": "LowerBounds",
      "thresholdValue": -1,
      "dataType": "Temperature",
      "accumulativeTimeLimit": 600,
      "severity": "Level3"
    },
    {
      "bounds": "UpperBounds",
      "thresholdValue": 15,
      "dataType": "Temperature",
      "accumulativeTimeLimit": 600,
      "severity": "Level2"
    },
    {
      "bounds": "LowerBounds",
      "thresholdValue": 5,
      "dataType": "Temperature",
      "accumulativeTimeLimit": 600,
      "severity": "Level2"
    }
  ]
}
            }
          }
        },
        "responses": {
          "200": {
            "description": "OK",
            "headers": {
              "x-correlation-id": {
                "description": "The unique id identifying the original requests path through the Controlant systems. Callers should log this value to facilitate easier troubleshooting and incident resolution.",
                "schema": {
                  "type": "string"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/BaseTemplateResponse"
                },
                "example": {
  "templateReference": "1234567890AB",
  "success": true,
  "responseTime": 0
}
              }
            }
          },
          "400": {
            "description": "Bad Request",
            "headers": {
              "x-correlation-id": {
                "description": "The unique id identifying the original requests path through the Controlant systems. Callers should log this value to facilitate easier troubleshooting and incident resolution.",
                "schema": {
                  "type": "string"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/GenericInputValidationErrorResponse"
                },
                "example": {
  "errorMessage": "One or more validation errors occurred.",
  "status": 400,
  "errors": {
    "Reference": "'Reference' must not be empty.",
    "OriginReference": "'OriginReference' must not be empty.",
    "DestinationReference": "'DestinationReference' must not be empty."
  },
  "success": false,
  "responseTime": 0
}
              }
            }
          },
          "500": {
            "description": "Internal Server Error",
            "headers": {
              "x-correlation-id": {
                "description": "The unique id identifying the original requests path through the Controlant systems. Callers should log this value to facilitate easier troubleshooting and incident resolution.",
                "schema": {
                  "type": "string"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                },
                "example": {
  "errorMessage": "Unexpected error while processing request",
  "status": 500,
  "success": false,
  "responseTime": 150,
  "message": "Internal Error"
}
              }
            }
          }
        }
      }
    },
    "/api/scm/templates/delete": {
      "post": {
        "tags": [
          "Templates"
        ],
        "summary": "Delete Template",
        "description": "Deletes a template given its reference number.",
        "requestBody": {
          "description": "A Delete Template request",
          "content": {
            "application/json": {
              "schema": {
                "allOf": [
                  {
                    "$ref": "#/components/schemas/DeleteTemplateRequest"
                  }
                ],
                "description": "Defines a Delete Template Request"
              },
              "example": {
  "reference": "DC1-LoggerTemplate",
  "type": "Logger"
}
            }
          }
        },
        "responses": {
          "200": {
            "description": "OK",
            "headers": {
              "x-correlation-id": {
                "description": "The unique id identifying the original requests path through the Controlant systems. Callers should log this value to facilitate easier troubleshooting and incident resolution.",
                "schema": {
                  "type": "string"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/BaseResponse"
                },
                "example": {
  "success": true,
  "responseTime": 200
}
              }
            }
          },
          "400": {
            "description": "Bad Request",
            "headers": {
              "x-correlation-id": {
                "description": "The unique id identifying the original requests path through the Controlant systems. Callers should log this value to facilitate easier troubleshooting and incident resolution.",
                "schema": {
                  "type": "string"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/GenericInputValidationErrorResponse"
                },
                "example": {
  "errorMessage": "One or more validation errors occurred.",
  "status": 400,
  "errors": {
    "Reference": "'Reference' must not be empty.",
    "OriginReference": "'OriginReference' must not be empty.",
    "DestinationReference": "'DestinationReference' must not be empty."
  },
  "success": false,
  "responseTime": 0
}
              }
            }
          },
          "500": {
            "description": "Internal Server Error",
            "headers": {
              "x-correlation-id": {
                "description": "The unique id identifying the original requests path through the Controlant systems. Callers should log this value to facilitate easier troubleshooting and incident resolution.",
                "schema": {
                  "type": "string"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                },
                "example": {
  "errorMessage": "Unexpected error while processing request",
  "status": 500,
  "success": false,
  "responseTime": 150,
  "message": "Internal Error"
}
              }
            }
          }
        }
      }
    },
    "/api/echo": {
      "post": {
        "tags": [
          "Test » Echo"
        ],
        "summary": "Echo Test",
        "description": "A simple endpoint to validate connectivity by external integration systems to the Controlant Integration API system.\r\nThis function has no side-effects in the system and can be used to verify that upstream systems are able to successfully\r\nconnect to and interact with the API.",
        "requestBody": {
          "description": "An Echo request",
          "content": {
            "application/json": {
              "schema": {
                "allOf": [
                  {
                    "$ref": "#/components/schemas/EchoRequest"
                  }
                ],
                "description": "Defines an Echo Request"
              },
              "example": {
  "reference": "Test-Echo-Request-01"
}
            }
          }
        },
        "responses": {
          "200": {
            "description": "OK",
            "headers": {
              "x-correlation-id": {
                "description": "The unique id identifying the original requests path through the Controlant systems. Callers should log this value to facilitate easier troubleshooting and incident resolution.",
                "schema": {
                  "type": "string"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/EchoResponse"
                },
                "example": {
  "reference": "Test-Echo-Request-01",
  "success": true,
  "responseTime": 0,
  "message": "Hi there :). The time is now: 2026-03-11T06:17:04.1789610Z"
}
              }
            }
          },
          "400": {
            "description": "Bad Request",
            "headers": {
              "x-correlation-id": {
                "description": "The unique id identifying the original requests path through the Controlant systems. Callers should log this value to facilitate easier troubleshooting and incident resolution.",
                "schema": {
                  "type": "string"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/GenericInputValidationErrorResponse"
                },
                "example": {
  "errorMessage": "One or more validation errors occurred.",
  "status": 400,
  "errors": {
    "Reference": "'Reference' must not be empty.",
    "OriginReference": "'OriginReference' must not be empty.",
    "DestinationReference": "'DestinationReference' must not be empty."
  },
  "success": false,
  "responseTime": 0
}
              }
            }
          },
          "500": {
            "description": "Internal Server Error",
            "headers": {
              "x-correlation-id": {
                "description": "The unique id identifying the original requests path through the Controlant systems. Callers should log this value to facilitate easier troubleshooting and incident resolution.",
                "schema": {
                  "type": "string"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                },
                "example": {
  "errorMessage": "Unexpected error while processing request",
  "status": 500,
  "success": false,
  "responseTime": 150,
  "message": "Internal Error"
}
              }
            }
          }
        }
      }
    },
    "/api/ult/trade-items/create": {
      "post": {
        "tags": [
          "Trade Items"
        ],
        "summary": "Create Trade Items",
        "description": "<span class=\"addon-feature\">Managing trade items is an added value feature, please contact your Controlant account manager for further details.</span>Use this endpoint to create new trade item.\r\nThis endpoint can also be used to re-pair a trade item with an existing device (i.e. a device that has already been paired with a trade item), in which case previous pairings are disabled, i.e. the disabled status is changed to true.",
        "requestBody": {
          "description": "A Trade Item create request",
          "content": {
            "application/json": {
              "schema": {
                "allOf": [
                  {
                    "$ref": "#/components/schemas/CreateTradeItemsRequest"
                  }
                ],
                "description": "A request to create new trade items in our platform"
              },
              "example": {
  "tradeItems": [
    {
      "batchNumber": "54126",
      "expiryDate": "2026-09-11",
      "deviceId": "BCBB3E15-BDE7-4DE0-AF38-6282833D1BBB",
      "description": "Acetylsalicylic Acid",
      "dataAttributes": [
        {
          "applicationIdentifier": "11",
          "value": "260304"
        },
        {
          "applicationIdentifier": "17",
          "value": "260911"
        }
      ],
      "gtin": "05901234123457",
      "serialNumber": "ABC123456-SN"
    }
  ]
}
            }
          }
        },
        "responses": {
          "200": {
            "description": "OK",
            "headers": {
              "x-correlation-id": {
                "description": "The unique id identifying the original requests path through the Controlant systems. Callers should log this value to facilitate easier troubleshooting and incident resolution.",
                "schema": {
                  "type": "string"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/CreateTradeItemsResponse"
                },
                "example": {
  "success": true,
  "responseTime": 57
}
              }
            }
          },
          "400": {
            "description": "Bad Request",
            "headers": {
              "x-correlation-id": {
                "description": "The unique id identifying the original requests path through the Controlant systems. Callers should log this value to facilitate easier troubleshooting and incident resolution.",
                "schema": {
                  "type": "string"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/GenericInputValidationErrorResponse"
                },
                "example": {
  "errorMessage": "One or more validation errors occurred.",
  "status": 400,
  "errors": {
    "Reference": "'Reference' must not be empty.",
    "OriginReference": "'OriginReference' must not be empty.",
    "DestinationReference": "'DestinationReference' must not be empty."
  },
  "success": false,
  "responseTime": 0
}
              }
            }
          },
          "500": {
            "description": "Internal Server Error",
            "headers": {
              "x-correlation-id": {
                "description": "The unique id identifying the original requests path through the Controlant systems. Callers should log this value to facilitate easier troubleshooting and incident resolution.",
                "schema": {
                  "type": "string"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                },
                "example": {
  "errorMessage": "Unexpected error while processing request",
  "status": 500,
  "success": false,
  "responseTime": 150,
  "message": "Internal Error"
}
              }
            }
          }
        }
      }
    },
    "/api/ult/trade-items/get": {
      "post": {
        "tags": [
          "Trade Items"
        ],
        "summary": "Get Trade Item",
        "description": "<span class=\"addon-feature\">Managing trade items is an added value feature, please contact your Controlant account manager for further details.</span>Use this endpoint to get a trade item by it's GTIN and SerialNumber",
        "requestBody": {
          "description": "A Get Trade Item request",
          "content": {
            "application/json": {
              "schema": {
                "allOf": [
                  {
                    "$ref": "#/components/schemas/GetTradeItemRequest"
                  }
                ],
                "description": "A request to get a trade item from our platform"
              },
              "example": {
  "gtin": "12345678",
  "serialNumber": "AB-123-948Z"
}
            }
          }
        },
        "responses": {
          "200": {
            "description": "OK",
            "headers": {
              "x-correlation-id": {
                "description": "The unique id identifying the original requests path through the Controlant systems. Callers should log this value to facilitate easier troubleshooting and incident resolution.",
                "schema": {
                  "type": "string"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/GetTradeItemResponse"
                },
                "example": {
  "tradeItem": {
    "createdTime": "2026-03-11T06:17:04Z",
    "disabled": false,
    "currentState": "Active",
    "lastKnownLocationTime": "2026-03-11T06:14:04Z",
    "lastKnownLocationSource": "Scan",
    "unitLocation": {
      "description": "Fabricated location",
      "coordinate": {
        "latitude": 65.1234,
        "longitude": 12.4567,
        "accuracyInMeters": 100
      },
      "physical": {
        "country": "US",
        "state": "NM",
        "city": "Albuquerque",
        "postCode": "87108",
        "street": "6001 Central Avenue",
        "accuracyInMeters": 10
      }
    },
    "batchNumber": "54126",
    "expiryDate": "YYYY-09-11",
    "deviceId": "BCBB3E15-BDE7-4DE0-AF38-6282833D1BBB",
    "description": "Acetylsalicylic Acid",
    "dataAttributes": [
      {
        "applicationIdentifier": "11",
        "value": "YY0304"
      },
      {
        "applicationIdentifier": "17",
        "value": "YY0911"
      }
    ],
    "gtin": "05901234123457",
    "serialNumber": "ABC123456-SN"
  },
  "success": true,
  "responseTime": 57
}
              }
            }
          },
          "400": {
            "description": "Bad Request",
            "headers": {
              "x-correlation-id": {
                "description": "The unique id identifying the original requests path through the Controlant systems. Callers should log this value to facilitate easier troubleshooting and incident resolution.",
                "schema": {
                  "type": "string"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/GenericInputValidationErrorResponse"
                },
                "example": {
  "errorMessage": "One or more validation errors occurred.",
  "status": 400,
  "errors": {
    "Reference": "'Reference' must not be empty.",
    "OriginReference": "'OriginReference' must not be empty.",
    "DestinationReference": "'DestinationReference' must not be empty."
  },
  "success": false,
  "responseTime": 0
}
              }
            }
          },
          "500": {
            "description": "Internal Server Error",
            "headers": {
              "x-correlation-id": {
                "description": "The unique id identifying the original requests path through the Controlant systems. Callers should log this value to facilitate easier troubleshooting and incident resolution.",
                "schema": {
                  "type": "string"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                },
                "example": {
  "errorMessage": "Unexpected error while processing request",
  "status": 500,
  "success": false,
  "responseTime": 150,
  "message": "Internal Error"
}
              }
            }
          }
        }
      }
    },
    "/api/ult/trade-items/disable": {
      "post": {
        "tags": [
          "Trade Items"
        ],
        "summary": "Disable Trade Items",
        "description": "<span class=\"addon-feature\">Managing trade items is an added value feature, please contact your Controlant account manager for further details.</span>This endpoint is for disabling trade item. It sets their status to disabled.",
        "requestBody": {
          "description": "A Trade Item disable request",
          "content": {
            "application/json": {
              "schema": {
                "allOf": [
                  {
                    "$ref": "#/components/schemas/DisableTradeItemsRequest"
                  }
                ],
                "description": "A request to disable trade items in our platform"
              },
              "example": {
  "tradeItems": [
    {
      "gtin": "05901234123457",
      "serialNumber": "ABC123456-SN"
    }
  ]
}
            }
          }
        },
        "responses": {
          "200": {
            "description": "OK",
            "headers": {
              "x-correlation-id": {
                "description": "The unique id identifying the original requests path through the Controlant systems. Callers should log this value to facilitate easier troubleshooting and incident resolution.",
                "schema": {
                  "type": "string"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/DisableTradeItemsResponse"
                },
                "example": {
  "success": true,
  "responseTime": 57
}
              }
            }
          },
          "400": {
            "description": "Bad Request",
            "headers": {
              "x-correlation-id": {
                "description": "The unique id identifying the original requests path through the Controlant systems. Callers should log this value to facilitate easier troubleshooting and incident resolution.",
                "schema": {
                  "type": "string"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/GenericInputValidationErrorResponse"
                },
                "example": {
  "errorMessage": "One or more validation errors occurred.",
  "status": 400,
  "errors": {
    "Reference": "'Reference' must not be empty.",
    "OriginReference": "'OriginReference' must not be empty.",
    "DestinationReference": "'DestinationReference' must not be empty."
  },
  "success": false,
  "responseTime": 0
}
              }
            }
          },
          "500": {
            "description": "Internal Server Error",
            "headers": {
              "x-correlation-id": {
                "description": "The unique id identifying the original requests path through the Controlant systems. Callers should log this value to facilitate easier troubleshooting and incident resolution.",
                "schema": {
                  "type": "string"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                },
                "example": {
  "errorMessage": "Unexpected error while processing request",
  "status": 500,
  "success": false,
  "responseTime": 150,
  "message": "Internal Error"
}
              }
            }
          }
        }
      }
    }
  },
  "components": {
    "schemas": {
      "Alert": {
        "required": [
          "bounds",
          "dataType",
          "severity",
          "thresholdValue"
        ],
        "type": "object",
        "properties": {
          "bounds": {
            "minLength": 1,
            "enum": [
              "UpperBounds",
              "LowerBounds"
            ],
            "type": "string",
            "description": "Which bounds are being monitored (lower or upper). This controls how the logger\r\ndetermines if alerts are triggered based on the specified ```ThresholdValue```.<table><tr><th nowrap>Value</th><th>Description</th></tr><tr><td nowrap><code>UpperBounds</code></td><td>\n            The alert will trigger on values exceeding the threshold\n            </td></tr><tr><td nowrap><code>LowerBounds</code></td><td>\n            The alert will trigger on values falling below the threshold\n            </td></tr></table>"
          },
          "thresholdValue": {
            "maximum": 3000,
            "minimum": -2741,
            "type": "integer",
            "description": "The value that determines the alert threshold.\r\n<note>This value is specified in each ```DataType```'s minor units.\r\nE.g. for temperature data, it should be scaled up by 10 as only a single decimal value is supported for temperature.\r\n\nSee table below for a complete reference</note><remarks><table>\r\n  <tr>\r\n    <th>DataType</th>\r\n    <th>Minor unit multiplier</th>\r\n    <th>Temperature</th>\r\n    <th>ThresholdValue to use</th>\r\n  </tr>\r\n  <tr>\r\n    <td>\r\n      ```Temperature```\r\n    </td>\r\n    <td>10</td>\r\n    <td>37.5°C</td>\r\n    <td>375</td>\r\n  </tr>\r\n  <tr>\r\n    <td>\r\n      ```Temperature```\r\n    </td>\r\n    <td>10</td>\r\n    <td>-25.3°C</td>\r\n    <td>-253</td>\r\n  </tr>\r\n  <tr>\r\n    <td>\r\n      ```Temperature```\r\n    </td>\r\n    <td>10</td>\r\n    <td>0.3°C</td>\r\n    <td>3</td>\r\n  </tr>\r\n</table></remarks>",
            "format": "int32"
          },
          "dataType": {
            "minLength": 1,
            "enum": [
              "Temperature"
            ],
            "type": "string",
            "description": "The type of sensor data to alert on.\r\n<info>Currently only ```Temperature``` is available.</info><table><tr><th nowrap>Value</th><th>Description</th></tr><tr><td nowrap><code>Temperature</code></td><td>\n            The temperature of the logger in Celsius\n            </td></tr></table>"
          },
          "accumulativeTimeLimit": {
            "type": "integer",
            "description": "The limit in seconds divisible by 600 seconds (10 minute intervals) that this alert condition is allowed to be violated until it is triggered. If not specified, then a value of 600 will be assumed.<remarks>Example: Specify a value of 600 to delay a logger reporting an alert until the alert has been sustained for longer than 10 minutes</remarks>",
            "format": "int32"
          },
          "severity": {
            "minLength": 1,
            "enum": [
              "NoExcursion",
              "Level1",
              "Level2",
              "Level3"
            ],
            "type": "string",
            "description": "Signals the severity threshold reported when this alert is triggered.<table><tr><th nowrap>Value</th><th>Description</th></tr><tr><td nowrap><code>NoExcursion</code></td><td>\n            No excursion registered when alert is triggered.\n            </td></tr><tr><td nowrap><code>Level1</code></td><td>\n            Alert will raise a Low (Level 1) excursion critically when triggered.\n            </td></tr><tr><td nowrap><code>Level2</code></td><td>\n            Alert will raise a Medium (Level 2) excursion critically when triggered.\n            </td></tr><tr><td nowrap><code>Level3</code></td><td>\n            Alert will raise a High (Level 3) excursion critically when triggered.\n            </td></tr></table>"
          }
        },
        "additionalProperties": false,
        "description": "Defines an Alert that is defined within alert templates."
      },
      "AlertTemplateCreateRequest": {
        "required": [
          "alerts",
          "reference"
        ],
        "type": "object",
        "properties": {
          "reference": {
            "maxLength": 128,
            "minLength": 1,
            "type": "string",
            "description": "Customer supplied unique reference value that identifies this template."
          },
          "alerts": {
            "minItems": 1,
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/Alert"
            },
            "description": "List of alert boundaries and configurations."
          }
        },
        "additionalProperties": false,
        "description": "Defines an Alert Template"
      },
      "AnalysisExcursion": {
        "type": "object",
        "properties": {
          "timeStamp": {
            "type": "string",
            "description": "Time of the excursion.<span class=\"input-format\"> <a href=\"https://en.wikipedia.org/wiki/ISO_8601\" target=\"_blank\">Format: ISO 8601 (YYYY-MM-DDThh:mm:ssZ)</a></span>"
          },
          "severity": {
            "enum": [
              "NoExcursion",
              "Low",
              "Medium",
              "High"
            ],
            "type": "string",
            "description": "Excursion severity for the analysis.<table><tr><th nowrap>Value</th><th>Description</th></tr><tr><td nowrap><code>NoExcursion</code></td><td>\n            No excursion registered when alert is triggered.\n            </td></tr><tr><td nowrap><code>Low</code></td><td>\n            Low (Level 1) excursion severity.\n            </td></tr><tr><td nowrap><code>Medium</code></td><td>\n            Medium (Level 2) excursion severity.\n            </td></tr><tr><td nowrap><code>High</code></td><td>\n            High (Level 3) excursion severity.\n            </td></tr></table>"
          },
          "limit": {
            "type": "string",
            "description": "Description of excursion limit."
          },
          "timeLimit": {
            "type": "integer",
            "description": "The limit in seconds that this alert condition is allowed to be violated until it is triggered.",
            "format": "int32"
          },
          "timeOutOfLimits": {
            "type": "integer",
            "description": "Time in seconds that excursion is out of limit.",
            "format": "int32"
          },
          "triggered": {
            "type": "boolean",
            "description": "Has excursion been triggered.<remarks>True indicates that an excursion exceeded threshold.</remarks>"
          }
        },
        "additionalProperties": false,
        "description": "Defines analysis excursion"
      },
      "BaseResponse": {
        "type": "object",
        "properties": {
          "success": {
            "type": "boolean",
            "description": "Was the requested operation successful or not. If set to false please refer to the Message property for description of the error."
          },
          "responseTime": {
            "type": "integer",
            "description": "The time taken in milliseconds for processing of the request.",
            "format": "int64"
          },
          "message": {
            "type": "string",
            "description": "Text description of the ```Success``` return value."
          }
        },
        "additionalProperties": false,
        "description": "Defines a Base Response"
      },
      "BaseTemplateResponse": {
        "type": "object",
        "properties": {
          "templateReference": {
            "type": "string",
            "description": "The customer supplied unique reference value for the newly created template.\r\nThis value should be stored in the customer system and used when referring to this template in other API calls."
          },
          "success": {
            "type": "boolean",
            "description": "Was the requested operation successful or not. If set to false please refer to the Message property for description of the error."
          },
          "responseTime": {
            "type": "integer",
            "description": "The time taken in milliseconds for processing of the request.",
            "format": "int64"
          },
          "message": {
            "type": "string",
            "description": "Text description of the ```Success``` return value."
          }
        },
        "additionalProperties": false,
        "description": "Defines a Base Template Response"
      },
      "ButtonPressed": {
        "type": "object",
        "properties": {
          "state": {
            "enum": [
              "Stop",
              "Start"
            ],
            "type": "string",
            "description": "Indicates which button on the logger device was pressed.<table><tr><th nowrap>Value</th><th>Description</th></tr><tr><td nowrap><code>Stop</code></td><td>\n            The stop button\n            </td></tr><tr><td nowrap><code>Start</code></td><td>\n            The start button\n            </td></tr></table>"
          }
        },
        "additionalProperties": false,
        "description": "Defines a Button Pressed Event Payload"
      },
      "Contact": {
        "required": [
          "contactAddress",
          "contactType"
        ],
        "type": "object",
        "properties": {
          "contactType": {
            "minLength": 1,
            "enum": [
              "Email",
              "SMS"
            ],
            "type": "string",
            "description": "The contact type for this given contact entry.<table><tr><th nowrap>Value</th><th>Description</th></tr><tr><td nowrap><code>Email</code></td><td>\n            Contact through email only\n            </td></tr><tr><td nowrap><code>SMS</code></td><td>\n            Contact through SMS only\n            </td></tr></table>"
          },
          "contactAddress": {
            "maxLength": 64,
            "minLength": 1,
            "type": "string",
            "description": "The data to use for contacting (i.e. the email address or phone number)."
          },
          "deliveryEvent": {
            "enum": [
              "None",
              "Simple",
              "Reports"
            ],
            "type": "string",
            "description": "Configure the type of events that contacts want raised when shipments are delivered at destination.<table><tr><th nowrap>Value</th><th>Description</th></tr><tr><td nowrap><code>None</code></td><td>\n            No delivery events are sent to the contact\n            </td></tr><tr><td nowrap><code>Simple</code></td><td>\n            Only simple notifications are sent to the contact when the shipment is delivered\n            </td></tr><tr><td nowrap><code>Reports</code></td><td>\n            Complete delivery reports are sent to the contact when the shipment is delivered\n            </td></tr></table>"
          },
          "minimumSeverity": {
            "enum": [
              "None",
              "Level0",
              "Level1",
              "Level2",
              "Level3"
            ],
            "type": "string",
            "description": "The lowest severity level that this contact should be notified about.\r\nAll severities higher than this value are automatically included.<remarks>Example: Contact with MinimumSeverity set to 'Level 2' will get alerts for 'Level 2', 'Level 3'.</remarks><table><tr><th nowrap>Value</th><th>Description</th></tr><tr><td nowrap><code>None</code></td><td>\n            No alerts will be sent to the contact.\n            </td></tr><tr><td nowrap><code>Level0</code></td><td>\n            Alerts sent to the contact when loggers report a Notification (Severity 0 alert) or higher.\n            This is the lowest severity level setting and effectively includes all alerts for the logger devices.\n            </td></tr><tr><td nowrap><code>Level1</code></td><td>\n            Alerts sent to the contact when loggers report a Severity 1 alert or higher.\n            </td></tr><tr><td nowrap><code>Level2</code></td><td>\n            Alerts sent to the contact when loggers report a Severity 2 alert or higher.\n            </td></tr><tr><td nowrap><code>Level3</code></td><td>\n            Alerts sent to the contact when loggers report a Severity 3 alert.\n            </td></tr></table>"
          }
        },
        "additionalProperties": false,
        "description": "Defines a Contact"
      },
      "ContactTemplateCreateRequest": {
        "required": [
          "contacts",
          "reference"
        ],
        "type": "object",
        "properties": {
          "reference": {
            "maxLength": 128,
            "minLength": 1,
            "type": "string",
            "description": "Customer supplied unique reference value that identifies this template."
          },
          "contacts": {
            "maxItems": 100,
            "minItems": 1,
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/Contact"
            },
            "description": "List of contacts that should be notified and their communication medium if excursions occur during shipment."
          }
        },
        "additionalProperties": false,
        "description": "Defines a Contact Template"
      },
      "Coordinate": {
        "type": "object",
        "properties": {
          "latitude": {
            "type": "number",
            "description": "The latitude part of the coordinate.",
            "format": "double"
          },
          "longitude": {
            "type": "number",
            "description": "The longitude of the coordinate.",
            "format": "double"
          },
          "accuracyInMeters": {
            "type": "integer",
            "description": "The accuracy of the measurements represented in meters.",
            "format": "int32"
          }
        },
        "additionalProperties": false,
        "description": "Defines a coordinate"
      },
      "CreateTradeItemsRequest": {
        "type": "object",
        "properties": {
          "tradeItems": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/TradeItem"
            },
            "description": "A list of trade item to create"
          }
        },
        "additionalProperties": false,
        "description": "A request to create new trade items in our platform"
      },
      "CreateTradeItemsResponse": {
        "type": "object",
        "properties": {
          "success": {
            "type": "boolean",
            "description": "Was the requested operation successful or not. If set to false please refer to the Message property for description of the error."
          },
          "responseTime": {
            "type": "integer",
            "description": "The time taken in milliseconds for processing of the request.",
            "format": "int64"
          },
          "message": {
            "type": "string",
            "description": "Text description of the ```Success``` return value."
          }
        },
        "additionalProperties": false,
        "description": "A response for trade item creation"
      },
      "CustomProperty": {
        "required": [
          "name",
          "value"
        ],
        "type": "object",
        "properties": {
          "name": {
            "maxLength": 128,
            "minLength": 1,
            "type": "string",
            "description": "Name of the custom property."
          },
          "value": {
            "maxLength": 256,
            "minLength": 1,
            "type": "string",
            "description": "The value of the custom property."
          }
        },
        "additionalProperties": false,
        "description": "Defines a Custom Property"
      },
      "DataAttribute": {
        "type": "object",
        "properties": {
          "applicationIdentifier": {
            "type": "string",
            "description": "The GS1 Application Identifier for this entry. See <a href=\"https://www.gs1.org/standards/barcodes/application-identifiers\" target=\"_blank\">https://www.gs1.org/standards/barcodes/application-identifiers</a> for a list of valid AIs."
          },
          "value": {
            "type": "string",
            "description": "The value for this application identifier, excluding the application identifier prefix itself."
          }
        },
        "additionalProperties": false,
        "description": "Defines the Data Attributes for a Controlant.Integration.Contracts.UnitLevelTracking.TradeItems.TradeItem"
      },
      "DeleteTemplateRequest": {
        "required": [
          "reference",
          "type"
        ],
        "type": "object",
        "properties": {
          "reference": {
            "maxLength": 128,
            "minLength": 1,
            "type": "string",
            "description": "Customer supplied unique reference value that identifies this template."
          },
          "type": {
            "minLength": 1,
            "enum": [
              "Alert",
              "Contact",
              "Logger"
            ],
            "type": "string",
            "description": "The type of template to delete.<table><tr><th nowrap>Value</th><th>Description</th></tr><tr><td nowrap><code>Alert</code></td><td>\n            Alert template\n            </td></tr><tr><td nowrap><code>Contact</code></td><td>\n            Contact template\n            </td></tr><tr><td nowrap><code>Logger</code></td><td>\n            Logger template\n            </td></tr></table>"
          }
        },
        "additionalProperties": false,
        "description": "Defines a Delete Template Request"
      },
      "DisableTradeItemsRequest": {
        "required": [
          "tradeItems"
        ],
        "type": "object",
        "properties": {
          "tradeItems": {
            "minItems": 1,
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/TradeItemBase"
            },
            "description": "A list of trade item to disable"
          }
        },
        "additionalProperties": false,
        "description": "A request to disable trade items in our platform"
      },
      "DisableTradeItemsResponse": {
        "type": "object",
        "properties": {
          "success": {
            "type": "boolean",
            "description": "Was the requested operation successful or not. If set to false please refer to the Message property for description of the error."
          },
          "responseTime": {
            "type": "integer",
            "description": "The time taken in milliseconds for processing of the request.",
            "format": "int64"
          },
          "message": {
            "type": "string",
            "description": "Text description of the ```Success``` return value."
          }
        },
        "additionalProperties": false,
        "description": "A response for trade items being disabled"
      },
      "EchoRequest": {
        "required": [
          "reference"
        ],
        "type": "object",
        "properties": {
          "reference": {
            "maxLength": 128,
            "minLength": 1,
            "type": "string",
            "description": "A simple text value that is echoed back to the caller. Omit this field in the request to produce a 400 error.<remarks>To simulate the two possible server-side errors (500 and 504) then the special values ```\"500 Error\"```\r\nand ```\"504 Error\"``` can be specified in the ```Reference``` field.</remarks>"
          }
        },
        "additionalProperties": false,
        "description": "Defines an Echo Request"
      },
      "EchoResponse": {
        "type": "object",
        "properties": {
          "reference": {
            "type": "string",
            "description": "The original reference value that was passed in the echo request"
          },
          "success": {
            "type": "boolean",
            "description": "Was the requested operation successful or not. If set to false please refer to the Message property for description of the error."
          },
          "responseTime": {
            "type": "integer",
            "description": "The time taken in milliseconds for processing of the request.",
            "format": "int64"
          },
          "message": {
            "type": "string",
            "description": "Text description of the ```Success``` return value."
          }
        },
        "additionalProperties": false,
        "description": "Defines an Echo Response"
      },
      "ErrorResponse": {
        "type": "object",
        "properties": {
          "errorMessage": {
            "type": "string",
            "description": "Human readable text describing the error that occurred during the operation."
          },
          "status": {
            "type": "integer",
            "description": "The HTTP Status code associated with this error.",
            "format": "int32"
          },
          "errors": {
            "type": "object",
            "additionalProperties": {
              "type": "string",
              "nullable": true
            },
            "description": "Gets the errors associated with this instance."
          },
          "success": {
            "type": "boolean",
            "description": "Was the requested operation successful or not. If set to false please refer to the Message property for description of the error."
          },
          "responseTime": {
            "type": "integer",
            "description": "The time taken in milliseconds for processing of the request.",
            "format": "int64"
          },
          "message": {
            "type": "string",
            "description": "Text description of the ```Success``` return value."
          }
        },
        "additionalProperties": false,
        "description": "Defines an Error Response"
      },
      "EventDeliveryFailure": {
        "type": "object",
        "properties": {
          "deliveryReference": {
            "type": "string",
            "description": "A unique reference for a delivery"
          },
          "lastDeliveryAttempt": {
            "type": "string",
            "description": "The UTC timestamp of the last delivery attempt<span class=\"input-format\"> <a href=\"https://en.wikipedia.org/wiki/ISO_8601\" target=\"_blank\">Format: ISO 8601 (YYYY-MM-DDThh:mm:ssZ)</a></span>"
          },
          "numberOfDeliveryAttempts": {
            "type": "integer",
            "description": "Number of delivery attempts",
            "format": "int32"
          },
          "payload": {
            "type": "string",
            "description": "The event payload. The payload is a json string and is the exact same json data that was attempted to send to the event subscription delivery endpoint.\r\n<note>\r\nIn order to evaluate and use the payload information, it is necessary to deserialize the string as a json object, and take into account the schema of the\r\nparticular event payload.\r\n</note>"
          },
          "lastError": {
            "allOf": [
              {
                "$ref": "#/components/schemas/EventDeliveryFailureError"
              }
            ],
            "oneOf": [
              {
                "$ref": "#/components/schemas/EventDeliveryHttpFailureError"
              }
            ],
            "description": "The error associated with the last event delivery attempt"
          }
        },
        "additionalProperties": false,
        "description": "Event delivery failure information"
      },
      "EventDeliveryFailureError": {
        "type": "object",
        "properties": {
          "errorType": {
            "enum": [
              "HttpEndpoint"
            ],
            "type": "string",
            "description": "The error type for this error<table><tr><th nowrap>Value</th><th>Description</th></tr><tr><td nowrap><code>HttpEndpoint</code></td><td>\n            Event delivery to an Http Endpoint\n            </td></tr></table>",
            "readOnly": true
          }
        },
        "additionalProperties": false,
        "description": "An abstract class for an event delivery failure"
      },
      "EventDeliveryHttpFailureError": {
        "type": "object",
        "properties": {
          "errorCode": {
            "type": "integer",
            "description": "The error code is delivery dependent. For example, for event delivery to a webhook, this might be the HTTP status code of a request to the webhook.",
            "format": "int32"
          },
          "errorMessage": {
            "type": "string",
            "description": "An error message detailing the issue with the delivery. This message is delivery dependent and might be the error from the remote system."
          },
          "errorType": {
            "enum": [
              "HttpEndpoint"
            ],
            "type": "string",
            "description": "Event Delivery Error Types<table><tr><th nowrap>Value</th><th>Description</th></tr><tr><td nowrap><code>HttpEndpoint</code></td><td>\n            Event delivery to an Http Endpoint\n            </td></tr></table>",
            "readOnly": true
          }
        },
        "additionalProperties": false,
        "description": "The error for an event delivery failure"
      },
      "EventSubscriptionAuthenticationCreateRequest": {
        "required": [
          "reference",
          "type"
        ],
        "type": "object",
        "properties": {
          "reference": {
            "maxLength": 128,
            "minLength": 1,
            "type": "string",
            "description": "Customer supplied unique reference for this event subscription authentication."
          },
          "type": {
            "minLength": 1,
            "enum": [
              "Disabled",
              "BasicAuth"
            ],
            "type": "string",
            "description": "The authentication method is set to \"Disabled\" by default when creating a new event subscription.\r\nTo configure authentication, select the appropriate value from the below list.<table><tr><th nowrap>Value</th><th>Description</th></tr><tr><td nowrap><code>Disabled</code></td><td>\n            The default authentication method if nothing is selected. Disables any HTTP authentication for the endpoint URL.\n            </td></tr><tr><td nowrap><code>BasicAuth</code></td><td>\n            Basic Authentication (Basic Auth) allows users to provide the username and password associated with your HTTPS endpoint when setting up an event subscription\n            (this is not your Controlant username and password). When event subscription data is sent, the Basic Auth fields are included in the header of the HTTPS request.\n            </td></tr></table>"
          },
          "basicAuthUserName": {
            "maxLength": 128,
            "type": "string",
            "description": "The username to use when Basic Authentication is selected (this is not the same as your Controlant username)."
          },
          "basicAuthPassword": {
            "maxLength": 128,
            "minLength": 6,
            "type": "string",
            "description": "The password to use when Basic Authentication is selected (this is not the same as your Controlant password)."
          }
        },
        "additionalProperties": false,
        "description": "Defines an Event Subscription Authentication Create Request"
      },
      "EventSubscriptionAuthenticationCreateResponse": {
        "type": "object",
        "properties": {
          "authenticationReference": {
            "type": "string",
            "description": "Customer supplied unique reference for this event subscription authentication."
          },
          "success": {
            "type": "boolean",
            "description": "Was the requested operation successful or not. If set to false please refer to the Message property for description of the error."
          },
          "responseTime": {
            "type": "integer",
            "description": "The time taken in milliseconds for processing of the request.",
            "format": "int64"
          },
          "message": {
            "type": "string",
            "description": "Text description of the ```Success``` return value."
          }
        },
        "additionalProperties": false,
        "description": "Defines an Event Subscription Authentication Create Response"
      },
      "EventSubscriptionAuthenticationDeleteRequest": {
        "required": [
          "authenticationReference"
        ],
        "type": "object",
        "properties": {
          "authenticationReference": {
            "maxLength": 128,
            "minLength": 1,
            "type": "string",
            "description": "Customer supplied unique reference identifying the event subscription authentication to delete."
          }
        },
        "additionalProperties": false,
        "description": "Defines an Event Subscription Authentication Delete Request"
      },
      "EventSubscriptionAuthenticationDeleteResponse": {
        "type": "object",
        "properties": {
          "authenticationReference": {
            "type": "string",
            "description": "Customer supplied unique reference for the event subscription authentication that was deleted."
          },
          "success": {
            "type": "boolean",
            "description": "Was the requested operation successful or not. If set to false please refer to the Message property for description of the error."
          },
          "responseTime": {
            "type": "integer",
            "description": "The time taken in milliseconds for processing of the request.",
            "format": "int64"
          },
          "message": {
            "type": "string",
            "description": "Text description of the ```Success``` return value."
          }
        },
        "additionalProperties": false,
        "description": "Defines an Event Subscription Authentication Delete Response"
      },
      "EventSubscriptionCarrierMilestoneLocation": {
        "type": "object",
        "properties": {
          "city": {
            "type": "string",
            "description": "City of the tracking assignment."
          },
          "country": {
            "type": "string",
            "description": "Country/region of the tracking assignment."
          },
          "rawLocation": {
            "type": "string",
            "description": "Raw location information received from carrier."
          },
          "state": {
            "type": "string",
            "description": "State of the tracking assignment."
          },
          "zipCode": {
            "type": "string",
            "description": "ZIP code of the tracking assignment."
          }
        },
        "additionalProperties": false,
        "description": "Defines an Event Subscription Carrier Milestone Location"
      },
      "EventSubscriptionCarrierMilestonePublishedPayload": {
        "type": "object",
        "properties": {
          "shipmentReference": {
            "type": "string",
            "description": "Customer supplied unique reference value that identifies the shipment."
          },
          "courierCode": {
            "type": "string",
            "description": "Courier code uppercase string(e.g.\"UPS\", \"DHL\", \"FEDEX\" etc.)"
          },
          "originLocation": {
            "allOf": [
              {
                "$ref": "#/components/schemas/EventSubscriptionCarrierMilestoneLocation"
              }
            ],
            "description": "Origin Location Information"
          },
          "currentLocation": {
            "allOf": [
              {
                "$ref": "#/components/schemas/EventSubscriptionCarrierMilestoneLocation"
              }
            ],
            "description": "Current Location Information"
          },
          "destinationLocation": {
            "allOf": [
              {
                "$ref": "#/components/schemas/EventSubscriptionCarrierMilestoneLocation"
              }
            ],
            "description": "Destination Location Information"
          },
          "deliveryStatus": {
            "enum": [
              "AttemptFail",
              "AvailableForPickup",
              "Delivered",
              "Exception",
              "Expired",
              "InTransit",
              "InfoReceived",
              "OutForDelivery",
              "Pending",
              "Unknown"
            ],
            "type": "string",
            "description": "Current status of tracking assignment.<table><tr><th nowrap>Value</th><th>Description</th></tr><tr><td nowrap><code>AttemptFail</code></td><td>\n            Attempt has failed\n            </td></tr><tr><td nowrap><code>AvailableForPickup</code></td><td>\n            Available for pickup\n            </td></tr><tr><td nowrap><code>Delivered</code></td><td>\n            Delivered\n            </td></tr><tr><td nowrap><code>Exception</code></td><td>\n            Exception\n            </td></tr><tr><td nowrap><code>Expired</code></td><td>\n            Expired\n            </td></tr><tr><td nowrap><code>InTransit</code></td><td>\n            In transit\n            </td></tr><tr><td nowrap><code>InfoReceived</code></td><td>\n            Info received\n            </td></tr><tr><td nowrap><code>OutForDelivery</code></td><td>\n            Out for delivery\n            </td></tr><tr><td nowrap><code>Pending</code></td><td>\n            Pending\n            </td></tr><tr><td nowrap><code>Unknown</code></td><td>\n            Unknown\n            </td></tr></table>"
          },
          "deliverySubStatus": {
            "enum": [
              "AcceptanceScan",
              "ArrivalScan",
              "ArrivedAtDeliveryFacility",
              "ArrivedAtTheDestinationCountry",
              "AvailableForPickup",
              "CarrierAccountNotConnected",
              "CustomerContacted",
              "CustomerMoved",
              "CustomerRefusedDelivery",
              "CustomsClearanceCompleted",
              "CustomsClearanceStarted",
              "CustomsClearanceDelayed",
              "DeliveredSuccessfully",
              "DeliveryAppointmentScheduled",
              "DepartureScan",
              "Expired",
              "ExternalFactorsDelayed",
              "FailedAttempt",
              "ForwardedToDifferentDeliveryAddress",
              "HeldForPayment",
              "InTransit",
              "IncorrectAddress",
              "InfoReceived",
              "LabelCreatedNoUpdates",
              "LostOrDamaged",
              "NoInformation",
              "NoRecentUpdates",
              "OutForDelivery",
              "PickUpMissed",
              "PickedUpByCustomer",
              "ProblemResolvedAndShipmentInTransit",
              "ReadyForCollection",
              "RejectedByCarrier",
              "ReturnedToSender",
              "ReturningToSender",
              "ShippingException",
              "SignedByCustomer",
              "UnrecognizedCarrier",
              "WrongCarrier"
            ],
            "type": "string",
            "description": "Current sub-status of tracking assignment.<table><tr><th nowrap>Value</th><th>Description</th></tr><tr><td nowrap><code>AcceptanceScan</code></td><td>\n            Acceptance scan\n            </td></tr><tr><td nowrap><code>ArrivalScan</code></td><td>\n            Arrival scan\n            </td></tr><tr><td nowrap><code>ArrivedAtDeliveryFacility</code></td><td>\n            Arrived at delivered facility\n            </td></tr><tr><td nowrap><code>ArrivedAtTheDestinationCountry</code></td><td>\n            Arrived at the destination country\n            </td></tr><tr><td nowrap><code>AvailableForPickup</code></td><td>\n            Available for pickup\n            </td></tr><tr><td nowrap><code>CarrierAccountNotConnected</code></td><td>\n            Carrier account not connected\n            </td></tr><tr><td nowrap><code>CustomerContacted</code></td><td>\n            Customer contacted\n            </td></tr><tr><td nowrap><code>CustomerMoved</code></td><td>\n            Customer moved\n            </td></tr><tr><td nowrap><code>CustomerRefusedDelivery</code></td><td>\n            Customer refused delivery\n            </td></tr><tr><td nowrap><code>CustomsClearanceCompleted</code></td><td>\n            Customs clearance completed\n            </td></tr><tr><td nowrap><code>CustomsClearanceStarted</code></td><td>\n            Customs clearance started\n            </td></tr><tr><td nowrap><code>CustomsClearanceDelayed</code></td><td>\n            Customs clearance delayed\n            </td></tr><tr><td nowrap><code>DeliveredSuccessfully</code></td><td>\n            Delivered successfully\n            </td></tr><tr><td nowrap><code>DeliveryAppointmentScheduled</code></td><td>\n            Delivery appointment scheduled\n            </td></tr><tr><td nowrap><code>DepartureScan</code></td><td>\n            Departure scan\n            </td></tr><tr><td nowrap><code>Expired</code></td><td>\n            Expired\n            </td></tr><tr><td nowrap><code>ExternalFactorsDelayed</code></td><td>\n            External factors delayed\n            </td></tr><tr><td nowrap><code>FailedAttempt</code></td><td>\n            Failed attempt\n            </td></tr><tr><td nowrap><code>ForwardedToDifferentDeliveryAddress</code></td><td>\n            Forwarded to different delivery address\n            </td></tr><tr><td nowrap><code>HeldForPayment</code></td><td>\n            Held for payment\n            </td></tr><tr><td nowrap><code>InTransit</code></td><td>\n            In transit\n            </td></tr><tr><td nowrap><code>IncorrectAddress</code></td><td>\n            Incorrect address\n            </td></tr><tr><td nowrap><code>InfoReceived</code></td><td>\n            Info received\n            </td></tr><tr><td nowrap><code>LabelCreatedNoUpdates</code></td><td>\n            Label created, no updates\n            </td></tr><tr><td nowrap><code>LostOrDamaged</code></td><td>\n            Lost or damaged\n            </td></tr><tr><td nowrap><code>NoInformation</code></td><td>\n            No information\n            </td></tr><tr><td nowrap><code>NoRecentUpdates</code></td><td>\n            No recent updates\n            </td></tr><tr><td nowrap><code>OutForDelivery</code></td><td>\n            Out for delivery\n            </td></tr><tr><td nowrap><code>PickUpMissed</code></td><td>\n            Pickup missed\n            </td></tr><tr><td nowrap><code>PickedUpByCustomer</code></td><td>\n            Picked up by customer\n            </td></tr><tr><td nowrap><code>ProblemResolvedAndShipmentInTransit</code></td><td>\n            Problem resolved and shipment in transit\n            </td></tr><tr><td nowrap><code>ReadyForCollection</code></td><td>\n            Ready for collection\n            </td></tr><tr><td nowrap><code>RejectedByCarrier</code></td><td>\n            Rejected by carrier\n            </td></tr><tr><td nowrap><code>ReturnedToSender</code></td><td>\n            Returned to sender\n            </td></tr><tr><td nowrap><code>ReturningToSender</code></td><td>\n            Returning to sender\n            </td></tr><tr><td nowrap><code>ShippingException</code></td><td>\n            Shipping exception\n            </td></tr><tr><td nowrap><code>SignedByCustomer</code></td><td>\n            Signed by customer\n            </td></tr><tr><td nowrap><code>UnrecognizedCarrier</code></td><td>\n            Unrecognized carrier,\n            </td></tr><tr><td nowrap><code>WrongCarrier</code></td><td>\n            Wrong carrier\n            </td></tr></table>"
          },
          "description": {
            "type": "string",
            "description": "Represents a detailed view of what has happened in the event."
          },
          "eta": {
            "type": "string",
            "description": "Estimated delivery date of the tracking assignment.<span class=\"input-format\"> <a href=\"https://en.wikipedia.org/wiki/ISO_8601\" target=\"_blank\">Format: ISO 8601 (YYYY-MM-DDThh:mm:ssZ)</a></span>"
          },
          "milestoneCreated": {
            "type": "string",
            "description": "The date and time tracking assignment was updated.<span class=\"input-format\"> <a href=\"https://en.wikipedia.org/wiki/ISO_8601\" target=\"_blank\">Format: ISO 8601 (YYYY-MM-DDThh:mm:ssZ)</a></span>"
          },
          "referenceId": {
            "type": "string",
            "description": "The Reference ID provided by the service that created the Tracking Assignment. This could\r\nbe a UUID, a shipment reference, or any other identifier that the calling service wishes\r\nto use that uniquely identifies a resource within their domain."
          },
          "trackingNumber": {
            "type": "string",
            "description": "The shipment tracking number."
          }
        },
        "additionalProperties": false,
        "description": "Defines an Event Subscription Carrier Milestone Published Payload"
      },
      "EventSubscriptionCarrierMilestonePublishedPayloadEventSubscription": {
        "type": "object",
        "properties": {
          "deliveryId": {
            "type": "string",
            "description": "A <a href=\"https://en.wikipedia.org/wiki/Universally_unique_identifier\" target=\"_blank\">universally unique identifier</a> (UUID/GUID) for this event delivery attempt.<remarks>See this value in combination with the ```Reference``` field can be used to distinguish between different delivery attempts for the same event reference.</remarks>"
          },
          "attempt": {
            "type": "integer",
            "description": "An incremental number representing the delivery attempt. First delivery has a value of 1.",
            "format": "int32"
          },
          "reference": {
            "type": "string",
            "description": "Customer supplied unique reference for this event subscription."
          },
          "eventType": {
            "enum": [
              "shipment.report.created",
              "shipment.status.changed",
              "shipment.status.changed.ready",
              "shipment.status.changed.shipping",
              "shipment.status.changed.delivered",
              "shipment.status.changed.closed",
              "shipment.status.changed.deleted",
              "shipment.product.quality.changed",
              "shipment.logger.rearm",
              "shipment.logger.excursion.raised",
              "shipment.logger.button.pressed",
              "shipment.logger.status.changed",
              "shipment.logger.status.changed.shipping",
              "shipment.logger.status.changed.delivered",
              "shipment.logger.light.changed",
              "shipment.logger.geostatus.changed",
              "shipment.analysis.completed",
              "carrier.milestone.published",
              "shipment.data.temperatures.added",
              "shipment.data.geotraces.added"
            ],
            "type": "string",
            "description": "The type of the event.<table><tr><th nowrap>Value</th><th>Description</th></tr><tr><td nowrap><code>shipment.report.created</code></td><td>\n            Occurs whenever a new report is generated for the shipment\n            </td></tr><tr><td nowrap><code>shipment.status.changed</code></td><td>\n            Occurs whenever the status changes for the shipment\n            </td></tr><tr><td nowrap><code>shipment.status.changed.ready</code></td><td>\n            Occurs whenever shipment status is changed to ready (1)\n            </td></tr><tr><td nowrap><code>shipment.status.changed.shipping</code></td><td>\n            Occurs whenever shipment status is changed to shipping (1)\n            </td></tr><tr><td nowrap><code>shipment.status.changed.delivered</code></td><td>\n            Occurs whenever shipment status is changed to delivered (1)\n            </td></tr><tr><td nowrap><code>shipment.status.changed.closed</code></td><td>\n            Occurs whenever shipment status is changed to closed (1)\n            </td></tr><tr><td nowrap><code>shipment.status.changed.deleted</code></td><td>\n            Occurs whenever shipment status is changed to deleted (1)\n            </td></tr><tr><td nowrap><code>shipment.product.quality.changed</code></td><td>\n            Occurs whenever a product quality changes for the shipment\n            </td></tr><tr><td nowrap><code>shipment.logger.rearm</code></td><td>\n            Occurs when a logger should have its boundaries rearmed\n            </td></tr><tr><td nowrap><code>shipment.logger.excursion.raised</code></td><td>\n            Occurs when a logger sends a notification that an excursion was raised\n            </td></tr><tr><td nowrap><code>shipment.logger.button.pressed</code></td><td>\n            Occurs when a logger button is pressed\n            </td></tr><tr><td nowrap><code>shipment.logger.status.changed</code></td><td>\n            Occurs whenever shipment logger status is changed (2)\n            </td></tr><tr><td nowrap><code>shipment.logger.status.changed.shipping</code></td><td>\n            Occurs whenever shipment logger status is changed to shipping (3)\n            </td></tr><tr><td nowrap><code>shipment.logger.status.changed.delivered</code></td><td>\n            Occurs whenever shipment logger status is changed to delivered (3)\n            </td></tr><tr><td nowrap><code>shipment.logger.light.changed</code></td><td>\n            Occurs whenever the light on a logger changes\n            </td></tr><tr><td nowrap><code>shipment.logger.geostatus.changed</code></td><td>\n            Occurs whenever the geo status of a logger changes\n            </td></tr><tr><td nowrap><code>shipment.analysis.completed</code></td><td>\n            Occurs whenever a shipment analysis has completed\n            </td></tr><tr><td nowrap><code>carrier.milestone.published</code></td><td>\n            Occurs whenever a carrier milestone is published\n            </td></tr><tr><td nowrap><code>shipment.data.temperatures.added</code></td><td>\n            Occurs whenever shipment temperature data is added (Streaming)\n            </td></tr><tr><td nowrap><code>shipment.data.geotraces.added</code></td><td>\n            Occurs whenever shipment geo-trace data is added (Streaming)\n            </td></tr></table>"
          },
          "payload": {
            "allOf": [
              {
                "$ref": "#/components/schemas/EventSubscriptionCarrierMilestonePublishedPayload"
              }
            ],
            "description": "The data payload of the event subscription.<remarks>Use the value from the ```EventType``` field to determine how to de-serialize this data.</remarks>"
          },
          "payloadVersion": {
            "enum": [
              "latest",
              "1"
            ],
            "type": "string",
            "description": "The schema version of the data payload object.<table><tr><th nowrap>Value</th><th>Description</th></tr><tr><td nowrap><code>latest</code></td><td>\n            Explicitly request the latest version of the event subscription payload.\n            This should be the default unless you have explicit dependency on a particular\n            payload schema version.\n            </td></tr><tr><td nowrap><code>1</code></td><td>\n            Fixes the event subscription event payload schema to version 1.\n            </td></tr></table>"
          },
          "properties": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/CustomProperty"
            },
            "description": "List of customer defined properties that were supplied when the event subscription endpoint was created.\r\nThis structure can be useful for storing additional information about the event object in a structured format."
          },
          "mode": {
            "enum": [
              "Event",
              "Simulated"
            ],
            "type": "string",
            "description": "The mode that describes the triggering of the event subscription event. This indicates through what process this event\r\nwas raised. Use this to determine how to process the incoming events as some states may report duplicate or test events.<table><tr><th nowrap>Value</th><th>Description</th></tr><tr><td nowrap><code>Event</code></td><td>\n            The event was raised automatically by the Controlant integration system as a response\n            to an event in the platform.\n            </td></tr><tr><td nowrap><code>Simulated</code></td><td>\n            The event is a result of a simulation event request manually made through the Integration system by\n            a developer or an authorized user.\n            Simulated event payloads should be ignored in production environments.</td></tr></table>"
          },
          "environment": {
            "enum": [
              "Live",
              "UAT"
            ],
            "type": "string",
            "description": "Defines the environment that the event originated from.\r\n<warn>All non-LIVE event payloads should be ignored in production environments.</warn><table><tr><th nowrap>Value</th><th>Description</th></tr><tr><td nowrap><code>Live</code></td><td>\n            Event originated from the Controlant live production system.\n            Events generated by this environment should always be processed.\n            </td></tr><tr><td nowrap><code>UAT</code></td><td>\n            Event originated from the customer accessible Controlant User Acceptance Test environments.\n            </td></tr></table>"
          },
          "generated": {
            "type": "string",
            "description": "Timestamp when the event was generated by the Controlant platform.<span class=\"input-format\"> <a href=\"https://en.wikipedia.org/wiki/ISO_8601\" target=\"_blank\">Format: ISO 8601 (YYYY-MM-DDThh:mm:ssZ)</a></span>"
          }
        },
        "additionalProperties": false,
        "description": "Contains the data posted to the event subscription endpoints. Structure houses the event meta data such as fingerprints, times, type of payload and the payload itself"
      },
      "EventSubscriptionCertificateCreateRequest": {
        "required": [
          "certificateData",
          "certificateType",
          "reference"
        ],
        "type": "object",
        "properties": {
          "reference": {
            "maxLength": 128,
            "minLength": 1,
            "type": "string",
            "description": "Customer supplied unique reference for this event subscription certificate."
          },
          "certificateType": {
            "minLength": 1,
            "enum": [
              "PFX"
            ],
            "type": "string",
            "description": "Type and format of certificate data being used.<table><tr><th nowrap>Value</th><th>Description</th></tr><tr><td nowrap><code>PFX</code></td><td>\n            The certificate is a PKCS#12 or PFX binary format. Note that the PFX data must contain the server certificate, any intermediate certificates, and the private key in binary format as base64 encoded text.\n            </td></tr></table>"
          },
          "certificatePassword": {
            "maxLength": 128,
            "minLength": 6,
            "type": "string",
            "description": "An optional password to use with the Certificate. If your certificate is protected with a password or pass phrase,\r\nthen you need to provide that here, otherwise signing the requests to be sent to your endpoint will fail."
          },
          "certificateData": {
            "maxLength": 65535,
            "minLength": 1,
            "type": "string",
            "description": "A Base-64 encoded string containing data from a certificate file.\r\n<note>\r\n    This value must be a UTF-8, Base-64 encoded string and must not contain\r\n    any control characters such as line-break or carriage-return.\r\n</note><remarks>Simple example how to obtain a Base-64 encoded PFX file using a unix/linux terminal \n```cat mycert-and-password.pfx | base64``` (ensure you remove all control characters from the output if present).</remarks>"
          }
        },
        "additionalProperties": false,
        "description": "Defines an Event Subscription Certificate Create Request"
      },
      "EventSubscriptionCertificateCreateResponse": {
        "type": "object",
        "properties": {
          "certificateReference": {
            "type": "string",
            "description": "Customer supplied unique reference for this event subscription certificate."
          },
          "success": {
            "type": "boolean",
            "description": "Was the requested operation successful or not. If set to false please refer to the Message property for description of the error."
          },
          "responseTime": {
            "type": "integer",
            "description": "The time taken in milliseconds for processing of the request.",
            "format": "int64"
          },
          "message": {
            "type": "string",
            "description": "Text description of the ```Success``` return value."
          }
        },
        "additionalProperties": false,
        "description": "Defines an Event Subscription Certificate Create Response"
      },
      "EventSubscriptionCertificateDeleteRequest": {
        "required": [
          "certificateReference"
        ],
        "type": "object",
        "properties": {
          "certificateReference": {
            "maxLength": 128,
            "minLength": 1,
            "type": "string",
            "description": "Customer supplied unique reference for the event subscription certificate to delete."
          }
        },
        "additionalProperties": false,
        "description": "Defines an Event Subscription Delete Certificate Request"
      },
      "EventSubscriptionCertificateDeleteResponse": {
        "type": "object",
        "properties": {
          "certificateReference": {
            "type": "string",
            "description": "Customer supplied unique reference for the event subscription certificate that was deleted."
          },
          "success": {
            "type": "boolean",
            "description": "Was the requested operation successful or not. If set to false please refer to the Message property for description of the error."
          },
          "responseTime": {
            "type": "integer",
            "description": "The time taken in milliseconds for processing of the request.",
            "format": "int64"
          },
          "message": {
            "type": "string",
            "description": "Text description of the ```Success``` return value."
          }
        },
        "additionalProperties": false,
        "description": "Defines an Event Subscription Delete Certificate Response"
      },
      "EventSubscriptionCreateRequest": {
        "required": [
          "eventType",
          "reference",
          "secretToken",
          "url"
        ],
        "type": "object",
        "properties": {
          "reference": {
            "maxLength": 128,
            "minLength": 1,
            "type": "string",
            "description": "Customer supplied unique reference for this event subscription."
          },
          "url": {
            "maxLength": 256,
            "minLength": 1,
            "type": "string",
            "description": "A HTTPS secured URL of the customer-side event subscription endpoint that is ready to receive the event data. Note that this <b>must be a HTTPS secured URL</b>.\r\n<warn>\r\n    Your endpoint must respond to the callback with a <a href=\"https://developer.mozilla.org/en-US/docs/Web/HTTP/Status/200\" target=\"_blank\">200 http status code</a> within <b>2 seconds</b> or the delivery will be treated as a failure.\r\n    If for any reason, the callback endpoint Controlant is calling takes more than 5 seconds to respond, Controlant will retry the call immediately and it will do so 3 times before giving up. If the callback endpoint returns any value (200 or any other) within the 5 seconds, the call is NOT retried.\r\n</warn><remarks>All customer HTTPS endpoints must accept SSL certificates that are issued by an authority supported by the Amazon Root CAs. For more information see <a href=\"https://www.amazontrust.com/repository/\" target=\"_blank\">https://www.amazontrust.com/repository/</a>.\r\nException to this is if customers are using a custom self-signed request certificate via the ```Authentication.Certificate``` property.</remarks>"
          },
          "authenticationReference": {
            "maxLength": 128,
            "type": "string",
            "description": "Customer supplied unique reference for a previously created authentication via api/events/authentications/create.<remarks>While using an authentication method is optional, we strongly encourage our customers to configure one for their event subscriptions.\r\nThese measures increase the security of your event subscription event data and increases confidence that the event data delivered originates from Controlant.</remarks>"
          },
          "certificateReference": {
            "maxLength": 128,
            "type": "string",
            "description": "An optional reference to a previously created server certificate that will be used to sign the HTTPS payload requests coming from the Controlant platform.<remarks>This certificate needs to be registered with the Controlant platform via a call to api/events/certificates/create\r\nIf omitted then all requests will be signed with the default Controlant root certificate (signed by the Amazon Root CA 1 certificate) .</remarks>"
          },
          "secretToken": {
            "maxLength": 128,
            "minLength": 32,
            "type": "string",
            "description": "A secret token (or <a href=\"https://en.wikipedia.org/wiki/Salt_(cryptography)\" target=\"_blank\">salt</a>) that will be used to create a hash\r\nsignature with each payload to verify its authenticity.\r\n<note>The hash function used by the integration platform is SHA512 (64 byte output),\r\na good secret token should ideally be the same length as the output of the hash.</note><remarks>Customers must store the secret token they supplied when creating the event subscription if they intend to\r\n            verify the authenticity of the event data they receive.</remarks>"
          },
          "payloadVersion": {
            "enum": [
              "latest",
              "1"
            ],
            "type": "string",
            "description": "The explicitly requested schema version of the data payload object to deliver to the customer endpoint.<remarks>Leave this unset or set it to 'latest' to always receive the latest version of the event subscription event payload schema.\r\n<warn>Only configure this to a specific schema version after consulting with your account manager at Controlant.</warn></remarks><table><tr><th nowrap>Value</th><th>Description</th></tr><tr><td nowrap><code>latest</code></td><td>\n            Explicitly request the latest version of the event subscription payload.\n            This should be the default unless you have explicit dependency on a particular\n            payload schema version.\n            </td></tr><tr><td nowrap><code>1</code></td><td>\n            Fixes the event subscription event payload schema to version 1.\n            </td></tr></table>"
          },
          "eventType": {
            "minLength": 1,
            "enum": [
              "shipment.report.created",
              "shipment.status.changed",
              "shipment.status.changed.ready",
              "shipment.status.changed.shipping",
              "shipment.status.changed.delivered",
              "shipment.status.changed.closed",
              "shipment.status.changed.deleted",
              "shipment.product.quality.changed",
              "shipment.logger.rearm",
              "shipment.logger.excursion.raised",
              "shipment.logger.button.pressed",
              "shipment.logger.status.changed",
              "shipment.logger.status.changed.shipping",
              "shipment.logger.status.changed.delivered",
              "shipment.logger.light.changed",
              "shipment.logger.geostatus.changed",
              "shipment.analysis.completed",
              "carrier.milestone.published",
              "shipment.data.temperatures.added",
              "shipment.data.geotraces.added"
            ],
            "type": "string",
            "description": "The type of event subscription event that will be sent to the customer endpoint.\r\n<info>\nFor events marked with:\r\n\n(1) are sub-events of ```shipment.status.changed```\n(2) currently only the ```Shipping``` and ```Delivered``` status changes are reported via this event\r\n\n(3) are sub-events of ```shipment.logger.status.changed```</info><remarks><info>\r\n               For EventType values that represent streaming events (e.g. ```shipment.data.temperatures.added```, ```shipment.data.geotraces.added```), the API key must have the Event Streaming feature enabled.\r\n            </info></remarks><table><tr><th nowrap>Value</th><th>Description</th></tr><tr><td nowrap><code>shipment.report.created</code></td><td>\n            Occurs whenever a new report is generated for the shipment\n            </td></tr><tr><td nowrap><code>shipment.status.changed</code></td><td>\n            Occurs whenever the status changes for the shipment\n            </td></tr><tr><td nowrap><code>shipment.status.changed.ready</code></td><td>\n            Occurs whenever shipment status is changed to ready (1)\n            </td></tr><tr><td nowrap><code>shipment.status.changed.shipping</code></td><td>\n            Occurs whenever shipment status is changed to shipping (1)\n            </td></tr><tr><td nowrap><code>shipment.status.changed.delivered</code></td><td>\n            Occurs whenever shipment status is changed to delivered (1)\n            </td></tr><tr><td nowrap><code>shipment.status.changed.closed</code></td><td>\n            Occurs whenever shipment status is changed to closed (1)\n            </td></tr><tr><td nowrap><code>shipment.status.changed.deleted</code></td><td>\n            Occurs whenever shipment status is changed to deleted (1)\n            </td></tr><tr><td nowrap><code>shipment.product.quality.changed</code></td><td>\n            Occurs whenever a product quality changes for the shipment\n            </td></tr><tr><td nowrap><code>shipment.logger.rearm</code></td><td>\n            Occurs when a logger should have its boundaries rearmed\n            </td></tr><tr><td nowrap><code>shipment.logger.excursion.raised</code></td><td>\n            Occurs when a logger sends a notification that an excursion was raised\n            </td></tr><tr><td nowrap><code>shipment.logger.button.pressed</code></td><td>\n            Occurs when a logger button is pressed\n            </td></tr><tr><td nowrap><code>shipment.logger.status.changed</code></td><td>\n            Occurs whenever shipment logger status is changed (2)\n            </td></tr><tr><td nowrap><code>shipment.logger.status.changed.shipping</code></td><td>\n            Occurs whenever shipment logger status is changed to shipping (3)\n            </td></tr><tr><td nowrap><code>shipment.logger.status.changed.delivered</code></td><td>\n            Occurs whenever shipment logger status is changed to delivered (3)\n            </td></tr><tr><td nowrap><code>shipment.logger.light.changed</code></td><td>\n            Occurs whenever the light on a logger changes\n            </td></tr><tr><td nowrap><code>shipment.logger.geostatus.changed</code></td><td>\n            Occurs whenever the geo status of a logger changes\n            </td></tr><tr><td nowrap><code>shipment.analysis.completed</code></td><td>\n            Occurs whenever a shipment analysis has completed\n            </td></tr><tr><td nowrap><code>carrier.milestone.published</code></td><td>\n            Occurs whenever a carrier milestone is published\n            </td></tr><tr><td nowrap><code>shipment.data.temperatures.added</code></td><td>\n            Occurs whenever shipment temperature data is added (Streaming)\n            </td></tr><tr><td nowrap><code>shipment.data.geotraces.added</code></td><td>\n            Occurs whenever shipment geo-trace data is added (Streaming)\n            </td></tr></table>"
          },
          "description": {
            "maxLength": 256,
            "type": "string",
            "description": "An optional description of what the event subscription is used for."
          },
          "filters": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/EventSubscriptionFilter"
            },
            "description": "Optional filters that can be leveraged to limit the data transmitted to the event subscription endpoint.\r\nThis is useful in scenarios where customers might want to only publish a portion of their shipment information to a\r\n3rd party (such as a logistics provider) based on a value in a custom property assigned to the shipments."
          },
          "properties": {
            "maxItems": 1000,
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/CustomProperty"
            },
            "description": "List of customer defined properties that should be attached to the event subscription events that are raised for this subscription.\r\nThis can be useful for storing additional information about the event object in a structured format."
          },
          "retryPolicy": {
            "enum": [
              "Default",
              "Disabled",
              "ExponentialDelay",
              "IncrementalDelay"
            ],
            "type": "string",
            "description": "Enables the Controlant platform to handle transient failures in the Customer endpoint when\r\nattempting deliveries of event subscription payloads, by transparently retrying a failed delivery.<remarks>It is recommended to leave this as the default value as using retries can significantly\r\nimprove the stability of the integration.</remarks><table><tr><th nowrap>Value</th><th>Description</th></tr><tr><td nowrap><code>Default</code></td><td>\n            Use the default retry policy. The default policy is ExponentialDelay.\n            </td></tr><tr><td nowrap><code>Disabled</code></td><td>\n            No retry is attempted.\n            </td></tr><tr><td nowrap><code>ExponentialDelay</code></td><td>\n            Retries with an exponentially increasing delay between attempts.\n            </td></tr><tr><td nowrap><code>IncrementalDelay</code></td><td>\n            Retries with a fixed short delay between each attempt.\n            </td></tr></table>"
          }
        },
        "additionalProperties": false,
        "description": "Defines an Event Subscription Create Request"
      },
      "EventSubscriptionCreateResponse": {
        "type": "object",
        "properties": {
          "subscriptionReference": {
            "type": "string",
            "description": "Customer supplied unique reference for this event subscription."
          },
          "success": {
            "type": "boolean",
            "description": "Was the requested operation successful or not. If set to false please refer to the Message property for description of the error."
          },
          "responseTime": {
            "type": "integer",
            "description": "The time taken in milliseconds for processing of the request.",
            "format": "int64"
          },
          "message": {
            "type": "string",
            "description": "Text description of the ```Success``` return value."
          }
        },
        "additionalProperties": false,
        "description": "Defines an Event Subscription Create Response"
      },
      "EventSubscriptionDeleteRequest": {
        "required": [
          "subscriptionReference"
        ],
        "type": "object",
        "properties": {
          "subscriptionReference": {
            "maxLength": 128,
            "minLength": 1,
            "type": "string",
            "description": "Customer supplied unique reference for the event subscription to delete."
          }
        },
        "additionalProperties": false,
        "description": "Defines an Event Subscription Delete Request"
      },
      "EventSubscriptionDeleteResponse": {
        "type": "object",
        "properties": {
          "subscriptionReference": {
            "type": "string",
            "description": "Customer supplied unique reference for the event subscription that was deleted."
          },
          "success": {
            "type": "boolean",
            "description": "Was the requested operation successful or not. If set to false please refer to the Message property for description of the error."
          },
          "responseTime": {
            "type": "integer",
            "description": "The time taken in milliseconds for processing of the request.",
            "format": "int64"
          },
          "message": {
            "type": "string",
            "description": "Text description of the ```Success``` return value."
          }
        },
        "additionalProperties": false,
        "description": "Defines an Event Subscription Delete Response"
      },
      "EventSubscriptionDeliveryStatus": {
        "type": "object",
        "properties": {
          "subscriptionReference": {
            "type": "string",
            "description": "The unique reference of the event subscription"
          },
          "eventType": {
            "enum": [
              "shipment.report.created",
              "shipment.status.changed",
              "shipment.status.changed.ready",
              "shipment.status.changed.shipping",
              "shipment.status.changed.delivered",
              "shipment.status.changed.closed",
              "shipment.status.changed.deleted",
              "shipment.product.quality.changed",
              "shipment.logger.rearm",
              "shipment.logger.excursion.raised",
              "shipment.logger.button.pressed",
              "shipment.logger.status.changed",
              "shipment.logger.status.changed.shipping",
              "shipment.logger.status.changed.delivered",
              "shipment.logger.light.changed",
              "shipment.logger.geostatus.changed",
              "shipment.analysis.completed",
              "carrier.milestone.published",
              "shipment.data.temperatures.added",
              "shipment.data.geotraces.added"
            ],
            "type": "string",
            "description": "The event for which the event subscription is for<table><tr><th nowrap>Value</th><th>Description</th></tr><tr><td nowrap><code>shipment.report.created</code></td><td>\n            Occurs whenever a new report is generated for the shipment\n            </td></tr><tr><td nowrap><code>shipment.status.changed</code></td><td>\n            Occurs whenever the status changes for the shipment\n            </td></tr><tr><td nowrap><code>shipment.status.changed.ready</code></td><td>\n            Occurs whenever shipment status is changed to ready (1)\n            </td></tr><tr><td nowrap><code>shipment.status.changed.shipping</code></td><td>\n            Occurs whenever shipment status is changed to shipping (1)\n            </td></tr><tr><td nowrap><code>shipment.status.changed.delivered</code></td><td>\n            Occurs whenever shipment status is changed to delivered (1)\n            </td></tr><tr><td nowrap><code>shipment.status.changed.closed</code></td><td>\n            Occurs whenever shipment status is changed to closed (1)\n            </td></tr><tr><td nowrap><code>shipment.status.changed.deleted</code></td><td>\n            Occurs whenever shipment status is changed to deleted (1)\n            </td></tr><tr><td nowrap><code>shipment.product.quality.changed</code></td><td>\n            Occurs whenever a product quality changes for the shipment\n            </td></tr><tr><td nowrap><code>shipment.logger.rearm</code></td><td>\n            Occurs when a logger should have its boundaries rearmed\n            </td></tr><tr><td nowrap><code>shipment.logger.excursion.raised</code></td><td>\n            Occurs when a logger sends a notification that an excursion was raised\n            </td></tr><tr><td nowrap><code>shipment.logger.button.pressed</code></td><td>\n            Occurs when a logger button is pressed\n            </td></tr><tr><td nowrap><code>shipment.logger.status.changed</code></td><td>\n            Occurs whenever shipment logger status is changed (2)\n            </td></tr><tr><td nowrap><code>shipment.logger.status.changed.shipping</code></td><td>\n            Occurs whenever shipment logger status is changed to shipping (3)\n            </td></tr><tr><td nowrap><code>shipment.logger.status.changed.delivered</code></td><td>\n            Occurs whenever shipment logger status is changed to delivered (3)\n            </td></tr><tr><td nowrap><code>shipment.logger.light.changed</code></td><td>\n            Occurs whenever the light on a logger changes\n            </td></tr><tr><td nowrap><code>shipment.logger.geostatus.changed</code></td><td>\n            Occurs whenever the geo status of a logger changes\n            </td></tr><tr><td nowrap><code>shipment.analysis.completed</code></td><td>\n            Occurs whenever a shipment analysis has completed\n            </td></tr><tr><td nowrap><code>carrier.milestone.published</code></td><td>\n            Occurs whenever a carrier milestone is published\n            </td></tr><tr><td nowrap><code>shipment.data.temperatures.added</code></td><td>\n            Occurs whenever shipment temperature data is added (Streaming)\n            </td></tr><tr><td nowrap><code>shipment.data.geotraces.added</code></td><td>\n            Occurs whenever shipment geo-trace data is added (Streaming)\n            </td></tr></table>"
          },
          "counts": {
            "allOf": [
              {
                "$ref": "#/components/schemas/EventSubscriptionDeliveryStatusCounts"
              }
            ],
            "description": "Counts of event statuses for this subscription reference and timeframe"
          },
          "failedDeliveries": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/EventDeliveryFailure"
            },
            "description": "A list of failed deliveries."
          }
        },
        "additionalProperties": false,
        "description": "Defines the delivery status for a particular subscription reference"
      },
      "EventSubscriptionDeliveryStatusCounts": {
        "type": "object",
        "properties": {
          "pendingDeliveriesCount": {
            "type": "integer",
            "description": "The number of pending event deliveries",
            "format": "int32"
          },
          "failedDeliveriesCount": {
            "type": "integer",
            "description": "The number of failed event deliveries",
            "format": "int32"
          },
          "successfulDeliveriesCount": {
            "type": "integer",
            "description": "The number of successful event deliveries",
            "format": "int32"
          }
        },
        "additionalProperties": false,
        "description": "Event Delivery Status counts"
      },
      "EventSubscriptionDeliveryStatusRequest": {
        "required": [
          "fromDate",
          "toDate"
        ],
        "type": "object",
        "properties": {
          "subscriptionReference": {
            "type": "string",
            "description": "The customer supplied unique reference of the event subscription for which to receive status. \r\n<info>Can be omitted, in which case information on all active subscriptions is retrieved.</info>"
          },
          "fromDate": {
            "maxLength": 22,
            "minLength": 1,
            "type": "string",
            "description": "The oldest (starting) UTC timestamp from which the events will be provided, must be in ISO-8601 format.\r\nThe timestamp is in second granularity and is inclusive (i.e. 12:00:01 includes the 01 second).\r\n<note>The total timeframe between <code>fromDate</code> and <code>toDate</code> should not exceed 7 days</note><span class=\"input-format\"> <a href=\"https://en.wikipedia.org/wiki/ISO_8601\" target=\"_blank\">Format: ISO 8601 (YYYY-MM-DDThh:mm:ssZ)</a></span>"
          },
          "toDate": {
            "maxLength": 22,
            "minLength": 1,
            "type": "string",
            "description": "The latest (ending) UTC timestamp to which the event will be provided, must be in ISO-8601 format.\r\nThe timestamp is in second granularity and is exclusive  (i.e. 12:30:01 does not include the 1st second of the minute).\r\n<note>The total timeframe between <code>fromDate</code> and <code>toDate</code> should not exceed 7 days</note><span class=\"input-format\"> <a href=\"https://en.wikipedia.org/wiki/ISO_8601\" target=\"_blank\">Format: ISO 8601 (YYYY-MM-DDThh:mm:ssZ)</a></span>"
          },
          "paging": {
            "allOf": [
              {
                "$ref": "#/components/schemas/PagingRequest"
              }
            ],
            "description": "Paging to use for the request. May be omitted, in which case the default number of records is returned for the first page"
          }
        },
        "additionalProperties": false,
        "description": "Defines an Event Subscription Delivery Status Request"
      },
      "EventSubscriptionDeliveryStatusResponse": {
        "type": "object",
        "properties": {
          "statuses": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/EventSubscriptionDeliveryStatus"
            },
            "description": "The statuses of event deliveries"
          },
          "firstEventTimestamp": {
            "type": "string",
            "description": "The timestamp of the first event delivery encountered<span class=\"input-format\"> <a href=\"https://en.wikipedia.org/wiki/ISO_8601\" target=\"_blank\">Format: ISO 8601 (YYYY-MM-DDThh:mm:ssZ)</a></span>"
          },
          "lastEventTimestamp": {
            "type": "string",
            "description": "The timestamp of the last event delivery encountered<span class=\"input-format\"> <a href=\"https://en.wikipedia.org/wiki/ISO_8601\" target=\"_blank\">Format: ISO 8601 (YYYY-MM-DDThh:mm:ssZ)</a></span>"
          },
          "counts": {
            "allOf": [
              {
                "$ref": "#/components/schemas/EventSubscriptionDeliveryStatusCounts"
              }
            ],
            "description": "Total counts of event statuses"
          },
          "paging": {
            "allOf": [
              {
                "$ref": "#/components/schemas/PagingResponse"
              }
            ],
            "description": "The paging of the response"
          },
          "success": {
            "type": "boolean",
            "description": "Was the requested operation successful or not. If set to false please refer to the Message property for description of the error."
          },
          "responseTime": {
            "type": "integer",
            "description": "The time taken in milliseconds for processing of the request.",
            "format": "int64"
          },
          "message": {
            "type": "string",
            "description": "Text description of the ```Success``` return value."
          }
        },
        "additionalProperties": false,
        "description": "Defines an Event Subscription Delivery Status Response"
      },
      "EventSubscriptionFilter": {
        "required": [
          "mode",
          "propertyName",
          "value"
        ],
        "type": "object",
        "properties": {
          "propertyName": {
            "maxLength": 128,
            "minLength": 1,
            "type": "string",
            "description": "<p>\r\n                 The name of the custom property that should be filtered on. Filtering can be used for events to selectively omit or include (based on the Mode)\r\n                 certain payloads for delivery to a given endpoint. This is useful in situations where for example only a subset of shipment related messages\r\n                 should be communicated, in those cases customers can assign a custom property with certain values to their shipments that can then be used\r\n                 to filter on when shipment level events are raised.\r\n             </p>\r\n<p>\r\n                 Example: Customer A configures an event subscription to deliver shipment create events to one of their 3PL partners, however they only want\r\n                 shipments relevant to each partner to go to their systems. In this case Customer A can configure their integration to create shipments with a\r\n                 custom property (e.x. ```3PLName```) that contains the name of the 3PL partner. Customer A then configures a filter for each event\r\n                 subscription that instructs the Controlant system to only send events for that given 3PL partner\r\n                 (i.e. ```{PropertyName=\"3PLName\", Value=\"LogisticsCompany\", Mode=\"MustEqual\"}```</p><remarks>Note that filtering is performed only on the properties assigned to the data relevant to the event payload only\r\nand not on the properties assigned to the initial event subscription. This means that context for events such as for\r\nproducts assigned to shipments or shipment quality updates follow the properties assigned to the shipment object being manipulated.</remarks>"
          },
          "value": {
            "maxLength": 128,
            "minLength": 1,
            "type": "string",
            "description": "The value that the property value should be compared against."
          },
          "mode": {
            "minLength": 1,
            "enum": [
              "MustEqual",
              "MustNotEqual"
            ],
            "type": "string",
            "description": "Defines the mode of filtering for this property\r\n<note>All comparisons ignore the case of the text being compared in both the ```Value``` and ```Name``` fields (meaning that no distinction is made between upper and lower case letters).\r\nAdditionally, all white-spaces, tabs, line-feed and new-line characters are trimmed from the start and end of the text prior to all comparisons.</note><table><tr><th nowrap>Value</th><th>Description</th></tr><tr><td nowrap><code>MustEqual</code></td><td>\n            Includes only events that have a property value that exactly matches the given filter\n            </td></tr><tr><td nowrap><code>MustNotEqual</code></td><td>\n            Includes only events that have a property value that does not exactly match the given filter\n            </td></tr></table>"
          }
        },
        "additionalProperties": false,
        "description": "Defines an Event Subscription Filter"
      },
      "EventSubscriptionProductQualityChangedPayload": {
        "type": "object",
        "properties": {
          "shipmentReference": {
            "type": "string",
            "description": "Customer supplied unique reference value that identifies the shipment."
          },
          "productReference": {
            "type": "string",
            "description": "Customer supplied unique reference value that identifies the product."
          },
          "evaluationStatus": {
            "enum": [
              "WithinBudget",
              "ExceedsBudget",
              "Undecided"
            ],
            "type": "string",
            "description": "Stability budget evaluation status for the product.<table><tr><th nowrap>Value</th><th>Description</th></tr><tr><td nowrap><code>WithinBudget</code></td><td>\n            Stability budget is still remaining.\n            </td></tr><tr><td nowrap><code>ExceedsBudget</code></td><td>\n            Stability budget has been exceeded.\n            </td></tr><tr><td nowrap><code>Undecided</code></td><td>\n            Unable to evaluate stability budget consumption.\n            </td></tr></table>"
          },
          "qualityChangedTimeStamp": {
            "type": "string",
            "description": "The timestamp when the product quality changed.<span class=\"input-format\"> <a href=\"https://en.wikipedia.org/wiki/ISO_8601\" target=\"_blank\">Format: ISO 8601 (YYYY-MM-DDThh:mm:ssZ)</a></span>"
          }
        },
        "additionalProperties": false,
        "description": "Defines an Event Subscription Product Quality Changed Payload"
      },
      "EventSubscriptionProductQualityChangedPayloadEventSubscription": {
        "type": "object",
        "properties": {
          "deliveryId": {
            "type": "string",
            "description": "A <a href=\"https://en.wikipedia.org/wiki/Universally_unique_identifier\" target=\"_blank\">universally unique identifier</a> (UUID/GUID) for this event delivery attempt.<remarks>See this value in combination with the ```Reference``` field can be used to distinguish between different delivery attempts for the same event reference.</remarks>"
          },
          "attempt": {
            "type": "integer",
            "description": "An incremental number representing the delivery attempt. First delivery has a value of 1.",
            "format": "int32"
          },
          "reference": {
            "type": "string",
            "description": "Customer supplied unique reference for this event subscription."
          },
          "eventType": {
            "enum": [
              "shipment.report.created",
              "shipment.status.changed",
              "shipment.status.changed.ready",
              "shipment.status.changed.shipping",
              "shipment.status.changed.delivered",
              "shipment.status.changed.closed",
              "shipment.status.changed.deleted",
              "shipment.product.quality.changed",
              "shipment.logger.rearm",
              "shipment.logger.excursion.raised",
              "shipment.logger.button.pressed",
              "shipment.logger.status.changed",
              "shipment.logger.status.changed.shipping",
              "shipment.logger.status.changed.delivered",
              "shipment.logger.light.changed",
              "shipment.logger.geostatus.changed",
              "shipment.analysis.completed",
              "carrier.milestone.published",
              "shipment.data.temperatures.added",
              "shipment.data.geotraces.added"
            ],
            "type": "string",
            "description": "The type of the event.<table><tr><th nowrap>Value</th><th>Description</th></tr><tr><td nowrap><code>shipment.report.created</code></td><td>\n            Occurs whenever a new report is generated for the shipment\n            </td></tr><tr><td nowrap><code>shipment.status.changed</code></td><td>\n            Occurs whenever the status changes for the shipment\n            </td></tr><tr><td nowrap><code>shipment.status.changed.ready</code></td><td>\n            Occurs whenever shipment status is changed to ready (1)\n            </td></tr><tr><td nowrap><code>shipment.status.changed.shipping</code></td><td>\n            Occurs whenever shipment status is changed to shipping (1)\n            </td></tr><tr><td nowrap><code>shipment.status.changed.delivered</code></td><td>\n            Occurs whenever shipment status is changed to delivered (1)\n            </td></tr><tr><td nowrap><code>shipment.status.changed.closed</code></td><td>\n            Occurs whenever shipment status is changed to closed (1)\n            </td></tr><tr><td nowrap><code>shipment.status.changed.deleted</code></td><td>\n            Occurs whenever shipment status is changed to deleted (1)\n            </td></tr><tr><td nowrap><code>shipment.product.quality.changed</code></td><td>\n            Occurs whenever a product quality changes for the shipment\n            </td></tr><tr><td nowrap><code>shipment.logger.rearm</code></td><td>\n            Occurs when a logger should have its boundaries rearmed\n            </td></tr><tr><td nowrap><code>shipment.logger.excursion.raised</code></td><td>\n            Occurs when a logger sends a notification that an excursion was raised\n            </td></tr><tr><td nowrap><code>shipment.logger.button.pressed</code></td><td>\n            Occurs when a logger button is pressed\n            </td></tr><tr><td nowrap><code>shipment.logger.status.changed</code></td><td>\n            Occurs whenever shipment logger status is changed (2)\n            </td></tr><tr><td nowrap><code>shipment.logger.status.changed.shipping</code></td><td>\n            Occurs whenever shipment logger status is changed to shipping (3)\n            </td></tr><tr><td nowrap><code>shipment.logger.status.changed.delivered</code></td><td>\n            Occurs whenever shipment logger status is changed to delivered (3)\n            </td></tr><tr><td nowrap><code>shipment.logger.light.changed</code></td><td>\n            Occurs whenever the light on a logger changes\n            </td></tr><tr><td nowrap><code>shipment.logger.geostatus.changed</code></td><td>\n            Occurs whenever the geo status of a logger changes\n            </td></tr><tr><td nowrap><code>shipment.analysis.completed</code></td><td>\n            Occurs whenever a shipment analysis has completed\n            </td></tr><tr><td nowrap><code>carrier.milestone.published</code></td><td>\n            Occurs whenever a carrier milestone is published\n            </td></tr><tr><td nowrap><code>shipment.data.temperatures.added</code></td><td>\n            Occurs whenever shipment temperature data is added (Streaming)\n            </td></tr><tr><td nowrap><code>shipment.data.geotraces.added</code></td><td>\n            Occurs whenever shipment geo-trace data is added (Streaming)\n            </td></tr></table>"
          },
          "payload": {
            "allOf": [
              {
                "$ref": "#/components/schemas/EventSubscriptionProductQualityChangedPayload"
              }
            ],
            "description": "The data payload of the event subscription.<remarks>Use the value from the ```EventType``` field to determine how to de-serialize this data.</remarks>"
          },
          "payloadVersion": {
            "enum": [
              "latest",
              "1"
            ],
            "type": "string",
            "description": "The schema version of the data payload object.<table><tr><th nowrap>Value</th><th>Description</th></tr><tr><td nowrap><code>latest</code></td><td>\n            Explicitly request the latest version of the event subscription payload.\n            This should be the default unless you have explicit dependency on a particular\n            payload schema version.\n            </td></tr><tr><td nowrap><code>1</code></td><td>\n            Fixes the event subscription event payload schema to version 1.\n            </td></tr></table>"
          },
          "properties": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/CustomProperty"
            },
            "description": "List of customer defined properties that were supplied when the event subscription endpoint was created.\r\nThis structure can be useful for storing additional information about the event object in a structured format."
          },
          "mode": {
            "enum": [
              "Event",
              "Simulated"
            ],
            "type": "string",
            "description": "The mode that describes the triggering of the event subscription event. This indicates through what process this event\r\nwas raised. Use this to determine how to process the incoming events as some states may report duplicate or test events.<table><tr><th nowrap>Value</th><th>Description</th></tr><tr><td nowrap><code>Event</code></td><td>\n            The event was raised automatically by the Controlant integration system as a response\n            to an event in the platform.\n            </td></tr><tr><td nowrap><code>Simulated</code></td><td>\n            The event is a result of a simulation event request manually made through the Integration system by\n            a developer or an authorized user.\n            Simulated event payloads should be ignored in production environments.</td></tr></table>"
          },
          "environment": {
            "enum": [
              "Live",
              "UAT"
            ],
            "type": "string",
            "description": "Defines the environment that the event originated from.\r\n<warn>All non-LIVE event payloads should be ignored in production environments.</warn><table><tr><th nowrap>Value</th><th>Description</th></tr><tr><td nowrap><code>Live</code></td><td>\n            Event originated from the Controlant live production system.\n            Events generated by this environment should always be processed.\n            </td></tr><tr><td nowrap><code>UAT</code></td><td>\n            Event originated from the customer accessible Controlant User Acceptance Test environments.\n            </td></tr></table>"
          },
          "generated": {
            "type": "string",
            "description": "Timestamp when the event was generated by the Controlant platform.<span class=\"input-format\"> <a href=\"https://en.wikipedia.org/wiki/ISO_8601\" target=\"_blank\">Format: ISO 8601 (YYYY-MM-DDThh:mm:ssZ)</a></span>"
          }
        },
        "additionalProperties": false,
        "description": "Contains the data posted to the event subscription endpoints. Structure houses the event meta data such as fingerprints, times, type of payload and the payload itself"
      },
      "EventSubscriptionSearchRequest": {
        "type": "object",
        "properties": {
          "subscriptionReference": {
            "maxLength": 128,
            "type": "string",
            "description": "Optional, specify this to search for a specific event subscription by its customer supplied unique reference.\r\nIf this field is omitted or left empty then all registered event subscriptions are returned."
          }
        },
        "additionalProperties": false,
        "description": "Defines an Event Subscription Search Request"
      },
      "EventSubscriptionSearchResponse": {
        "type": "object",
        "properties": {
          "subscriptions": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/EventSubscriptionCreateRequest"
            },
            "description": "List of event subscriptions that matched the search conditions."
          },
          "subscriptionsCount": {
            "type": "integer",
            "description": "Number of event subscriptions that matched the search conditions.",
            "format": "int32"
          },
          "success": {
            "type": "boolean",
            "description": "Was the requested operation successful or not. If set to false please refer to the Message property for description of the error."
          },
          "responseTime": {
            "type": "integer",
            "description": "The time taken in milliseconds for processing of the request.",
            "format": "int64"
          },
          "message": {
            "type": "string",
            "description": "Text description of the ```Success``` return value."
          }
        },
        "additionalProperties": false,
        "description": "Defines an Event Subscription Search Response"
      },
      "EventSubscriptionShipmentAnalysisCompletedPayload": {
        "type": "object",
        "properties": {
          "shipmentReference": {
            "type": "string",
            "description": "Customer supplied unique reference value that identifies the shipment."
          },
          "result": {
            "enum": [
              "Unspecified",
              "Good",
              "Bad"
            ],
            "type": "string",
            "description": "Result of shipment analysis.<table><tr><th nowrap>Value</th><th>Description</th></tr><tr><td nowrap><code>Unspecified</code></td><td>\n            Shipment analysis results is unspecified\n            </td></tr><tr><td nowrap><code>Good</code></td><td>\n            Shipment analysis results in a good shipment\n            </td></tr><tr><td nowrap><code>Bad</code></td><td>\n            Shipment analysis results in a bad shipment\n            </td></tr></table>"
          }
        },
        "additionalProperties": false,
        "description": "Defines an Event Subscription Shipment Analysis Completed Payload"
      },
      "EventSubscriptionShipmentAnalysisCompletedPayloadEventSubscription": {
        "type": "object",
        "properties": {
          "deliveryId": {
            "type": "string",
            "description": "A <a href=\"https://en.wikipedia.org/wiki/Universally_unique_identifier\" target=\"_blank\">universally unique identifier</a> (UUID/GUID) for this event delivery attempt.<remarks>See this value in combination with the ```Reference``` field can be used to distinguish between different delivery attempts for the same event reference.</remarks>"
          },
          "attempt": {
            "type": "integer",
            "description": "An incremental number representing the delivery attempt. First delivery has a value of 1.",
            "format": "int32"
          },
          "reference": {
            "type": "string",
            "description": "Customer supplied unique reference for this event subscription."
          },
          "eventType": {
            "enum": [
              "shipment.report.created",
              "shipment.status.changed",
              "shipment.status.changed.ready",
              "shipment.status.changed.shipping",
              "shipment.status.changed.delivered",
              "shipment.status.changed.closed",
              "shipment.status.changed.deleted",
              "shipment.product.quality.changed",
              "shipment.logger.rearm",
              "shipment.logger.excursion.raised",
              "shipment.logger.button.pressed",
              "shipment.logger.status.changed",
              "shipment.logger.status.changed.shipping",
              "shipment.logger.status.changed.delivered",
              "shipment.logger.light.changed",
              "shipment.logger.geostatus.changed",
              "shipment.analysis.completed",
              "carrier.milestone.published",
              "shipment.data.temperatures.added",
              "shipment.data.geotraces.added"
            ],
            "type": "string",
            "description": "The type of the event.<table><tr><th nowrap>Value</th><th>Description</th></tr><tr><td nowrap><code>shipment.report.created</code></td><td>\n            Occurs whenever a new report is generated for the shipment\n            </td></tr><tr><td nowrap><code>shipment.status.changed</code></td><td>\n            Occurs whenever the status changes for the shipment\n            </td></tr><tr><td nowrap><code>shipment.status.changed.ready</code></td><td>\n            Occurs whenever shipment status is changed to ready (1)\n            </td></tr><tr><td nowrap><code>shipment.status.changed.shipping</code></td><td>\n            Occurs whenever shipment status is changed to shipping (1)\n            </td></tr><tr><td nowrap><code>shipment.status.changed.delivered</code></td><td>\n            Occurs whenever shipment status is changed to delivered (1)\n            </td></tr><tr><td nowrap><code>shipment.status.changed.closed</code></td><td>\n            Occurs whenever shipment status is changed to closed (1)\n            </td></tr><tr><td nowrap><code>shipment.status.changed.deleted</code></td><td>\n            Occurs whenever shipment status is changed to deleted (1)\n            </td></tr><tr><td nowrap><code>shipment.product.quality.changed</code></td><td>\n            Occurs whenever a product quality changes for the shipment\n            </td></tr><tr><td nowrap><code>shipment.logger.rearm</code></td><td>\n            Occurs when a logger should have its boundaries rearmed\n            </td></tr><tr><td nowrap><code>shipment.logger.excursion.raised</code></td><td>\n            Occurs when a logger sends a notification that an excursion was raised\n            </td></tr><tr><td nowrap><code>shipment.logger.button.pressed</code></td><td>\n            Occurs when a logger button is pressed\n            </td></tr><tr><td nowrap><code>shipment.logger.status.changed</code></td><td>\n            Occurs whenever shipment logger status is changed (2)\n            </td></tr><tr><td nowrap><code>shipment.logger.status.changed.shipping</code></td><td>\n            Occurs whenever shipment logger status is changed to shipping (3)\n            </td></tr><tr><td nowrap><code>shipment.logger.status.changed.delivered</code></td><td>\n            Occurs whenever shipment logger status is changed to delivered (3)\n            </td></tr><tr><td nowrap><code>shipment.logger.light.changed</code></td><td>\n            Occurs whenever the light on a logger changes\n            </td></tr><tr><td nowrap><code>shipment.logger.geostatus.changed</code></td><td>\n            Occurs whenever the geo status of a logger changes\n            </td></tr><tr><td nowrap><code>shipment.analysis.completed</code></td><td>\n            Occurs whenever a shipment analysis has completed\n            </td></tr><tr><td nowrap><code>carrier.milestone.published</code></td><td>\n            Occurs whenever a carrier milestone is published\n            </td></tr><tr><td nowrap><code>shipment.data.temperatures.added</code></td><td>\n            Occurs whenever shipment temperature data is added (Streaming)\n            </td></tr><tr><td nowrap><code>shipment.data.geotraces.added</code></td><td>\n            Occurs whenever shipment geo-trace data is added (Streaming)\n            </td></tr></table>"
          },
          "payload": {
            "allOf": [
              {
                "$ref": "#/components/schemas/EventSubscriptionShipmentAnalysisCompletedPayload"
              }
            ],
            "description": "The data payload of the event subscription.<remarks>Use the value from the ```EventType``` field to determine how to de-serialize this data.</remarks>"
          },
          "payloadVersion": {
            "enum": [
              "latest",
              "1"
            ],
            "type": "string",
            "description": "The schema version of the data payload object.<table><tr><th nowrap>Value</th><th>Description</th></tr><tr><td nowrap><code>latest</code></td><td>\n            Explicitly request the latest version of the event subscription payload.\n            This should be the default unless you have explicit dependency on a particular\n            payload schema version.\n            </td></tr><tr><td nowrap><code>1</code></td><td>\n            Fixes the event subscription event payload schema to version 1.\n            </td></tr></table>"
          },
          "properties": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/CustomProperty"
            },
            "description": "List of customer defined properties that were supplied when the event subscription endpoint was created.\r\nThis structure can be useful for storing additional information about the event object in a structured format."
          },
          "mode": {
            "enum": [
              "Event",
              "Simulated"
            ],
            "type": "string",
            "description": "The mode that describes the triggering of the event subscription event. This indicates through what process this event\r\nwas raised. Use this to determine how to process the incoming events as some states may report duplicate or test events.<table><tr><th nowrap>Value</th><th>Description</th></tr><tr><td nowrap><code>Event</code></td><td>\n            The event was raised automatically by the Controlant integration system as a response\n            to an event in the platform.\n            </td></tr><tr><td nowrap><code>Simulated</code></td><td>\n            The event is a result of a simulation event request manually made through the Integration system by\n            a developer or an authorized user.\n            Simulated event payloads should be ignored in production environments.</td></tr></table>"
          },
          "environment": {
            "enum": [
              "Live",
              "UAT"
            ],
            "type": "string",
            "description": "Defines the environment that the event originated from.\r\n<warn>All non-LIVE event payloads should be ignored in production environments.</warn><table><tr><th nowrap>Value</th><th>Description</th></tr><tr><td nowrap><code>Live</code></td><td>\n            Event originated from the Controlant live production system.\n            Events generated by this environment should always be processed.\n            </td></tr><tr><td nowrap><code>UAT</code></td><td>\n            Event originated from the customer accessible Controlant User Acceptance Test environments.\n            </td></tr></table>"
          },
          "generated": {
            "type": "string",
            "description": "Timestamp when the event was generated by the Controlant platform.<span class=\"input-format\"> <a href=\"https://en.wikipedia.org/wiki/ISO_8601\" target=\"_blank\">Format: ISO 8601 (YYYY-MM-DDThh:mm:ssZ)</a></span>"
          }
        },
        "additionalProperties": false,
        "description": "Contains the data posted to the event subscription endpoints. Structure houses the event meta data such as fingerprints, times, type of payload and the payload itself"
      },
      "EventSubscriptionShipmentDataGeoTracesAdded": {
        "type": "object",
        "properties": {
          "shipmentReference": {
            "type": "string",
            "description": "Customer supplied unique reference value that identifies the shipment."
          },
          "loggers": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/LoggerLocationTrace"
            },
            "description": "The geo-coordinates received by the loggers."
          }
        },
        "additionalProperties": false,
        "description": "Defines an Event Subscription Shipment Data Geo Traces Added"
      },
      "EventSubscriptionShipmentDataGeoTracesAddedPayload": {
        "type": "object",
        "properties": {
          "items": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/EventSubscriptionShipmentDataGeoTracesAdded"
            },
            "description": "Retrieves the collection of geo traces event data items"
          }
        },
        "additionalProperties": false,
        "description": "Defines an Event Subscription Shipment Data Geo Traces Added Payload"
      },
      "EventSubscriptionShipmentDataGeoTracesAddedPayloadEventSubscription": {
        "type": "object",
        "properties": {
          "deliveryId": {
            "type": "string",
            "description": "A <a href=\"https://en.wikipedia.org/wiki/Universally_unique_identifier\" target=\"_blank\">universally unique identifier</a> (UUID/GUID) for this event delivery attempt.<remarks>See this value in combination with the ```Reference``` field can be used to distinguish between different delivery attempts for the same event reference.</remarks>"
          },
          "attempt": {
            "type": "integer",
            "description": "An incremental number representing the delivery attempt. First delivery has a value of 1.",
            "format": "int32"
          },
          "reference": {
            "type": "string",
            "description": "Customer supplied unique reference for this event subscription."
          },
          "eventType": {
            "enum": [
              "shipment.report.created",
              "shipment.status.changed",
              "shipment.status.changed.ready",
              "shipment.status.changed.shipping",
              "shipment.status.changed.delivered",
              "shipment.status.changed.closed",
              "shipment.status.changed.deleted",
              "shipment.product.quality.changed",
              "shipment.logger.rearm",
              "shipment.logger.excursion.raised",
              "shipment.logger.button.pressed",
              "shipment.logger.status.changed",
              "shipment.logger.status.changed.shipping",
              "shipment.logger.status.changed.delivered",
              "shipment.logger.light.changed",
              "shipment.logger.geostatus.changed",
              "shipment.analysis.completed",
              "carrier.milestone.published",
              "shipment.data.temperatures.added",
              "shipment.data.geotraces.added"
            ],
            "type": "string",
            "description": "The type of the event.<table><tr><th nowrap>Value</th><th>Description</th></tr><tr><td nowrap><code>shipment.report.created</code></td><td>\n            Occurs whenever a new report is generated for the shipment\n            </td></tr><tr><td nowrap><code>shipment.status.changed</code></td><td>\n            Occurs whenever the status changes for the shipment\n            </td></tr><tr><td nowrap><code>shipment.status.changed.ready</code></td><td>\n            Occurs whenever shipment status is changed to ready (1)\n            </td></tr><tr><td nowrap><code>shipment.status.changed.shipping</code></td><td>\n            Occurs whenever shipment status is changed to shipping (1)\n            </td></tr><tr><td nowrap><code>shipment.status.changed.delivered</code></td><td>\n            Occurs whenever shipment status is changed to delivered (1)\n            </td></tr><tr><td nowrap><code>shipment.status.changed.closed</code></td><td>\n            Occurs whenever shipment status is changed to closed (1)\n            </td></tr><tr><td nowrap><code>shipment.status.changed.deleted</code></td><td>\n            Occurs whenever shipment status is changed to deleted (1)\n            </td></tr><tr><td nowrap><code>shipment.product.quality.changed</code></td><td>\n            Occurs whenever a product quality changes for the shipment\n            </td></tr><tr><td nowrap><code>shipment.logger.rearm</code></td><td>\n            Occurs when a logger should have its boundaries rearmed\n            </td></tr><tr><td nowrap><code>shipment.logger.excursion.raised</code></td><td>\n            Occurs when a logger sends a notification that an excursion was raised\n            </td></tr><tr><td nowrap><code>shipment.logger.button.pressed</code></td><td>\n            Occurs when a logger button is pressed\n            </td></tr><tr><td nowrap><code>shipment.logger.status.changed</code></td><td>\n            Occurs whenever shipment logger status is changed (2)\n            </td></tr><tr><td nowrap><code>shipment.logger.status.changed.shipping</code></td><td>\n            Occurs whenever shipment logger status is changed to shipping (3)\n            </td></tr><tr><td nowrap><code>shipment.logger.status.changed.delivered</code></td><td>\n            Occurs whenever shipment logger status is changed to delivered (3)\n            </td></tr><tr><td nowrap><code>shipment.logger.light.changed</code></td><td>\n            Occurs whenever the light on a logger changes\n            </td></tr><tr><td nowrap><code>shipment.logger.geostatus.changed</code></td><td>\n            Occurs whenever the geo status of a logger changes\n            </td></tr><tr><td nowrap><code>shipment.analysis.completed</code></td><td>\n            Occurs whenever a shipment analysis has completed\n            </td></tr><tr><td nowrap><code>carrier.milestone.published</code></td><td>\n            Occurs whenever a carrier milestone is published\n            </td></tr><tr><td nowrap><code>shipment.data.temperatures.added</code></td><td>\n            Occurs whenever shipment temperature data is added (Streaming)\n            </td></tr><tr><td nowrap><code>shipment.data.geotraces.added</code></td><td>\n            Occurs whenever shipment geo-trace data is added (Streaming)\n            </td></tr></table>"
          },
          "payload": {
            "allOf": [
              {
                "$ref": "#/components/schemas/EventSubscriptionShipmentDataGeoTracesAddedPayload"
              }
            ],
            "description": "The data payload of the event subscription.<remarks>Use the value from the ```EventType``` field to determine how to de-serialize this data.</remarks>"
          },
          "payloadVersion": {
            "enum": [
              "latest",
              "1"
            ],
            "type": "string",
            "description": "The schema version of the data payload object.<table><tr><th nowrap>Value</th><th>Description</th></tr><tr><td nowrap><code>latest</code></td><td>\n            Explicitly request the latest version of the event subscription payload.\n            This should be the default unless you have explicit dependency on a particular\n            payload schema version.\n            </td></tr><tr><td nowrap><code>1</code></td><td>\n            Fixes the event subscription event payload schema to version 1.\n            </td></tr></table>"
          },
          "properties": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/CustomProperty"
            },
            "description": "List of customer defined properties that were supplied when the event subscription endpoint was created.\r\nThis structure can be useful for storing additional information about the event object in a structured format."
          },
          "mode": {
            "enum": [
              "Event",
              "Simulated"
            ],
            "type": "string",
            "description": "The mode that describes the triggering of the event subscription event. This indicates through what process this event\r\nwas raised. Use this to determine how to process the incoming events as some states may report duplicate or test events.<table><tr><th nowrap>Value</th><th>Description</th></tr><tr><td nowrap><code>Event</code></td><td>\n            The event was raised automatically by the Controlant integration system as a response\n            to an event in the platform.\n            </td></tr><tr><td nowrap><code>Simulated</code></td><td>\n            The event is a result of a simulation event request manually made through the Integration system by\n            a developer or an authorized user.\n            Simulated event payloads should be ignored in production environments.</td></tr></table>"
          },
          "environment": {
            "enum": [
              "Live",
              "UAT"
            ],
            "type": "string",
            "description": "Defines the environment that the event originated from.\r\n<warn>All non-LIVE event payloads should be ignored in production environments.</warn><table><tr><th nowrap>Value</th><th>Description</th></tr><tr><td nowrap><code>Live</code></td><td>\n            Event originated from the Controlant live production system.\n            Events generated by this environment should always be processed.\n            </td></tr><tr><td nowrap><code>UAT</code></td><td>\n            Event originated from the customer accessible Controlant User Acceptance Test environments.\n            </td></tr></table>"
          },
          "generated": {
            "type": "string",
            "description": "Timestamp when the event was generated by the Controlant platform.<span class=\"input-format\"> <a href=\"https://en.wikipedia.org/wiki/ISO_8601\" target=\"_blank\">Format: ISO 8601 (YYYY-MM-DDThh:mm:ssZ)</a></span>"
          }
        },
        "additionalProperties": false,
        "description": "Contains the data posted to the event subscription endpoints. Structure houses the event meta data such as fingerprints, times, type of payload and the payload itself"
      },
      "EventSubscriptionShipmentDataTemperaturesAdded": {
        "type": "object",
        "properties": {
          "shipmentReference": {
            "type": "string",
            "description": "Customer supplied unique reference value that identifies the shipment."
          },
          "loggers": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/LoggerTemperatureMeasurement"
            },
            "description": "The temperature measurements received by the loggers."
          }
        },
        "additionalProperties": false,
        "description": "Defines an Event Subscription Shipment Data Temperatures Added Payload"
      },
      "EventSubscriptionShipmentDataTemperaturesAddedPayload": {
        "type": "object",
        "properties": {
          "items": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/EventSubscriptionShipmentDataTemperaturesAdded"
            },
            "description": "Retrieves the collection of temperature event data items"
          }
        },
        "additionalProperties": false,
        "description": "Defines an Event Subscription Shipment Data Temperatures Added Payload"
      },
      "EventSubscriptionShipmentDataTemperaturesAddedPayloadEventSubscription": {
        "type": "object",
        "properties": {
          "deliveryId": {
            "type": "string",
            "description": "A <a href=\"https://en.wikipedia.org/wiki/Universally_unique_identifier\" target=\"_blank\">universally unique identifier</a> (UUID/GUID) for this event delivery attempt.<remarks>See this value in combination with the ```Reference``` field can be used to distinguish between different delivery attempts for the same event reference.</remarks>"
          },
          "attempt": {
            "type": "integer",
            "description": "An incremental number representing the delivery attempt. First delivery has a value of 1.",
            "format": "int32"
          },
          "reference": {
            "type": "string",
            "description": "Customer supplied unique reference for this event subscription."
          },
          "eventType": {
            "enum": [
              "shipment.report.created",
              "shipment.status.changed",
              "shipment.status.changed.ready",
              "shipment.status.changed.shipping",
              "shipment.status.changed.delivered",
              "shipment.status.changed.closed",
              "shipment.status.changed.deleted",
              "shipment.product.quality.changed",
              "shipment.logger.rearm",
              "shipment.logger.excursion.raised",
              "shipment.logger.button.pressed",
              "shipment.logger.status.changed",
              "shipment.logger.status.changed.shipping",
              "shipment.logger.status.changed.delivered",
              "shipment.logger.light.changed",
              "shipment.logger.geostatus.changed",
              "shipment.analysis.completed",
              "carrier.milestone.published",
              "shipment.data.temperatures.added",
              "shipment.data.geotraces.added"
            ],
            "type": "string",
            "description": "The type of the event.<table><tr><th nowrap>Value</th><th>Description</th></tr><tr><td nowrap><code>shipment.report.created</code></td><td>\n            Occurs whenever a new report is generated for the shipment\n            </td></tr><tr><td nowrap><code>shipment.status.changed</code></td><td>\n            Occurs whenever the status changes for the shipment\n            </td></tr><tr><td nowrap><code>shipment.status.changed.ready</code></td><td>\n            Occurs whenever shipment status is changed to ready (1)\n            </td></tr><tr><td nowrap><code>shipment.status.changed.shipping</code></td><td>\n            Occurs whenever shipment status is changed to shipping (1)\n            </td></tr><tr><td nowrap><code>shipment.status.changed.delivered</code></td><td>\n            Occurs whenever shipment status is changed to delivered (1)\n            </td></tr><tr><td nowrap><code>shipment.status.changed.closed</code></td><td>\n            Occurs whenever shipment status is changed to closed (1)\n            </td></tr><tr><td nowrap><code>shipment.status.changed.deleted</code></td><td>\n            Occurs whenever shipment status is changed to deleted (1)\n            </td></tr><tr><td nowrap><code>shipment.product.quality.changed</code></td><td>\n            Occurs whenever a product quality changes for the shipment\n            </td></tr><tr><td nowrap><code>shipment.logger.rearm</code></td><td>\n            Occurs when a logger should have its boundaries rearmed\n            </td></tr><tr><td nowrap><code>shipment.logger.excursion.raised</code></td><td>\n            Occurs when a logger sends a notification that an excursion was raised\n            </td></tr><tr><td nowrap><code>shipment.logger.button.pressed</code></td><td>\n            Occurs when a logger button is pressed\n            </td></tr><tr><td nowrap><code>shipment.logger.status.changed</code></td><td>\n            Occurs whenever shipment logger status is changed (2)\n            </td></tr><tr><td nowrap><code>shipment.logger.status.changed.shipping</code></td><td>\n            Occurs whenever shipment logger status is changed to shipping (3)\n            </td></tr><tr><td nowrap><code>shipment.logger.status.changed.delivered</code></td><td>\n            Occurs whenever shipment logger status is changed to delivered (3)\n            </td></tr><tr><td nowrap><code>shipment.logger.light.changed</code></td><td>\n            Occurs whenever the light on a logger changes\n            </td></tr><tr><td nowrap><code>shipment.logger.geostatus.changed</code></td><td>\n            Occurs whenever the geo status of a logger changes\n            </td></tr><tr><td nowrap><code>shipment.analysis.completed</code></td><td>\n            Occurs whenever a shipment analysis has completed\n            </td></tr><tr><td nowrap><code>carrier.milestone.published</code></td><td>\n            Occurs whenever a carrier milestone is published\n            </td></tr><tr><td nowrap><code>shipment.data.temperatures.added</code></td><td>\n            Occurs whenever shipment temperature data is added (Streaming)\n            </td></tr><tr><td nowrap><code>shipment.data.geotraces.added</code></td><td>\n            Occurs whenever shipment geo-trace data is added (Streaming)\n            </td></tr></table>"
          },
          "payload": {
            "allOf": [
              {
                "$ref": "#/components/schemas/EventSubscriptionShipmentDataTemperaturesAddedPayload"
              }
            ],
            "description": "The data payload of the event subscription.<remarks>Use the value from the ```EventType``` field to determine how to de-serialize this data.</remarks>"
          },
          "payloadVersion": {
            "enum": [
              "latest",
              "1"
            ],
            "type": "string",
            "description": "The schema version of the data payload object.<table><tr><th nowrap>Value</th><th>Description</th></tr><tr><td nowrap><code>latest</code></td><td>\n            Explicitly request the latest version of the event subscription payload.\n            This should be the default unless you have explicit dependency on a particular\n            payload schema version.\n            </td></tr><tr><td nowrap><code>1</code></td><td>\n            Fixes the event subscription event payload schema to version 1.\n            </td></tr></table>"
          },
          "properties": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/CustomProperty"
            },
            "description": "List of customer defined properties that were supplied when the event subscription endpoint was created.\r\nThis structure can be useful for storing additional information about the event object in a structured format."
          },
          "mode": {
            "enum": [
              "Event",
              "Simulated"
            ],
            "type": "string",
            "description": "The mode that describes the triggering of the event subscription event. This indicates through what process this event\r\nwas raised. Use this to determine how to process the incoming events as some states may report duplicate or test events.<table><tr><th nowrap>Value</th><th>Description</th></tr><tr><td nowrap><code>Event</code></td><td>\n            The event was raised automatically by the Controlant integration system as a response\n            to an event in the platform.\n            </td></tr><tr><td nowrap><code>Simulated</code></td><td>\n            The event is a result of a simulation event request manually made through the Integration system by\n            a developer or an authorized user.\n            Simulated event payloads should be ignored in production environments.</td></tr></table>"
          },
          "environment": {
            "enum": [
              "Live",
              "UAT"
            ],
            "type": "string",
            "description": "Defines the environment that the event originated from.\r\n<warn>All non-LIVE event payloads should be ignored in production environments.</warn><table><tr><th nowrap>Value</th><th>Description</th></tr><tr><td nowrap><code>Live</code></td><td>\n            Event originated from the Controlant live production system.\n            Events generated by this environment should always be processed.\n            </td></tr><tr><td nowrap><code>UAT</code></td><td>\n            Event originated from the customer accessible Controlant User Acceptance Test environments.\n            </td></tr></table>"
          },
          "generated": {
            "type": "string",
            "description": "Timestamp when the event was generated by the Controlant platform.<span class=\"input-format\"> <a href=\"https://en.wikipedia.org/wiki/ISO_8601\" target=\"_blank\">Format: ISO 8601 (YYYY-MM-DDThh:mm:ssZ)</a></span>"
          }
        },
        "additionalProperties": false,
        "description": "Contains the data posted to the event subscription endpoints. Structure houses the event meta data such as fingerprints, times, type of payload and the payload itself"
      },
      "EventSubscriptionShipmentLoggerButtonPressedPayload": {
        "type": "object",
        "properties": {
          "buttonPressed": {
            "enum": [
              "Stop",
              "Start"
            ],
            "type": "string",
            "description": "Logger button pressed.<table><tr><th nowrap>Value</th><th>Description</th></tr><tr><td nowrap><code>Stop</code></td><td>\n            The stop button\n            </td></tr><tr><td nowrap><code>Start</code></td><td>\n            The start button\n            </td></tr></table>"
          },
          "timeStamp": {
            "type": "string",
            "description": "The time that the button was pressed on the logger.<span class=\"input-format\"> <a href=\"https://en.wikipedia.org/wiki/ISO_8601\" target=\"_blank\">Format: ISO 8601 (YYYY-MM-DDThh:mm:ssZ)</a></span>"
          },
          "shipmentReference": {
            "type": "string",
            "description": "Customer supplied unique reference value that identifies the shipment."
          },
          "loggerId": {
            "type": "string",
            "description": "The unique identifier (ID) of requested logger.\r\nThis is the barcode value in <a href=\"https://simple.wikipedia.org/wiki/Hexadecimal\" target=\"_blank\">Hexadecimal format</a>\r\nassigned to this logger from Controlant and is printed on one side of the logger along with the barcode.\r\n<note>\r\n\tEnsure that all possible scanner-device dependent end-of-input characters are stripped from the LoggerId.\r\n\tThis includes characters such as carriage return or new line.\r\n</note><remarks>The barcode printed on most Controlant loggers contain a common prefix <code>CMS</code>.\r\nThe loggerId submitted to the Integration platform can include this prefix if needed.\r\nNote that LoggerIds coming from the Controlant Platform will never include the <code>CMS</code> prefix.</remarks>"
          }
        },
        "additionalProperties": false,
        "description": "Defines an Event Subscription Shipment Logger Button Pressed Payload"
      },
      "EventSubscriptionShipmentLoggerButtonPressedPayloadEventSubscription": {
        "type": "object",
        "properties": {
          "deliveryId": {
            "type": "string",
            "description": "A <a href=\"https://en.wikipedia.org/wiki/Universally_unique_identifier\" target=\"_blank\">universally unique identifier</a> (UUID/GUID) for this event delivery attempt.<remarks>See this value in combination with the ```Reference``` field can be used to distinguish between different delivery attempts for the same event reference.</remarks>"
          },
          "attempt": {
            "type": "integer",
            "description": "An incremental number representing the delivery attempt. First delivery has a value of 1.",
            "format": "int32"
          },
          "reference": {
            "type": "string",
            "description": "Customer supplied unique reference for this event subscription."
          },
          "eventType": {
            "enum": [
              "shipment.report.created",
              "shipment.status.changed",
              "shipment.status.changed.ready",
              "shipment.status.changed.shipping",
              "shipment.status.changed.delivered",
              "shipment.status.changed.closed",
              "shipment.status.changed.deleted",
              "shipment.product.quality.changed",
              "shipment.logger.rearm",
              "shipment.logger.excursion.raised",
              "shipment.logger.button.pressed",
              "shipment.logger.status.changed",
              "shipment.logger.status.changed.shipping",
              "shipment.logger.status.changed.delivered",
              "shipment.logger.light.changed",
              "shipment.logger.geostatus.changed",
              "shipment.analysis.completed",
              "carrier.milestone.published",
              "shipment.data.temperatures.added",
              "shipment.data.geotraces.added"
            ],
            "type": "string",
            "description": "The type of the event.<table><tr><th nowrap>Value</th><th>Description</th></tr><tr><td nowrap><code>shipment.report.created</code></td><td>\n            Occurs whenever a new report is generated for the shipment\n            </td></tr><tr><td nowrap><code>shipment.status.changed</code></td><td>\n            Occurs whenever the status changes for the shipment\n            </td></tr><tr><td nowrap><code>shipment.status.changed.ready</code></td><td>\n            Occurs whenever shipment status is changed to ready (1)\n            </td></tr><tr><td nowrap><code>shipment.status.changed.shipping</code></td><td>\n            Occurs whenever shipment status is changed to shipping (1)\n            </td></tr><tr><td nowrap><code>shipment.status.changed.delivered</code></td><td>\n            Occurs whenever shipment status is changed to delivered (1)\n            </td></tr><tr><td nowrap><code>shipment.status.changed.closed</code></td><td>\n            Occurs whenever shipment status is changed to closed (1)\n            </td></tr><tr><td nowrap><code>shipment.status.changed.deleted</code></td><td>\n            Occurs whenever shipment status is changed to deleted (1)\n            </td></tr><tr><td nowrap><code>shipment.product.quality.changed</code></td><td>\n            Occurs whenever a product quality changes for the shipment\n            </td></tr><tr><td nowrap><code>shipment.logger.rearm</code></td><td>\n            Occurs when a logger should have its boundaries rearmed\n            </td></tr><tr><td nowrap><code>shipment.logger.excursion.raised</code></td><td>\n            Occurs when a logger sends a notification that an excursion was raised\n            </td></tr><tr><td nowrap><code>shipment.logger.button.pressed</code></td><td>\n            Occurs when a logger button is pressed\n            </td></tr><tr><td nowrap><code>shipment.logger.status.changed</code></td><td>\n            Occurs whenever shipment logger status is changed (2)\n            </td></tr><tr><td nowrap><code>shipment.logger.status.changed.shipping</code></td><td>\n            Occurs whenever shipment logger status is changed to shipping (3)\n            </td></tr><tr><td nowrap><code>shipment.logger.status.changed.delivered</code></td><td>\n            Occurs whenever shipment logger status is changed to delivered (3)\n            </td></tr><tr><td nowrap><code>shipment.logger.light.changed</code></td><td>\n            Occurs whenever the light on a logger changes\n            </td></tr><tr><td nowrap><code>shipment.logger.geostatus.changed</code></td><td>\n            Occurs whenever the geo status of a logger changes\n            </td></tr><tr><td nowrap><code>shipment.analysis.completed</code></td><td>\n            Occurs whenever a shipment analysis has completed\n            </td></tr><tr><td nowrap><code>carrier.milestone.published</code></td><td>\n            Occurs whenever a carrier milestone is published\n            </td></tr><tr><td nowrap><code>shipment.data.temperatures.added</code></td><td>\n            Occurs whenever shipment temperature data is added (Streaming)\n            </td></tr><tr><td nowrap><code>shipment.data.geotraces.added</code></td><td>\n            Occurs whenever shipment geo-trace data is added (Streaming)\n            </td></tr></table>"
          },
          "payload": {
            "allOf": [
              {
                "$ref": "#/components/schemas/EventSubscriptionShipmentLoggerButtonPressedPayload"
              }
            ],
            "description": "The data payload of the event subscription.<remarks>Use the value from the ```EventType``` field to determine how to de-serialize this data.</remarks>"
          },
          "payloadVersion": {
            "enum": [
              "latest",
              "1"
            ],
            "type": "string",
            "description": "The schema version of the data payload object.<table><tr><th nowrap>Value</th><th>Description</th></tr><tr><td nowrap><code>latest</code></td><td>\n            Explicitly request the latest version of the event subscription payload.\n            This should be the default unless you have explicit dependency on a particular\n            payload schema version.\n            </td></tr><tr><td nowrap><code>1</code></td><td>\n            Fixes the event subscription event payload schema to version 1.\n            </td></tr></table>"
          },
          "properties": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/CustomProperty"
            },
            "description": "List of customer defined properties that were supplied when the event subscription endpoint was created.\r\nThis structure can be useful for storing additional information about the event object in a structured format."
          },
          "mode": {
            "enum": [
              "Event",
              "Simulated"
            ],
            "type": "string",
            "description": "The mode that describes the triggering of the event subscription event. This indicates through what process this event\r\nwas raised. Use this to determine how to process the incoming events as some states may report duplicate or test events.<table><tr><th nowrap>Value</th><th>Description</th></tr><tr><td nowrap><code>Event</code></td><td>\n            The event was raised automatically by the Controlant integration system as a response\n            to an event in the platform.\n            </td></tr><tr><td nowrap><code>Simulated</code></td><td>\n            The event is a result of a simulation event request manually made through the Integration system by\n            a developer or an authorized user.\n            Simulated event payloads should be ignored in production environments.</td></tr></table>"
          },
          "environment": {
            "enum": [
              "Live",
              "UAT"
            ],
            "type": "string",
            "description": "Defines the environment that the event originated from.\r\n<warn>All non-LIVE event payloads should be ignored in production environments.</warn><table><tr><th nowrap>Value</th><th>Description</th></tr><tr><td nowrap><code>Live</code></td><td>\n            Event originated from the Controlant live production system.\n            Events generated by this environment should always be processed.\n            </td></tr><tr><td nowrap><code>UAT</code></td><td>\n            Event originated from the customer accessible Controlant User Acceptance Test environments.\n            </td></tr></table>"
          },
          "generated": {
            "type": "string",
            "description": "Timestamp when the event was generated by the Controlant platform.<span class=\"input-format\"> <a href=\"https://en.wikipedia.org/wiki/ISO_8601\" target=\"_blank\">Format: ISO 8601 (YYYY-MM-DDThh:mm:ssZ)</a></span>"
          }
        },
        "additionalProperties": false,
        "description": "Contains the data posted to the event subscription endpoints. Structure houses the event meta data such as fingerprints, times, type of payload and the payload itself"
      },
      "EventSubscriptionShipmentLoggerExcursionPayload": {
        "type": "object",
        "properties": {
          "alert": {
            "allOf": [
              {
                "$ref": "#/components/schemas/ExcursionAlert"
              }
            ],
            "description": "The alert that caused the excursion."
          },
          "excursionTimeStamp": {
            "type": "string",
            "description": "The time that the excursion was recorded.<span class=\"input-format\"> <a href=\"https://en.wikipedia.org/wiki/ISO_8601\" target=\"_blank\">Format: ISO 8601 (YYYY-MM-DDThh:mm:ssZ)</a></span>"
          },
          "shipmentReference": {
            "type": "string",
            "description": "Customer supplied unique reference value that identifies the shipment."
          },
          "loggerId": {
            "type": "string",
            "description": "The unique identifier (ID) of requested logger.\r\nThis is the barcode value in <a href=\"https://simple.wikipedia.org/wiki/Hexadecimal\" target=\"_blank\">Hexadecimal format</a>\r\nassigned to this logger from Controlant and is printed on one side of the logger along with the barcode.\r\n<note>\r\n\tEnsure that all possible scanner-device dependent end-of-input characters are stripped from the LoggerId.\r\n\tThis includes characters such as carriage return or new line.\r\n</note><remarks>The barcode printed on most Controlant loggers contain a common prefix <code>CMS</code>.\r\nThe loggerId submitted to the Integration platform can include this prefix if needed.\r\nNote that LoggerIds coming from the Controlant Platform will never include the <code>CMS</code> prefix.</remarks>"
          }
        },
        "additionalProperties": false,
        "description": "Defines an Event Subscription Shipment Logger Excursion Payload"
      },
      "EventSubscriptionShipmentLoggerExcursionPayloadEventSubscription": {
        "type": "object",
        "properties": {
          "deliveryId": {
            "type": "string",
            "description": "A <a href=\"https://en.wikipedia.org/wiki/Universally_unique_identifier\" target=\"_blank\">universally unique identifier</a> (UUID/GUID) for this event delivery attempt.<remarks>See this value in combination with the ```Reference``` field can be used to distinguish between different delivery attempts for the same event reference.</remarks>"
          },
          "attempt": {
            "type": "integer",
            "description": "An incremental number representing the delivery attempt. First delivery has a value of 1.",
            "format": "int32"
          },
          "reference": {
            "type": "string",
            "description": "Customer supplied unique reference for this event subscription."
          },
          "eventType": {
            "enum": [
              "shipment.report.created",
              "shipment.status.changed",
              "shipment.status.changed.ready",
              "shipment.status.changed.shipping",
              "shipment.status.changed.delivered",
              "shipment.status.changed.closed",
              "shipment.status.changed.deleted",
              "shipment.product.quality.changed",
              "shipment.logger.rearm",
              "shipment.logger.excursion.raised",
              "shipment.logger.button.pressed",
              "shipment.logger.status.changed",
              "shipment.logger.status.changed.shipping",
              "shipment.logger.status.changed.delivered",
              "shipment.logger.light.changed",
              "shipment.logger.geostatus.changed",
              "shipment.analysis.completed",
              "carrier.milestone.published",
              "shipment.data.temperatures.added",
              "shipment.data.geotraces.added"
            ],
            "type": "string",
            "description": "The type of the event.<table><tr><th nowrap>Value</th><th>Description</th></tr><tr><td nowrap><code>shipment.report.created</code></td><td>\n            Occurs whenever a new report is generated for the shipment\n            </td></tr><tr><td nowrap><code>shipment.status.changed</code></td><td>\n            Occurs whenever the status changes for the shipment\n            </td></tr><tr><td nowrap><code>shipment.status.changed.ready</code></td><td>\n            Occurs whenever shipment status is changed to ready (1)\n            </td></tr><tr><td nowrap><code>shipment.status.changed.shipping</code></td><td>\n            Occurs whenever shipment status is changed to shipping (1)\n            </td></tr><tr><td nowrap><code>shipment.status.changed.delivered</code></td><td>\n            Occurs whenever shipment status is changed to delivered (1)\n            </td></tr><tr><td nowrap><code>shipment.status.changed.closed</code></td><td>\n            Occurs whenever shipment status is changed to closed (1)\n            </td></tr><tr><td nowrap><code>shipment.status.changed.deleted</code></td><td>\n            Occurs whenever shipment status is changed to deleted (1)\n            </td></tr><tr><td nowrap><code>shipment.product.quality.changed</code></td><td>\n            Occurs whenever a product quality changes for the shipment\n            </td></tr><tr><td nowrap><code>shipment.logger.rearm</code></td><td>\n            Occurs when a logger should have its boundaries rearmed\n            </td></tr><tr><td nowrap><code>shipment.logger.excursion.raised</code></td><td>\n            Occurs when a logger sends a notification that an excursion was raised\n            </td></tr><tr><td nowrap><code>shipment.logger.button.pressed</code></td><td>\n            Occurs when a logger button is pressed\n            </td></tr><tr><td nowrap><code>shipment.logger.status.changed</code></td><td>\n            Occurs whenever shipment logger status is changed (2)\n            </td></tr><tr><td nowrap><code>shipment.logger.status.changed.shipping</code></td><td>\n            Occurs whenever shipment logger status is changed to shipping (3)\n            </td></tr><tr><td nowrap><code>shipment.logger.status.changed.delivered</code></td><td>\n            Occurs whenever shipment logger status is changed to delivered (3)\n            </td></tr><tr><td nowrap><code>shipment.logger.light.changed</code></td><td>\n            Occurs whenever the light on a logger changes\n            </td></tr><tr><td nowrap><code>shipment.logger.geostatus.changed</code></td><td>\n            Occurs whenever the geo status of a logger changes\n            </td></tr><tr><td nowrap><code>shipment.analysis.completed</code></td><td>\n            Occurs whenever a shipment analysis has completed\n            </td></tr><tr><td nowrap><code>carrier.milestone.published</code></td><td>\n            Occurs whenever a carrier milestone is published\n            </td></tr><tr><td nowrap><code>shipment.data.temperatures.added</code></td><td>\n            Occurs whenever shipment temperature data is added (Streaming)\n            </td></tr><tr><td nowrap><code>shipment.data.geotraces.added</code></td><td>\n            Occurs whenever shipment geo-trace data is added (Streaming)\n            </td></tr></table>"
          },
          "payload": {
            "allOf": [
              {
                "$ref": "#/components/schemas/EventSubscriptionShipmentLoggerExcursionPayload"
              }
            ],
            "description": "The data payload of the event subscription.<remarks>Use the value from the ```EventType``` field to determine how to de-serialize this data.</remarks>"
          },
          "payloadVersion": {
            "enum": [
              "latest",
              "1"
            ],
            "type": "string",
            "description": "The schema version of the data payload object.<table><tr><th nowrap>Value</th><th>Description</th></tr><tr><td nowrap><code>latest</code></td><td>\n            Explicitly request the latest version of the event subscription payload.\n            This should be the default unless you have explicit dependency on a particular\n            payload schema version.\n            </td></tr><tr><td nowrap><code>1</code></td><td>\n            Fixes the event subscription event payload schema to version 1.\n            </td></tr></table>"
          },
          "properties": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/CustomProperty"
            },
            "description": "List of customer defined properties that were supplied when the event subscription endpoint was created.\r\nThis structure can be useful for storing additional information about the event object in a structured format."
          },
          "mode": {
            "enum": [
              "Event",
              "Simulated"
            ],
            "type": "string",
            "description": "The mode that describes the triggering of the event subscription event. This indicates through what process this event\r\nwas raised. Use this to determine how to process the incoming events as some states may report duplicate or test events.<table><tr><th nowrap>Value</th><th>Description</th></tr><tr><td nowrap><code>Event</code></td><td>\n            The event was raised automatically by the Controlant integration system as a response\n            to an event in the platform.\n            </td></tr><tr><td nowrap><code>Simulated</code></td><td>\n            The event is a result of a simulation event request manually made through the Integration system by\n            a developer or an authorized user.\n            Simulated event payloads should be ignored in production environments.</td></tr></table>"
          },
          "environment": {
            "enum": [
              "Live",
              "UAT"
            ],
            "type": "string",
            "description": "Defines the environment that the event originated from.\r\n<warn>All non-LIVE event payloads should be ignored in production environments.</warn><table><tr><th nowrap>Value</th><th>Description</th></tr><tr><td nowrap><code>Live</code></td><td>\n            Event originated from the Controlant live production system.\n            Events generated by this environment should always be processed.\n            </td></tr><tr><td nowrap><code>UAT</code></td><td>\n            Event originated from the customer accessible Controlant User Acceptance Test environments.\n            </td></tr></table>"
          },
          "generated": {
            "type": "string",
            "description": "Timestamp when the event was generated by the Controlant platform.<span class=\"input-format\"> <a href=\"https://en.wikipedia.org/wiki/ISO_8601\" target=\"_blank\">Format: ISO 8601 (YYYY-MM-DDThh:mm:ssZ)</a></span>"
          }
        },
        "additionalProperties": false,
        "description": "Contains the data posted to the event subscription endpoints. Structure houses the event meta data such as fingerprints, times, type of payload and the payload itself"
      },
      "EventSubscriptionShipmentLoggerGeoStatusChangedPayload": {
        "type": "object",
        "properties": {
          "geoStatus": {
            "enum": [
              "AtOrigin",
              "EnRoute",
              "AtDestination"
            ],
            "type": "string",
            "description": "GeoStatus that the logger has entered<table><tr><th nowrap>Value</th><th>Description</th></tr><tr><td nowrap><code>AtOrigin</code></td><td>\n            At origin\n            </td></tr><tr><td nowrap><code>EnRoute</code></td><td>\n            En route\n            </td></tr><tr><td nowrap><code>AtDestination</code></td><td>\n            At destination\n            </td></tr></table>"
          },
          "timeStamp": {
            "type": "string",
            "description": "The time that the status changed<span class=\"input-format\"> <a href=\"https://en.wikipedia.org/wiki/ISO_8601\" target=\"_blank\">Format: ISO 8601 (YYYY-MM-DDThh:mm:ssZ)</a></span>"
          },
          "shipmentReference": {
            "type": "string",
            "description": "Customer supplied unique reference value that identifies the shipment."
          },
          "loggerId": {
            "type": "string",
            "description": "The unique identifier (ID) of requested logger.\r\nThis is the barcode value in <a href=\"https://simple.wikipedia.org/wiki/Hexadecimal\" target=\"_blank\">Hexadecimal format</a>\r\nassigned to this logger from Controlant and is printed on one side of the logger along with the barcode.\r\n<note>\r\n\tEnsure that all possible scanner-device dependent end-of-input characters are stripped from the LoggerId.\r\n\tThis includes characters such as carriage return or new line.\r\n</note><remarks>The barcode printed on most Controlant loggers contain a common prefix <code>CMS</code>.\r\nThe loggerId submitted to the Integration platform can include this prefix if needed.\r\nNote that LoggerIds coming from the Controlant Platform will never include the <code>CMS</code> prefix.</remarks>"
          }
        },
        "additionalProperties": false,
        "description": "Defines an Event Subscription Shipment Logger Geo Status Changed Payload"
      },
      "EventSubscriptionShipmentLoggerGeoStatusChangedPayloadEventSubscription": {
        "type": "object",
        "properties": {
          "deliveryId": {
            "type": "string",
            "description": "A <a href=\"https://en.wikipedia.org/wiki/Universally_unique_identifier\" target=\"_blank\">universally unique identifier</a> (UUID/GUID) for this event delivery attempt.<remarks>See this value in combination with the ```Reference``` field can be used to distinguish between different delivery attempts for the same event reference.</remarks>"
          },
          "attempt": {
            "type": "integer",
            "description": "An incremental number representing the delivery attempt. First delivery has a value of 1.",
            "format": "int32"
          },
          "reference": {
            "type": "string",
            "description": "Customer supplied unique reference for this event subscription."
          },
          "eventType": {
            "enum": [
              "shipment.report.created",
              "shipment.status.changed",
              "shipment.status.changed.ready",
              "shipment.status.changed.shipping",
              "shipment.status.changed.delivered",
              "shipment.status.changed.closed",
              "shipment.status.changed.deleted",
              "shipment.product.quality.changed",
              "shipment.logger.rearm",
              "shipment.logger.excursion.raised",
              "shipment.logger.button.pressed",
              "shipment.logger.status.changed",
              "shipment.logger.status.changed.shipping",
              "shipment.logger.status.changed.delivered",
              "shipment.logger.light.changed",
              "shipment.logger.geostatus.changed",
              "shipment.analysis.completed",
              "carrier.milestone.published",
              "shipment.data.temperatures.added",
              "shipment.data.geotraces.added"
            ],
            "type": "string",
            "description": "The type of the event.<table><tr><th nowrap>Value</th><th>Description</th></tr><tr><td nowrap><code>shipment.report.created</code></td><td>\n            Occurs whenever a new report is generated for the shipment\n            </td></tr><tr><td nowrap><code>shipment.status.changed</code></td><td>\n            Occurs whenever the status changes for the shipment\n            </td></tr><tr><td nowrap><code>shipment.status.changed.ready</code></td><td>\n            Occurs whenever shipment status is changed to ready (1)\n            </td></tr><tr><td nowrap><code>shipment.status.changed.shipping</code></td><td>\n            Occurs whenever shipment status is changed to shipping (1)\n            </td></tr><tr><td nowrap><code>shipment.status.changed.delivered</code></td><td>\n            Occurs whenever shipment status is changed to delivered (1)\n            </td></tr><tr><td nowrap><code>shipment.status.changed.closed</code></td><td>\n            Occurs whenever shipment status is changed to closed (1)\n            </td></tr><tr><td nowrap><code>shipment.status.changed.deleted</code></td><td>\n            Occurs whenever shipment status is changed to deleted (1)\n            </td></tr><tr><td nowrap><code>shipment.product.quality.changed</code></td><td>\n            Occurs whenever a product quality changes for the shipment\n            </td></tr><tr><td nowrap><code>shipment.logger.rearm</code></td><td>\n            Occurs when a logger should have its boundaries rearmed\n            </td></tr><tr><td nowrap><code>shipment.logger.excursion.raised</code></td><td>\n            Occurs when a logger sends a notification that an excursion was raised\n            </td></tr><tr><td nowrap><code>shipment.logger.button.pressed</code></td><td>\n            Occurs when a logger button is pressed\n            </td></tr><tr><td nowrap><code>shipment.logger.status.changed</code></td><td>\n            Occurs whenever shipment logger status is changed (2)\n            </td></tr><tr><td nowrap><code>shipment.logger.status.changed.shipping</code></td><td>\n            Occurs whenever shipment logger status is changed to shipping (3)\n            </td></tr><tr><td nowrap><code>shipment.logger.status.changed.delivered</code></td><td>\n            Occurs whenever shipment logger status is changed to delivered (3)\n            </td></tr><tr><td nowrap><code>shipment.logger.light.changed</code></td><td>\n            Occurs whenever the light on a logger changes\n            </td></tr><tr><td nowrap><code>shipment.logger.geostatus.changed</code></td><td>\n            Occurs whenever the geo status of a logger changes\n            </td></tr><tr><td nowrap><code>shipment.analysis.completed</code></td><td>\n            Occurs whenever a shipment analysis has completed\n            </td></tr><tr><td nowrap><code>carrier.milestone.published</code></td><td>\n            Occurs whenever a carrier milestone is published\n            </td></tr><tr><td nowrap><code>shipment.data.temperatures.added</code></td><td>\n            Occurs whenever shipment temperature data is added (Streaming)\n            </td></tr><tr><td nowrap><code>shipment.data.geotraces.added</code></td><td>\n            Occurs whenever shipment geo-trace data is added (Streaming)\n            </td></tr></table>"
          },
          "payload": {
            "allOf": [
              {
                "$ref": "#/components/schemas/EventSubscriptionShipmentLoggerGeoStatusChangedPayload"
              }
            ],
            "description": "The data payload of the event subscription.<remarks>Use the value from the ```EventType``` field to determine how to de-serialize this data.</remarks>"
          },
          "payloadVersion": {
            "enum": [
              "latest",
              "1"
            ],
            "type": "string",
            "description": "The schema version of the data payload object.<table><tr><th nowrap>Value</th><th>Description</th></tr><tr><td nowrap><code>latest</code></td><td>\n            Explicitly request the latest version of the event subscription payload.\n            This should be the default unless you have explicit dependency on a particular\n            payload schema version.\n            </td></tr><tr><td nowrap><code>1</code></td><td>\n            Fixes the event subscription event payload schema to version 1.\n            </td></tr></table>"
          },
          "properties": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/CustomProperty"
            },
            "description": "List of customer defined properties that were supplied when the event subscription endpoint was created.\r\nThis structure can be useful for storing additional information about the event object in a structured format."
          },
          "mode": {
            "enum": [
              "Event",
              "Simulated"
            ],
            "type": "string",
            "description": "The mode that describes the triggering of the event subscription event. This indicates through what process this event\r\nwas raised. Use this to determine how to process the incoming events as some states may report duplicate or test events.<table><tr><th nowrap>Value</th><th>Description</th></tr><tr><td nowrap><code>Event</code></td><td>\n            The event was raised automatically by the Controlant integration system as a response\n            to an event in the platform.\n            </td></tr><tr><td nowrap><code>Simulated</code></td><td>\n            The event is a result of a simulation event request manually made through the Integration system by\n            a developer or an authorized user.\n            Simulated event payloads should be ignored in production environments.</td></tr></table>"
          },
          "environment": {
            "enum": [
              "Live",
              "UAT"
            ],
            "type": "string",
            "description": "Defines the environment that the event originated from.\r\n<warn>All non-LIVE event payloads should be ignored in production environments.</warn><table><tr><th nowrap>Value</th><th>Description</th></tr><tr><td nowrap><code>Live</code></td><td>\n            Event originated from the Controlant live production system.\n            Events generated by this environment should always be processed.\n            </td></tr><tr><td nowrap><code>UAT</code></td><td>\n            Event originated from the customer accessible Controlant User Acceptance Test environments.\n            </td></tr></table>"
          },
          "generated": {
            "type": "string",
            "description": "Timestamp when the event was generated by the Controlant platform.<span class=\"input-format\"> <a href=\"https://en.wikipedia.org/wiki/ISO_8601\" target=\"_blank\">Format: ISO 8601 (YYYY-MM-DDThh:mm:ssZ)</a></span>"
          }
        },
        "additionalProperties": false,
        "description": "Contains the data posted to the event subscription endpoints. Structure houses the event meta data such as fingerprints, times, type of payload and the payload itself"
      },
      "EventSubscriptionShipmentLoggerLightPayload": {
        "type": "object",
        "properties": {
          "lightStatus": {
            "enum": [
              "Off",
              "On"
            ],
            "type": "string",
            "description": "Light status changed<table><tr><th nowrap>Value</th><th>Description</th></tr><tr><td nowrap><code>Off</code></td><td>\n            Light turned off\n            </td></tr><tr><td nowrap><code>On</code></td><td>\n            Light turned on\n            </td></tr></table>"
          },
          "timeStamp": {
            "type": "string",
            "description": "The time that the light changed on the logger<span class=\"input-format\"> <a href=\"https://en.wikipedia.org/wiki/ISO_8601\" target=\"_blank\">Format: ISO 8601 (YYYY-MM-DDThh:mm:ssZ)</a></span>"
          },
          "shipmentReference": {
            "type": "string",
            "description": "Customer supplied unique reference value that identifies the shipment."
          },
          "loggerId": {
            "type": "string",
            "description": "The unique identifier (ID) of requested logger.\r\nThis is the barcode value in <a href=\"https://simple.wikipedia.org/wiki/Hexadecimal\" target=\"_blank\">Hexadecimal format</a>\r\nassigned to this logger from Controlant and is printed on one side of the logger along with the barcode.\r\n<note>\r\n\tEnsure that all possible scanner-device dependent end-of-input characters are stripped from the LoggerId.\r\n\tThis includes characters such as carriage return or new line.\r\n</note><remarks>The barcode printed on most Controlant loggers contain a common prefix <code>CMS</code>.\r\nThe loggerId submitted to the Integration platform can include this prefix if needed.\r\nNote that LoggerIds coming from the Controlant Platform will never include the <code>CMS</code> prefix.</remarks>"
          }
        },
        "additionalProperties": false,
        "description": "Defines an Event Subscription Shipment Logger Light Payload"
      },
      "EventSubscriptionShipmentLoggerLightPayloadEventSubscription": {
        "type": "object",
        "properties": {
          "deliveryId": {
            "type": "string",
            "description": "A <a href=\"https://en.wikipedia.org/wiki/Universally_unique_identifier\" target=\"_blank\">universally unique identifier</a> (UUID/GUID) for this event delivery attempt.<remarks>See this value in combination with the ```Reference``` field can be used to distinguish between different delivery attempts for the same event reference.</remarks>"
          },
          "attempt": {
            "type": "integer",
            "description": "An incremental number representing the delivery attempt. First delivery has a value of 1.",
            "format": "int32"
          },
          "reference": {
            "type": "string",
            "description": "Customer supplied unique reference for this event subscription."
          },
          "eventType": {
            "enum": [
              "shipment.report.created",
              "shipment.status.changed",
              "shipment.status.changed.ready",
              "shipment.status.changed.shipping",
              "shipment.status.changed.delivered",
              "shipment.status.changed.closed",
              "shipment.status.changed.deleted",
              "shipment.product.quality.changed",
              "shipment.logger.rearm",
              "shipment.logger.excursion.raised",
              "shipment.logger.button.pressed",
              "shipment.logger.status.changed",
              "shipment.logger.status.changed.shipping",
              "shipment.logger.status.changed.delivered",
              "shipment.logger.light.changed",
              "shipment.logger.geostatus.changed",
              "shipment.analysis.completed",
              "carrier.milestone.published",
              "shipment.data.temperatures.added",
              "shipment.data.geotraces.added"
            ],
            "type": "string",
            "description": "The type of the event.<table><tr><th nowrap>Value</th><th>Description</th></tr><tr><td nowrap><code>shipment.report.created</code></td><td>\n            Occurs whenever a new report is generated for the shipment\n            </td></tr><tr><td nowrap><code>shipment.status.changed</code></td><td>\n            Occurs whenever the status changes for the shipment\n            </td></tr><tr><td nowrap><code>shipment.status.changed.ready</code></td><td>\n            Occurs whenever shipment status is changed to ready (1)\n            </td></tr><tr><td nowrap><code>shipment.status.changed.shipping</code></td><td>\n            Occurs whenever shipment status is changed to shipping (1)\n            </td></tr><tr><td nowrap><code>shipment.status.changed.delivered</code></td><td>\n            Occurs whenever shipment status is changed to delivered (1)\n            </td></tr><tr><td nowrap><code>shipment.status.changed.closed</code></td><td>\n            Occurs whenever shipment status is changed to closed (1)\n            </td></tr><tr><td nowrap><code>shipment.status.changed.deleted</code></td><td>\n            Occurs whenever shipment status is changed to deleted (1)\n            </td></tr><tr><td nowrap><code>shipment.product.quality.changed</code></td><td>\n            Occurs whenever a product quality changes for the shipment\n            </td></tr><tr><td nowrap><code>shipment.logger.rearm</code></td><td>\n            Occurs when a logger should have its boundaries rearmed\n            </td></tr><tr><td nowrap><code>shipment.logger.excursion.raised</code></td><td>\n            Occurs when a logger sends a notification that an excursion was raised\n            </td></tr><tr><td nowrap><code>shipment.logger.button.pressed</code></td><td>\n            Occurs when a logger button is pressed\n            </td></tr><tr><td nowrap><code>shipment.logger.status.changed</code></td><td>\n            Occurs whenever shipment logger status is changed (2)\n            </td></tr><tr><td nowrap><code>shipment.logger.status.changed.shipping</code></td><td>\n            Occurs whenever shipment logger status is changed to shipping (3)\n            </td></tr><tr><td nowrap><code>shipment.logger.status.changed.delivered</code></td><td>\n            Occurs whenever shipment logger status is changed to delivered (3)\n            </td></tr><tr><td nowrap><code>shipment.logger.light.changed</code></td><td>\n            Occurs whenever the light on a logger changes\n            </td></tr><tr><td nowrap><code>shipment.logger.geostatus.changed</code></td><td>\n            Occurs whenever the geo status of a logger changes\n            </td></tr><tr><td nowrap><code>shipment.analysis.completed</code></td><td>\n            Occurs whenever a shipment analysis has completed\n            </td></tr><tr><td nowrap><code>carrier.milestone.published</code></td><td>\n            Occurs whenever a carrier milestone is published\n            </td></tr><tr><td nowrap><code>shipment.data.temperatures.added</code></td><td>\n            Occurs whenever shipment temperature data is added (Streaming)\n            </td></tr><tr><td nowrap><code>shipment.data.geotraces.added</code></td><td>\n            Occurs whenever shipment geo-trace data is added (Streaming)\n            </td></tr></table>"
          },
          "payload": {
            "allOf": [
              {
                "$ref": "#/components/schemas/EventSubscriptionShipmentLoggerLightPayload"
              }
            ],
            "description": "The data payload of the event subscription.<remarks>Use the value from the ```EventType``` field to determine how to de-serialize this data.</remarks>"
          },
          "payloadVersion": {
            "enum": [
              "latest",
              "1"
            ],
            "type": "string",
            "description": "The schema version of the data payload object.<table><tr><th nowrap>Value</th><th>Description</th></tr><tr><td nowrap><code>latest</code></td><td>\n            Explicitly request the latest version of the event subscription payload.\n            This should be the default unless you have explicit dependency on a particular\n            payload schema version.\n            </td></tr><tr><td nowrap><code>1</code></td><td>\n            Fixes the event subscription event payload schema to version 1.\n            </td></tr></table>"
          },
          "properties": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/CustomProperty"
            },
            "description": "List of customer defined properties that were supplied when the event subscription endpoint was created.\r\nThis structure can be useful for storing additional information about the event object in a structured format."
          },
          "mode": {
            "enum": [
              "Event",
              "Simulated"
            ],
            "type": "string",
            "description": "The mode that describes the triggering of the event subscription event. This indicates through what process this event\r\nwas raised. Use this to determine how to process the incoming events as some states may report duplicate or test events.<table><tr><th nowrap>Value</th><th>Description</th></tr><tr><td nowrap><code>Event</code></td><td>\n            The event was raised automatically by the Controlant integration system as a response\n            to an event in the platform.\n            </td></tr><tr><td nowrap><code>Simulated</code></td><td>\n            The event is a result of a simulation event request manually made through the Integration system by\n            a developer or an authorized user.\n            Simulated event payloads should be ignored in production environments.</td></tr></table>"
          },
          "environment": {
            "enum": [
              "Live",
              "UAT"
            ],
            "type": "string",
            "description": "Defines the environment that the event originated from.\r\n<warn>All non-LIVE event payloads should be ignored in production environments.</warn><table><tr><th nowrap>Value</th><th>Description</th></tr><tr><td nowrap><code>Live</code></td><td>\n            Event originated from the Controlant live production system.\n            Events generated by this environment should always be processed.\n            </td></tr><tr><td nowrap><code>UAT</code></td><td>\n            Event originated from the customer accessible Controlant User Acceptance Test environments.\n            </td></tr></table>"
          },
          "generated": {
            "type": "string",
            "description": "Timestamp when the event was generated by the Controlant platform.<span class=\"input-format\"> <a href=\"https://en.wikipedia.org/wiki/ISO_8601\" target=\"_blank\">Format: ISO 8601 (YYYY-MM-DDThh:mm:ssZ)</a></span>"
          }
        },
        "additionalProperties": false,
        "description": "Contains the data posted to the event subscription endpoints. Structure houses the event meta data such as fingerprints, times, type of payload and the payload itself"
      },
      "EventSubscriptionShipmentLoggerRearmPayload": {
        "type": "object",
        "properties": {
          "alert": {
            "allOf": [
              {
                "$ref": "#/components/schemas/RearmAlert"
              }
            ],
            "description": "The alert for the logger that should be rearmed."
          },
          "shipmentReference": {
            "type": "string",
            "description": "Customer supplied unique reference value that identifies the shipment."
          },
          "loggerId": {
            "type": "string",
            "description": "The unique identifier (ID) of requested logger.\r\nThis is the barcode value in <a href=\"https://simple.wikipedia.org/wiki/Hexadecimal\" target=\"_blank\">Hexadecimal format</a>\r\nassigned to this logger from Controlant and is printed on one side of the logger along with the barcode.\r\n<note>\r\n\tEnsure that all possible scanner-device dependent end-of-input characters are stripped from the LoggerId.\r\n\tThis includes characters such as carriage return or new line.\r\n</note><remarks>The barcode printed on most Controlant loggers contain a common prefix <code>CMS</code>.\r\nThe loggerId submitted to the Integration platform can include this prefix if needed.\r\nNote that LoggerIds coming from the Controlant Platform will never include the <code>CMS</code> prefix.</remarks>"
          }
        },
        "additionalProperties": false,
        "description": "Defines an Event Subscription Shipment Logger Rearm Payload"
      },
      "EventSubscriptionShipmentLoggerRearmPayloadEventSubscription": {
        "type": "object",
        "properties": {
          "deliveryId": {
            "type": "string",
            "description": "A <a href=\"https://en.wikipedia.org/wiki/Universally_unique_identifier\" target=\"_blank\">universally unique identifier</a> (UUID/GUID) for this event delivery attempt.<remarks>See this value in combination with the ```Reference``` field can be used to distinguish between different delivery attempts for the same event reference.</remarks>"
          },
          "attempt": {
            "type": "integer",
            "description": "An incremental number representing the delivery attempt. First delivery has a value of 1.",
            "format": "int32"
          },
          "reference": {
            "type": "string",
            "description": "Customer supplied unique reference for this event subscription."
          },
          "eventType": {
            "enum": [
              "shipment.report.created",
              "shipment.status.changed",
              "shipment.status.changed.ready",
              "shipment.status.changed.shipping",
              "shipment.status.changed.delivered",
              "shipment.status.changed.closed",
              "shipment.status.changed.deleted",
              "shipment.product.quality.changed",
              "shipment.logger.rearm",
              "shipment.logger.excursion.raised",
              "shipment.logger.button.pressed",
              "shipment.logger.status.changed",
              "shipment.logger.status.changed.shipping",
              "shipment.logger.status.changed.delivered",
              "shipment.logger.light.changed",
              "shipment.logger.geostatus.changed",
              "shipment.analysis.completed",
              "carrier.milestone.published",
              "shipment.data.temperatures.added",
              "shipment.data.geotraces.added"
            ],
            "type": "string",
            "description": "The type of the event.<table><tr><th nowrap>Value</th><th>Description</th></tr><tr><td nowrap><code>shipment.report.created</code></td><td>\n            Occurs whenever a new report is generated for the shipment\n            </td></tr><tr><td nowrap><code>shipment.status.changed</code></td><td>\n            Occurs whenever the status changes for the shipment\n            </td></tr><tr><td nowrap><code>shipment.status.changed.ready</code></td><td>\n            Occurs whenever shipment status is changed to ready (1)\n            </td></tr><tr><td nowrap><code>shipment.status.changed.shipping</code></td><td>\n            Occurs whenever shipment status is changed to shipping (1)\n            </td></tr><tr><td nowrap><code>shipment.status.changed.delivered</code></td><td>\n            Occurs whenever shipment status is changed to delivered (1)\n            </td></tr><tr><td nowrap><code>shipment.status.changed.closed</code></td><td>\n            Occurs whenever shipment status is changed to closed (1)\n            </td></tr><tr><td nowrap><code>shipment.status.changed.deleted</code></td><td>\n            Occurs whenever shipment status is changed to deleted (1)\n            </td></tr><tr><td nowrap><code>shipment.product.quality.changed</code></td><td>\n            Occurs whenever a product quality changes for the shipment\n            </td></tr><tr><td nowrap><code>shipment.logger.rearm</code></td><td>\n            Occurs when a logger should have its boundaries rearmed\n            </td></tr><tr><td nowrap><code>shipment.logger.excursion.raised</code></td><td>\n            Occurs when a logger sends a notification that an excursion was raised\n            </td></tr><tr><td nowrap><code>shipment.logger.button.pressed</code></td><td>\n            Occurs when a logger button is pressed\n            </td></tr><tr><td nowrap><code>shipment.logger.status.changed</code></td><td>\n            Occurs whenever shipment logger status is changed (2)\n            </td></tr><tr><td nowrap><code>shipment.logger.status.changed.shipping</code></td><td>\n            Occurs whenever shipment logger status is changed to shipping (3)\n            </td></tr><tr><td nowrap><code>shipment.logger.status.changed.delivered</code></td><td>\n            Occurs whenever shipment logger status is changed to delivered (3)\n            </td></tr><tr><td nowrap><code>shipment.logger.light.changed</code></td><td>\n            Occurs whenever the light on a logger changes\n            </td></tr><tr><td nowrap><code>shipment.logger.geostatus.changed</code></td><td>\n            Occurs whenever the geo status of a logger changes\n            </td></tr><tr><td nowrap><code>shipment.analysis.completed</code></td><td>\n            Occurs whenever a shipment analysis has completed\n            </td></tr><tr><td nowrap><code>carrier.milestone.published</code></td><td>\n            Occurs whenever a carrier milestone is published\n            </td></tr><tr><td nowrap><code>shipment.data.temperatures.added</code></td><td>\n            Occurs whenever shipment temperature data is added (Streaming)\n            </td></tr><tr><td nowrap><code>shipment.data.geotraces.added</code></td><td>\n            Occurs whenever shipment geo-trace data is added (Streaming)\n            </td></tr></table>"
          },
          "payload": {
            "allOf": [
              {
                "$ref": "#/components/schemas/EventSubscriptionShipmentLoggerRearmPayload"
              }
            ],
            "description": "The data payload of the event subscription.<remarks>Use the value from the ```EventType``` field to determine how to de-serialize this data.</remarks>"
          },
          "payloadVersion": {
            "enum": [
              "latest",
              "1"
            ],
            "type": "string",
            "description": "The schema version of the data payload object.<table><tr><th nowrap>Value</th><th>Description</th></tr><tr><td nowrap><code>latest</code></td><td>\n            Explicitly request the latest version of the event subscription payload.\n            This should be the default unless you have explicit dependency on a particular\n            payload schema version.\n            </td></tr><tr><td nowrap><code>1</code></td><td>\n            Fixes the event subscription event payload schema to version 1.\n            </td></tr></table>"
          },
          "properties": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/CustomProperty"
            },
            "description": "List of customer defined properties that were supplied when the event subscription endpoint was created.\r\nThis structure can be useful for storing additional information about the event object in a structured format."
          },
          "mode": {
            "enum": [
              "Event",
              "Simulated"
            ],
            "type": "string",
            "description": "The mode that describes the triggering of the event subscription event. This indicates through what process this event\r\nwas raised. Use this to determine how to process the incoming events as some states may report duplicate or test events.<table><tr><th nowrap>Value</th><th>Description</th></tr><tr><td nowrap><code>Event</code></td><td>\n            The event was raised automatically by the Controlant integration system as a response\n            to an event in the platform.\n            </td></tr><tr><td nowrap><code>Simulated</code></td><td>\n            The event is a result of a simulation event request manually made through the Integration system by\n            a developer or an authorized user.\n            Simulated event payloads should be ignored in production environments.</td></tr></table>"
          },
          "environment": {
            "enum": [
              "Live",
              "UAT"
            ],
            "type": "string",
            "description": "Defines the environment that the event originated from.\r\n<warn>All non-LIVE event payloads should be ignored in production environments.</warn><table><tr><th nowrap>Value</th><th>Description</th></tr><tr><td nowrap><code>Live</code></td><td>\n            Event originated from the Controlant live production system.\n            Events generated by this environment should always be processed.\n            </td></tr><tr><td nowrap><code>UAT</code></td><td>\n            Event originated from the customer accessible Controlant User Acceptance Test environments.\n            </td></tr></table>"
          },
          "generated": {
            "type": "string",
            "description": "Timestamp when the event was generated by the Controlant platform.<span class=\"input-format\"> <a href=\"https://en.wikipedia.org/wiki/ISO_8601\" target=\"_blank\">Format: ISO 8601 (YYYY-MM-DDThh:mm:ssZ)</a></span>"
          }
        },
        "additionalProperties": false,
        "description": "Contains the data posted to the event subscription endpoints. Structure houses the event meta data such as fingerprints, times, type of payload and the payload itself"
      },
      "EventSubscriptionShipmentLoggerStatusChangedDeliveredPayload": {
        "type": "object",
        "properties": {
          "status": {
            "enum": [
              "Shipped",
              "Delivered"
            ],
            "type": "string",
            "description": "Status of the logger.<table><tr><th nowrap>Value</th><th>Description</th></tr><tr><td nowrap><code>Shipped</code></td><td>\n            Logger has entered Shipped status\n            </td></tr><tr><td nowrap><code>Delivered</code></td><td>\n            Logger has entered Delivered status\n            </td></tr></table>"
          },
          "timeStamp": {
            "type": "string",
            "description": "The timestamp of the logger status change, when the event is created.<span class=\"input-format\"> <a href=\"https://en.wikipedia.org/wiki/ISO_8601\" target=\"_blank\">Format: ISO 8601 (YYYY-MM-DDThh:mm:ssZ)</a></span>"
          },
          "shipmentReference": {
            "type": "string",
            "description": "Customer supplied unique reference value that identifies the shipment."
          },
          "loggerId": {
            "type": "string",
            "description": "The unique identifier (ID) of requested logger.\r\nThis is the barcode value in <a href=\"https://simple.wikipedia.org/wiki/Hexadecimal\" target=\"_blank\">Hexadecimal format</a>\r\nassigned to this logger from Controlant and is printed on one side of the logger along with the barcode.\r\n<note>\r\n\tEnsure that all possible scanner-device dependent end-of-input characters are stripped from the LoggerId.\r\n\tThis includes characters such as carriage return or new line.\r\n</note><remarks>The barcode printed on most Controlant loggers contain a common prefix <code>CMS</code>.\r\nThe loggerId submitted to the Integration platform can include this prefix if needed.\r\nNote that LoggerIds coming from the Controlant Platform will never include the <code>CMS</code> prefix.</remarks>"
          }
        },
        "additionalProperties": false,
        "description": "Defines the payload for the ShipmentLoggerStatusChangedDelivered subscription event"
      },
      "EventSubscriptionShipmentLoggerStatusChangedDeliveredPayloadEventSubscription": {
        "type": "object",
        "properties": {
          "deliveryId": {
            "type": "string",
            "description": "A <a href=\"https://en.wikipedia.org/wiki/Universally_unique_identifier\" target=\"_blank\">universally unique identifier</a> (UUID/GUID) for this event delivery attempt.<remarks>See this value in combination with the ```Reference``` field can be used to distinguish between different delivery attempts for the same event reference.</remarks>"
          },
          "attempt": {
            "type": "integer",
            "description": "An incremental number representing the delivery attempt. First delivery has a value of 1.",
            "format": "int32"
          },
          "reference": {
            "type": "string",
            "description": "Customer supplied unique reference for this event subscription."
          },
          "eventType": {
            "enum": [
              "shipment.report.created",
              "shipment.status.changed",
              "shipment.status.changed.ready",
              "shipment.status.changed.shipping",
              "shipment.status.changed.delivered",
              "shipment.status.changed.closed",
              "shipment.status.changed.deleted",
              "shipment.product.quality.changed",
              "shipment.logger.rearm",
              "shipment.logger.excursion.raised",
              "shipment.logger.button.pressed",
              "shipment.logger.status.changed",
              "shipment.logger.status.changed.shipping",
              "shipment.logger.status.changed.delivered",
              "shipment.logger.light.changed",
              "shipment.logger.geostatus.changed",
              "shipment.analysis.completed",
              "carrier.milestone.published",
              "shipment.data.temperatures.added",
              "shipment.data.geotraces.added"
            ],
            "type": "string",
            "description": "The type of the event.<table><tr><th nowrap>Value</th><th>Description</th></tr><tr><td nowrap><code>shipment.report.created</code></td><td>\n            Occurs whenever a new report is generated for the shipment\n            </td></tr><tr><td nowrap><code>shipment.status.changed</code></td><td>\n            Occurs whenever the status changes for the shipment\n            </td></tr><tr><td nowrap><code>shipment.status.changed.ready</code></td><td>\n            Occurs whenever shipment status is changed to ready (1)\n            </td></tr><tr><td nowrap><code>shipment.status.changed.shipping</code></td><td>\n            Occurs whenever shipment status is changed to shipping (1)\n            </td></tr><tr><td nowrap><code>shipment.status.changed.delivered</code></td><td>\n            Occurs whenever shipment status is changed to delivered (1)\n            </td></tr><tr><td nowrap><code>shipment.status.changed.closed</code></td><td>\n            Occurs whenever shipment status is changed to closed (1)\n            </td></tr><tr><td nowrap><code>shipment.status.changed.deleted</code></td><td>\n            Occurs whenever shipment status is changed to deleted (1)\n            </td></tr><tr><td nowrap><code>shipment.product.quality.changed</code></td><td>\n            Occurs whenever a product quality changes for the shipment\n            </td></tr><tr><td nowrap><code>shipment.logger.rearm</code></td><td>\n            Occurs when a logger should have its boundaries rearmed\n            </td></tr><tr><td nowrap><code>shipment.logger.excursion.raised</code></td><td>\n            Occurs when a logger sends a notification that an excursion was raised\n            </td></tr><tr><td nowrap><code>shipment.logger.button.pressed</code></td><td>\n            Occurs when a logger button is pressed\n            </td></tr><tr><td nowrap><code>shipment.logger.status.changed</code></td><td>\n            Occurs whenever shipment logger status is changed (2)\n            </td></tr><tr><td nowrap><code>shipment.logger.status.changed.shipping</code></td><td>\n            Occurs whenever shipment logger status is changed to shipping (3)\n            </td></tr><tr><td nowrap><code>shipment.logger.status.changed.delivered</code></td><td>\n            Occurs whenever shipment logger status is changed to delivered (3)\n            </td></tr><tr><td nowrap><code>shipment.logger.light.changed</code></td><td>\n            Occurs whenever the light on a logger changes\n            </td></tr><tr><td nowrap><code>shipment.logger.geostatus.changed</code></td><td>\n            Occurs whenever the geo status of a logger changes\n            </td></tr><tr><td nowrap><code>shipment.analysis.completed</code></td><td>\n            Occurs whenever a shipment analysis has completed\n            </td></tr><tr><td nowrap><code>carrier.milestone.published</code></td><td>\n            Occurs whenever a carrier milestone is published\n            </td></tr><tr><td nowrap><code>shipment.data.temperatures.added</code></td><td>\n            Occurs whenever shipment temperature data is added (Streaming)\n            </td></tr><tr><td nowrap><code>shipment.data.geotraces.added</code></td><td>\n            Occurs whenever shipment geo-trace data is added (Streaming)\n            </td></tr></table>"
          },
          "payload": {
            "allOf": [
              {
                "$ref": "#/components/schemas/EventSubscriptionShipmentLoggerStatusChangedDeliveredPayload"
              }
            ],
            "description": "The data payload of the event subscription.<remarks>Use the value from the ```EventType``` field to determine how to de-serialize this data.</remarks>"
          },
          "payloadVersion": {
            "enum": [
              "latest",
              "1"
            ],
            "type": "string",
            "description": "The schema version of the data payload object.<table><tr><th nowrap>Value</th><th>Description</th></tr><tr><td nowrap><code>latest</code></td><td>\n            Explicitly request the latest version of the event subscription payload.\n            This should be the default unless you have explicit dependency on a particular\n            payload schema version.\n            </td></tr><tr><td nowrap><code>1</code></td><td>\n            Fixes the event subscription event payload schema to version 1.\n            </td></tr></table>"
          },
          "properties": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/CustomProperty"
            },
            "description": "List of customer defined properties that were supplied when the event subscription endpoint was created.\r\nThis structure can be useful for storing additional information about the event object in a structured format."
          },
          "mode": {
            "enum": [
              "Event",
              "Simulated"
            ],
            "type": "string",
            "description": "The mode that describes the triggering of the event subscription event. This indicates through what process this event\r\nwas raised. Use this to determine how to process the incoming events as some states may report duplicate or test events.<table><tr><th nowrap>Value</th><th>Description</th></tr><tr><td nowrap><code>Event</code></td><td>\n            The event was raised automatically by the Controlant integration system as a response\n            to an event in the platform.\n            </td></tr><tr><td nowrap><code>Simulated</code></td><td>\n            The event is a result of a simulation event request manually made through the Integration system by\n            a developer or an authorized user.\n            Simulated event payloads should be ignored in production environments.</td></tr></table>"
          },
          "environment": {
            "enum": [
              "Live",
              "UAT"
            ],
            "type": "string",
            "description": "Defines the environment that the event originated from.\r\n<warn>All non-LIVE event payloads should be ignored in production environments.</warn><table><tr><th nowrap>Value</th><th>Description</th></tr><tr><td nowrap><code>Live</code></td><td>\n            Event originated from the Controlant live production system.\n            Events generated by this environment should always be processed.\n            </td></tr><tr><td nowrap><code>UAT</code></td><td>\n            Event originated from the customer accessible Controlant User Acceptance Test environments.\n            </td></tr></table>"
          },
          "generated": {
            "type": "string",
            "description": "Timestamp when the event was generated by the Controlant platform.<span class=\"input-format\"> <a href=\"https://en.wikipedia.org/wiki/ISO_8601\" target=\"_blank\">Format: ISO 8601 (YYYY-MM-DDThh:mm:ssZ)</a></span>"
          }
        },
        "additionalProperties": false,
        "description": "Contains the data posted to the event subscription endpoints. Structure houses the event meta data such as fingerprints, times, type of payload and the payload itself"
      },
      "EventSubscriptionShipmentLoggerStatusChangedPayload": {
        "type": "object",
        "properties": {
          "status": {
            "enum": [
              "Shipped",
              "Delivered"
            ],
            "type": "string",
            "description": "Status of the logger.<table><tr><th nowrap>Value</th><th>Description</th></tr><tr><td nowrap><code>Shipped</code></td><td>\n            Logger has entered Shipped status\n            </td></tr><tr><td nowrap><code>Delivered</code></td><td>\n            Logger has entered Delivered status\n            </td></tr></table>"
          },
          "timeStamp": {
            "type": "string",
            "description": "The timestamp of the logger status change, when the event is created.<span class=\"input-format\"> <a href=\"https://en.wikipedia.org/wiki/ISO_8601\" target=\"_blank\">Format: ISO 8601 (YYYY-MM-DDThh:mm:ssZ)</a></span>"
          },
          "shipmentReference": {
            "type": "string",
            "description": "Customer supplied unique reference value that identifies the shipment."
          },
          "loggerId": {
            "type": "string",
            "description": "The unique identifier (ID) of requested logger.\r\nThis is the barcode value in <a href=\"https://simple.wikipedia.org/wiki/Hexadecimal\" target=\"_blank\">Hexadecimal format</a>\r\nassigned to this logger from Controlant and is printed on one side of the logger along with the barcode.\r\n<note>\r\n\tEnsure that all possible scanner-device dependent end-of-input characters are stripped from the LoggerId.\r\n\tThis includes characters such as carriage return or new line.\r\n</note><remarks>The barcode printed on most Controlant loggers contain a common prefix <code>CMS</code>.\r\nThe loggerId submitted to the Integration platform can include this prefix if needed.\r\nNote that LoggerIds coming from the Controlant Platform will never include the <code>CMS</code> prefix.</remarks>"
          }
        },
        "additionalProperties": false,
        "description": "Defines the payload for the ShipmentLoggerStatusChanged subscription event"
      },
      "EventSubscriptionShipmentLoggerStatusChangedPayloadEventSubscription": {
        "type": "object",
        "properties": {
          "deliveryId": {
            "type": "string",
            "description": "A <a href=\"https://en.wikipedia.org/wiki/Universally_unique_identifier\" target=\"_blank\">universally unique identifier</a> (UUID/GUID) for this event delivery attempt.<remarks>See this value in combination with the ```Reference``` field can be used to distinguish between different delivery attempts for the same event reference.</remarks>"
          },
          "attempt": {
            "type": "integer",
            "description": "An incremental number representing the delivery attempt. First delivery has a value of 1.",
            "format": "int32"
          },
          "reference": {
            "type": "string",
            "description": "Customer supplied unique reference for this event subscription."
          },
          "eventType": {
            "enum": [
              "shipment.report.created",
              "shipment.status.changed",
              "shipment.status.changed.ready",
              "shipment.status.changed.shipping",
              "shipment.status.changed.delivered",
              "shipment.status.changed.closed",
              "shipment.status.changed.deleted",
              "shipment.product.quality.changed",
              "shipment.logger.rearm",
              "shipment.logger.excursion.raised",
              "shipment.logger.button.pressed",
              "shipment.logger.status.changed",
              "shipment.logger.status.changed.shipping",
              "shipment.logger.status.changed.delivered",
              "shipment.logger.light.changed",
              "shipment.logger.geostatus.changed",
              "shipment.analysis.completed",
              "carrier.milestone.published",
              "shipment.data.temperatures.added",
              "shipment.data.geotraces.added"
            ],
            "type": "string",
            "description": "The type of the event.<table><tr><th nowrap>Value</th><th>Description</th></tr><tr><td nowrap><code>shipment.report.created</code></td><td>\n            Occurs whenever a new report is generated for the shipment\n            </td></tr><tr><td nowrap><code>shipment.status.changed</code></td><td>\n            Occurs whenever the status changes for the shipment\n            </td></tr><tr><td nowrap><code>shipment.status.changed.ready</code></td><td>\n            Occurs whenever shipment status is changed to ready (1)\n            </td></tr><tr><td nowrap><code>shipment.status.changed.shipping</code></td><td>\n            Occurs whenever shipment status is changed to shipping (1)\n            </td></tr><tr><td nowrap><code>shipment.status.changed.delivered</code></td><td>\n            Occurs whenever shipment status is changed to delivered (1)\n            </td></tr><tr><td nowrap><code>shipment.status.changed.closed</code></td><td>\n            Occurs whenever shipment status is changed to closed (1)\n            </td></tr><tr><td nowrap><code>shipment.status.changed.deleted</code></td><td>\n            Occurs whenever shipment status is changed to deleted (1)\n            </td></tr><tr><td nowrap><code>shipment.product.quality.changed</code></td><td>\n            Occurs whenever a product quality changes for the shipment\n            </td></tr><tr><td nowrap><code>shipment.logger.rearm</code></td><td>\n            Occurs when a logger should have its boundaries rearmed\n            </td></tr><tr><td nowrap><code>shipment.logger.excursion.raised</code></td><td>\n            Occurs when a logger sends a notification that an excursion was raised\n            </td></tr><tr><td nowrap><code>shipment.logger.button.pressed</code></td><td>\n            Occurs when a logger button is pressed\n            </td></tr><tr><td nowrap><code>shipment.logger.status.changed</code></td><td>\n            Occurs whenever shipment logger status is changed (2)\n            </td></tr><tr><td nowrap><code>shipment.logger.status.changed.shipping</code></td><td>\n            Occurs whenever shipment logger status is changed to shipping (3)\n            </td></tr><tr><td nowrap><code>shipment.logger.status.changed.delivered</code></td><td>\n            Occurs whenever shipment logger status is changed to delivered (3)\n            </td></tr><tr><td nowrap><code>shipment.logger.light.changed</code></td><td>\n            Occurs whenever the light on a logger changes\n            </td></tr><tr><td nowrap><code>shipment.logger.geostatus.changed</code></td><td>\n            Occurs whenever the geo status of a logger changes\n            </td></tr><tr><td nowrap><code>shipment.analysis.completed</code></td><td>\n            Occurs whenever a shipment analysis has completed\n            </td></tr><tr><td nowrap><code>carrier.milestone.published</code></td><td>\n            Occurs whenever a carrier milestone is published\n            </td></tr><tr><td nowrap><code>shipment.data.temperatures.added</code></td><td>\n            Occurs whenever shipment temperature data is added (Streaming)\n            </td></tr><tr><td nowrap><code>shipment.data.geotraces.added</code></td><td>\n            Occurs whenever shipment geo-trace data is added (Streaming)\n            </td></tr></table>"
          },
          "payload": {
            "allOf": [
              {
                "$ref": "#/components/schemas/EventSubscriptionShipmentLoggerStatusChangedPayload"
              }
            ],
            "description": "The data payload of the event subscription.<remarks>Use the value from the ```EventType``` field to determine how to de-serialize this data.</remarks>"
          },
          "payloadVersion": {
            "enum": [
              "latest",
              "1"
            ],
            "type": "string",
            "description": "The schema version of the data payload object.<table><tr><th nowrap>Value</th><th>Description</th></tr><tr><td nowrap><code>latest</code></td><td>\n            Explicitly request the latest version of the event subscription payload.\n            This should be the default unless you have explicit dependency on a particular\n            payload schema version.\n            </td></tr><tr><td nowrap><code>1</code></td><td>\n            Fixes the event subscription event payload schema to version 1.\n            </td></tr></table>"
          },
          "properties": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/CustomProperty"
            },
            "description": "List of customer defined properties that were supplied when the event subscription endpoint was created.\r\nThis structure can be useful for storing additional information about the event object in a structured format."
          },
          "mode": {
            "enum": [
              "Event",
              "Simulated"
            ],
            "type": "string",
            "description": "The mode that describes the triggering of the event subscription event. This indicates through what process this event\r\nwas raised. Use this to determine how to process the incoming events as some states may report duplicate or test events.<table><tr><th nowrap>Value</th><th>Description</th></tr><tr><td nowrap><code>Event</code></td><td>\n            The event was raised automatically by the Controlant integration system as a response\n            to an event in the platform.\n            </td></tr><tr><td nowrap><code>Simulated</code></td><td>\n            The event is a result of a simulation event request manually made through the Integration system by\n            a developer or an authorized user.\n            Simulated event payloads should be ignored in production environments.</td></tr></table>"
          },
          "environment": {
            "enum": [
              "Live",
              "UAT"
            ],
            "type": "string",
            "description": "Defines the environment that the event originated from.\r\n<warn>All non-LIVE event payloads should be ignored in production environments.</warn><table><tr><th nowrap>Value</th><th>Description</th></tr><tr><td nowrap><code>Live</code></td><td>\n            Event originated from the Controlant live production system.\n            Events generated by this environment should always be processed.\n            </td></tr><tr><td nowrap><code>UAT</code></td><td>\n            Event originated from the customer accessible Controlant User Acceptance Test environments.\n            </td></tr></table>"
          },
          "generated": {
            "type": "string",
            "description": "Timestamp when the event was generated by the Controlant platform.<span class=\"input-format\"> <a href=\"https://en.wikipedia.org/wiki/ISO_8601\" target=\"_blank\">Format: ISO 8601 (YYYY-MM-DDThh:mm:ssZ)</a></span>"
          }
        },
        "additionalProperties": false,
        "description": "Contains the data posted to the event subscription endpoints. Structure houses the event meta data such as fingerprints, times, type of payload and the payload itself"
      },
      "EventSubscriptionShipmentReportPayload": {
        "type": "object",
        "properties": {
          "shipmentReference": {
            "type": "string",
            "description": "Customer supplied unique reference value that identifies the shipment."
          },
          "reportType": {
            "enum": [
              "DeliveryReport"
            ],
            "type": "string",
            "description": "The type of report which is available.<table><tr><th nowrap>Value</th><th>Description</th></tr><tr><td nowrap><code>DeliveryReport</code></td><td>\n            Report that is automatically generated after shipment is delivered which contains quality related information about the shipment contents.\n            </td></tr></table>"
          },
          "reportNumber": {
            "type": "integer",
            "description": "The number of this report (in case of multiple reports being generated for the shipment) for the given type for this shipment.<remarks>Denotes the X value in <i>ShipmentReference X/Y</i> when shipments are split.</remarks>",
            "format": "int32"
          },
          "reportTotalCount": {
            "type": "integer",
            "description": "The total number of reports of the given type to expect for this shipment.<remarks>Denotes the Y value in <i>ShipmentReference X/Y</i> when shipments are split.</remarks>",
            "format": "int32"
          },
          "downloadUrl": {
            "type": "string",
            "description": "The URL where the report can be downloaded from."
          },
          "languageCode": {
            "type": "string",
            "description": "Language code for the report.<remarks>The language is specified as a two letter value as defined in the <a href=\"https://en.wikipedia.org/wiki/List_of_ISO_639-1_codes\" target=\"_blank\">ISO 639-1 standard</a> for language codes.</remarks>"
          }
        },
        "additionalProperties": false,
        "description": "Defines an Event Subscription Shipment Report Payload"
      },
      "EventSubscriptionShipmentReportPayloadEventSubscription": {
        "type": "object",
        "properties": {
          "deliveryId": {
            "type": "string",
            "description": "A <a href=\"https://en.wikipedia.org/wiki/Universally_unique_identifier\" target=\"_blank\">universally unique identifier</a> (UUID/GUID) for this event delivery attempt.<remarks>See this value in combination with the ```Reference``` field can be used to distinguish between different delivery attempts for the same event reference.</remarks>"
          },
          "attempt": {
            "type": "integer",
            "description": "An incremental number representing the delivery attempt. First delivery has a value of 1.",
            "format": "int32"
          },
          "reference": {
            "type": "string",
            "description": "Customer supplied unique reference for this event subscription."
          },
          "eventType": {
            "enum": [
              "shipment.report.created",
              "shipment.status.changed",
              "shipment.status.changed.ready",
              "shipment.status.changed.shipping",
              "shipment.status.changed.delivered",
              "shipment.status.changed.closed",
              "shipment.status.changed.deleted",
              "shipment.product.quality.changed",
              "shipment.logger.rearm",
              "shipment.logger.excursion.raised",
              "shipment.logger.button.pressed",
              "shipment.logger.status.changed",
              "shipment.logger.status.changed.shipping",
              "shipment.logger.status.changed.delivered",
              "shipment.logger.light.changed",
              "shipment.logger.geostatus.changed",
              "shipment.analysis.completed",
              "carrier.milestone.published",
              "shipment.data.temperatures.added",
              "shipment.data.geotraces.added"
            ],
            "type": "string",
            "description": "The type of the event.<table><tr><th nowrap>Value</th><th>Description</th></tr><tr><td nowrap><code>shipment.report.created</code></td><td>\n            Occurs whenever a new report is generated for the shipment\n            </td></tr><tr><td nowrap><code>shipment.status.changed</code></td><td>\n            Occurs whenever the status changes for the shipment\n            </td></tr><tr><td nowrap><code>shipment.status.changed.ready</code></td><td>\n            Occurs whenever shipment status is changed to ready (1)\n            </td></tr><tr><td nowrap><code>shipment.status.changed.shipping</code></td><td>\n            Occurs whenever shipment status is changed to shipping (1)\n            </td></tr><tr><td nowrap><code>shipment.status.changed.delivered</code></td><td>\n            Occurs whenever shipment status is changed to delivered (1)\n            </td></tr><tr><td nowrap><code>shipment.status.changed.closed</code></td><td>\n            Occurs whenever shipment status is changed to closed (1)\n            </td></tr><tr><td nowrap><code>shipment.status.changed.deleted</code></td><td>\n            Occurs whenever shipment status is changed to deleted (1)\n            </td></tr><tr><td nowrap><code>shipment.product.quality.changed</code></td><td>\n            Occurs whenever a product quality changes for the shipment\n            </td></tr><tr><td nowrap><code>shipment.logger.rearm</code></td><td>\n            Occurs when a logger should have its boundaries rearmed\n            </td></tr><tr><td nowrap><code>shipment.logger.excursion.raised</code></td><td>\n            Occurs when a logger sends a notification that an excursion was raised\n            </td></tr><tr><td nowrap><code>shipment.logger.button.pressed</code></td><td>\n            Occurs when a logger button is pressed\n            </td></tr><tr><td nowrap><code>shipment.logger.status.changed</code></td><td>\n            Occurs whenever shipment logger status is changed (2)\n            </td></tr><tr><td nowrap><code>shipment.logger.status.changed.shipping</code></td><td>\n            Occurs whenever shipment logger status is changed to shipping (3)\n            </td></tr><tr><td nowrap><code>shipment.logger.status.changed.delivered</code></td><td>\n            Occurs whenever shipment logger status is changed to delivered (3)\n            </td></tr><tr><td nowrap><code>shipment.logger.light.changed</code></td><td>\n            Occurs whenever the light on a logger changes\n            </td></tr><tr><td nowrap><code>shipment.logger.geostatus.changed</code></td><td>\n            Occurs whenever the geo status of a logger changes\n            </td></tr><tr><td nowrap><code>shipment.analysis.completed</code></td><td>\n            Occurs whenever a shipment analysis has completed\n            </td></tr><tr><td nowrap><code>carrier.milestone.published</code></td><td>\n            Occurs whenever a carrier milestone is published\n            </td></tr><tr><td nowrap><code>shipment.data.temperatures.added</code></td><td>\n            Occurs whenever shipment temperature data is added (Streaming)\n            </td></tr><tr><td nowrap><code>shipment.data.geotraces.added</code></td><td>\n            Occurs whenever shipment geo-trace data is added (Streaming)\n            </td></tr></table>"
          },
          "payload": {
            "allOf": [
              {
                "$ref": "#/components/schemas/EventSubscriptionShipmentReportPayload"
              }
            ],
            "description": "The data payload of the event subscription.<remarks>Use the value from the ```EventType``` field to determine how to de-serialize this data.</remarks>"
          },
          "payloadVersion": {
            "enum": [
              "latest",
              "1"
            ],
            "type": "string",
            "description": "The schema version of the data payload object.<table><tr><th nowrap>Value</th><th>Description</th></tr><tr><td nowrap><code>latest</code></td><td>\n            Explicitly request the latest version of the event subscription payload.\n            This should be the default unless you have explicit dependency on a particular\n            payload schema version.\n            </td></tr><tr><td nowrap><code>1</code></td><td>\n            Fixes the event subscription event payload schema to version 1.\n            </td></tr></table>"
          },
          "properties": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/CustomProperty"
            },
            "description": "List of customer defined properties that were supplied when the event subscription endpoint was created.\r\nThis structure can be useful for storing additional information about the event object in a structured format."
          },
          "mode": {
            "enum": [
              "Event",
              "Simulated"
            ],
            "type": "string",
            "description": "The mode that describes the triggering of the event subscription event. This indicates through what process this event\r\nwas raised. Use this to determine how to process the incoming events as some states may report duplicate or test events.<table><tr><th nowrap>Value</th><th>Description</th></tr><tr><td nowrap><code>Event</code></td><td>\n            The event was raised automatically by the Controlant integration system as a response\n            to an event in the platform.\n            </td></tr><tr><td nowrap><code>Simulated</code></td><td>\n            The event is a result of a simulation event request manually made through the Integration system by\n            a developer or an authorized user.\n            Simulated event payloads should be ignored in production environments.</td></tr></table>"
          },
          "environment": {
            "enum": [
              "Live",
              "UAT"
            ],
            "type": "string",
            "description": "Defines the environment that the event originated from.\r\n<warn>All non-LIVE event payloads should be ignored in production environments.</warn><table><tr><th nowrap>Value</th><th>Description</th></tr><tr><td nowrap><code>Live</code></td><td>\n            Event originated from the Controlant live production system.\n            Events generated by this environment should always be processed.\n            </td></tr><tr><td nowrap><code>UAT</code></td><td>\n            Event originated from the customer accessible Controlant User Acceptance Test environments.\n            </td></tr></table>"
          },
          "generated": {
            "type": "string",
            "description": "Timestamp when the event was generated by the Controlant platform.<span class=\"input-format\"> <a href=\"https://en.wikipedia.org/wiki/ISO_8601\" target=\"_blank\">Format: ISO 8601 (YYYY-MM-DDThh:mm:ssZ)</a></span>"
          }
        },
        "additionalProperties": false,
        "description": "Contains the data posted to the event subscription endpoints. Structure houses the event meta data such as fingerprints, times, type of payload and the payload itself"
      },
      "EventSubscriptionShipmentStatusChangedPayload": {
        "type": "object",
        "properties": {
          "shipmentReference": {
            "type": "string",
            "description": "Customer supplied unique reference value that identifies the shipment."
          },
          "status": {
            "enum": [
              "Draft",
              "Ready",
              "Shipping",
              "Delivered",
              "Closed",
              "Deleted"
            ],
            "type": "string",
            "description": "Status of the shipment.<table><tr><th nowrap>Value</th><th>Description</th></tr><tr><td nowrap><code>Draft</code></td><td>\n            Shipment is in a draft state, it cannot be started from this state. Usually indicates that it contains incomplete data or unapproved values\n            </td></tr><tr><td nowrap><code>Ready</code></td><td>\n            Shipment is ready to be sent\n            </td></tr><tr><td nowrap><code>Shipping</code></td><td>\n            Shipment is in the process of being delivered. No changes will be applied to logger data during this status.\n            </td></tr><tr><td nowrap><code>Delivered</code></td><td>\n            Shipment has satisfied the conditions for delivery and is considered delivered.\n            </td></tr><tr><td nowrap><code>Closed</code></td><td>\n            Shipment has been closed\n            </td></tr><tr><td nowrap><code>Deleted</code></td><td>\n            Shipment was deleted from the system and was never sent to shipping status\n            </td></tr></table>"
          },
          "previousStatus": {
            "enum": [
              "Draft",
              "Ready",
              "Shipping",
              "Delivered",
              "Closed",
              "Deleted"
            ],
            "type": "string",
            "description": "Previous status of the shipment, before change.<table><tr><th nowrap>Value</th><th>Description</th></tr><tr><td nowrap><code>Draft</code></td><td>\n            Shipment is in a draft state, it cannot be started from this state. Usually indicates that it contains incomplete data or unapproved values\n            </td></tr><tr><td nowrap><code>Ready</code></td><td>\n            Shipment is ready to be sent\n            </td></tr><tr><td nowrap><code>Shipping</code></td><td>\n            Shipment is in the process of being delivered. No changes will be applied to logger data during this status.\n            </td></tr><tr><td nowrap><code>Delivered</code></td><td>\n            Shipment has satisfied the conditions for delivery and is considered delivered.\n            </td></tr><tr><td nowrap><code>Closed</code></td><td>\n            Shipment has been closed\n            </td></tr><tr><td nowrap><code>Deleted</code></td><td>\n            Shipment was deleted from the system and was never sent to shipping status\n            </td></tr></table>"
          },
          "transitionType": {
            "enum": [
              "Automatic",
              "Manual"
            ],
            "type": "string",
            "description": "Type of shipment status change.<table><tr><th nowrap>Value</th><th>Description</th></tr><tr><td nowrap><code>Automatic</code></td><td>\n            The shipment state transition was done through an automatic process.\n            </td></tr><tr><td nowrap><code>Manual</code></td><td>\n            The shipment state transition was done through a manual process.\n            </td></tr></table>"
          },
          "statusChangedTimeStamp": {
            "type": "string",
            "description": "The timestamp of when the shipment status change event was created.<span class=\"input-format\"> <a href=\"https://en.wikipedia.org/wiki/ISO_8601\" target=\"_blank\">Format: ISO 8601 (YYYY-MM-DDThh:mm:ssZ)</a></span>"
          },
          "effectiveTimeStamp": {
            "type": "string",
            "description": "Timestamp indicating the exact date and time that the status change took effect.\r\nThis value matches the ```StatusChangedTimeStamp``` value except in cases where users manually transition shipments\r\nbetween states. Then, this value reflects the value that was specified when the shipment was manually transitioned to the state.\r\n<note>This value should in most cases be preferred over ```StatusChangedTimeStamp``` as it will reflect more accurately the exact date of the status change.</note><span class=\"input-format\"> <a href=\"https://en.wikipedia.org/wiki/ISO_8601\" target=\"_blank\">Format: ISO 8601 (YYYY-MM-DDThh:mm:ssZ)</a></span>"
          }
        },
        "additionalProperties": false,
        "description": "Defines an Event Subscription Shipment Status Payload"
      },
      "EventSubscriptionShipmentStatusChangedPayloadEventSubscription": {
        "type": "object",
        "properties": {
          "deliveryId": {
            "type": "string",
            "description": "A <a href=\"https://en.wikipedia.org/wiki/Universally_unique_identifier\" target=\"_blank\">universally unique identifier</a> (UUID/GUID) for this event delivery attempt.<remarks>See this value in combination with the ```Reference``` field can be used to distinguish between different delivery attempts for the same event reference.</remarks>"
          },
          "attempt": {
            "type": "integer",
            "description": "An incremental number representing the delivery attempt. First delivery has a value of 1.",
            "format": "int32"
          },
          "reference": {
            "type": "string",
            "description": "Customer supplied unique reference for this event subscription."
          },
          "eventType": {
            "enum": [
              "shipment.report.created",
              "shipment.status.changed",
              "shipment.status.changed.ready",
              "shipment.status.changed.shipping",
              "shipment.status.changed.delivered",
              "shipment.status.changed.closed",
              "shipment.status.changed.deleted",
              "shipment.product.quality.changed",
              "shipment.logger.rearm",
              "shipment.logger.excursion.raised",
              "shipment.logger.button.pressed",
              "shipment.logger.status.changed",
              "shipment.logger.status.changed.shipping",
              "shipment.logger.status.changed.delivered",
              "shipment.logger.light.changed",
              "shipment.logger.geostatus.changed",
              "shipment.analysis.completed",
              "carrier.milestone.published",
              "shipment.data.temperatures.added",
              "shipment.data.geotraces.added"
            ],
            "type": "string",
            "description": "The type of the event.<table><tr><th nowrap>Value</th><th>Description</th></tr><tr><td nowrap><code>shipment.report.created</code></td><td>\n            Occurs whenever a new report is generated for the shipment\n            </td></tr><tr><td nowrap><code>shipment.status.changed</code></td><td>\n            Occurs whenever the status changes for the shipment\n            </td></tr><tr><td nowrap><code>shipment.status.changed.ready</code></td><td>\n            Occurs whenever shipment status is changed to ready (1)\n            </td></tr><tr><td nowrap><code>shipment.status.changed.shipping</code></td><td>\n            Occurs whenever shipment status is changed to shipping (1)\n            </td></tr><tr><td nowrap><code>shipment.status.changed.delivered</code></td><td>\n            Occurs whenever shipment status is changed to delivered (1)\n            </td></tr><tr><td nowrap><code>shipment.status.changed.closed</code></td><td>\n            Occurs whenever shipment status is changed to closed (1)\n            </td></tr><tr><td nowrap><code>shipment.status.changed.deleted</code></td><td>\n            Occurs whenever shipment status is changed to deleted (1)\n            </td></tr><tr><td nowrap><code>shipment.product.quality.changed</code></td><td>\n            Occurs whenever a product quality changes for the shipment\n            </td></tr><tr><td nowrap><code>shipment.logger.rearm</code></td><td>\n            Occurs when a logger should have its boundaries rearmed\n            </td></tr><tr><td nowrap><code>shipment.logger.excursion.raised</code></td><td>\n            Occurs when a logger sends a notification that an excursion was raised\n            </td></tr><tr><td nowrap><code>shipment.logger.button.pressed</code></td><td>\n            Occurs when a logger button is pressed\n            </td></tr><tr><td nowrap><code>shipment.logger.status.changed</code></td><td>\n            Occurs whenever shipment logger status is changed (2)\n            </td></tr><tr><td nowrap><code>shipment.logger.status.changed.shipping</code></td><td>\n            Occurs whenever shipment logger status is changed to shipping (3)\n            </td></tr><tr><td nowrap><code>shipment.logger.status.changed.delivered</code></td><td>\n            Occurs whenever shipment logger status is changed to delivered (3)\n            </td></tr><tr><td nowrap><code>shipment.logger.light.changed</code></td><td>\n            Occurs whenever the light on a logger changes\n            </td></tr><tr><td nowrap><code>shipment.logger.geostatus.changed</code></td><td>\n            Occurs whenever the geo status of a logger changes\n            </td></tr><tr><td nowrap><code>shipment.analysis.completed</code></td><td>\n            Occurs whenever a shipment analysis has completed\n            </td></tr><tr><td nowrap><code>carrier.milestone.published</code></td><td>\n            Occurs whenever a carrier milestone is published\n            </td></tr><tr><td nowrap><code>shipment.data.temperatures.added</code></td><td>\n            Occurs whenever shipment temperature data is added (Streaming)\n            </td></tr><tr><td nowrap><code>shipment.data.geotraces.added</code></td><td>\n            Occurs whenever shipment geo-trace data is added (Streaming)\n            </td></tr></table>"
          },
          "payload": {
            "allOf": [
              {
                "$ref": "#/components/schemas/EventSubscriptionShipmentStatusChangedPayload"
              }
            ],
            "description": "The data payload of the event subscription.<remarks>Use the value from the ```EventType``` field to determine how to de-serialize this data.</remarks>"
          },
          "payloadVersion": {
            "enum": [
              "latest",
              "1"
            ],
            "type": "string",
            "description": "The schema version of the data payload object.<table><tr><th nowrap>Value</th><th>Description</th></tr><tr><td nowrap><code>latest</code></td><td>\n            Explicitly request the latest version of the event subscription payload.\n            This should be the default unless you have explicit dependency on a particular\n            payload schema version.\n            </td></tr><tr><td nowrap><code>1</code></td><td>\n            Fixes the event subscription event payload schema to version 1.\n            </td></tr></table>"
          },
          "properties": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/CustomProperty"
            },
            "description": "List of customer defined properties that were supplied when the event subscription endpoint was created.\r\nThis structure can be useful for storing additional information about the event object in a structured format."
          },
          "mode": {
            "enum": [
              "Event",
              "Simulated"
            ],
            "type": "string",
            "description": "The mode that describes the triggering of the event subscription event. This indicates through what process this event\r\nwas raised. Use this to determine how to process the incoming events as some states may report duplicate or test events.<table><tr><th nowrap>Value</th><th>Description</th></tr><tr><td nowrap><code>Event</code></td><td>\n            The event was raised automatically by the Controlant integration system as a response\n            to an event in the platform.\n            </td></tr><tr><td nowrap><code>Simulated</code></td><td>\n            The event is a result of a simulation event request manually made through the Integration system by\n            a developer or an authorized user.\n            Simulated event payloads should be ignored in production environments.</td></tr></table>"
          },
          "environment": {
            "enum": [
              "Live",
              "UAT"
            ],
            "type": "string",
            "description": "Defines the environment that the event originated from.\r\n<warn>All non-LIVE event payloads should be ignored in production environments.</warn><table><tr><th nowrap>Value</th><th>Description</th></tr><tr><td nowrap><code>Live</code></td><td>\n            Event originated from the Controlant live production system.\n            Events generated by this environment should always be processed.\n            </td></tr><tr><td nowrap><code>UAT</code></td><td>\n            Event originated from the customer accessible Controlant User Acceptance Test environments.\n            </td></tr></table>"
          },
          "generated": {
            "type": "string",
            "description": "Timestamp when the event was generated by the Controlant platform.<span class=\"input-format\"> <a href=\"https://en.wikipedia.org/wiki/ISO_8601\" target=\"_blank\">Format: ISO 8601 (YYYY-MM-DDThh:mm:ssZ)</a></span>"
          }
        },
        "additionalProperties": false,
        "description": "Contains the data posted to the event subscription endpoints. Structure houses the event meta data such as fingerprints, times, type of payload and the payload itself"
      },
      "EventSubscriptionShipmentStatusClosedPayload": {
        "type": "object",
        "properties": {
          "shipmentReference": {
            "type": "string",
            "description": "Customer supplied unique reference value that identifies the shipment."
          },
          "status": {
            "enum": [
              "Draft",
              "Ready",
              "Shipping",
              "Delivered",
              "Closed",
              "Deleted"
            ],
            "type": "string",
            "description": "Status of the shipment.<table><tr><th nowrap>Value</th><th>Description</th></tr><tr><td nowrap><code>Draft</code></td><td>\n            Shipment is in a draft state, it cannot be started from this state. Usually indicates that it contains incomplete data or unapproved values\n            </td></tr><tr><td nowrap><code>Ready</code></td><td>\n            Shipment is ready to be sent\n            </td></tr><tr><td nowrap><code>Shipping</code></td><td>\n            Shipment is in the process of being delivered. No changes will be applied to logger data during this status.\n            </td></tr><tr><td nowrap><code>Delivered</code></td><td>\n            Shipment has satisfied the conditions for delivery and is considered delivered.\n            </td></tr><tr><td nowrap><code>Closed</code></td><td>\n            Shipment has been closed\n            </td></tr><tr><td nowrap><code>Deleted</code></td><td>\n            Shipment was deleted from the system and was never sent to shipping status\n            </td></tr></table>"
          },
          "previousStatus": {
            "enum": [
              "Draft",
              "Ready",
              "Shipping",
              "Delivered",
              "Closed",
              "Deleted"
            ],
            "type": "string",
            "description": "Previous status of the shipment, before change.<table><tr><th nowrap>Value</th><th>Description</th></tr><tr><td nowrap><code>Draft</code></td><td>\n            Shipment is in a draft state, it cannot be started from this state. Usually indicates that it contains incomplete data or unapproved values\n            </td></tr><tr><td nowrap><code>Ready</code></td><td>\n            Shipment is ready to be sent\n            </td></tr><tr><td nowrap><code>Shipping</code></td><td>\n            Shipment is in the process of being delivered. No changes will be applied to logger data during this status.\n            </td></tr><tr><td nowrap><code>Delivered</code></td><td>\n            Shipment has satisfied the conditions for delivery and is considered delivered.\n            </td></tr><tr><td nowrap><code>Closed</code></td><td>\n            Shipment has been closed\n            </td></tr><tr><td nowrap><code>Deleted</code></td><td>\n            Shipment was deleted from the system and was never sent to shipping status\n            </td></tr></table>"
          },
          "transitionType": {
            "enum": [
              "Automatic",
              "Manual"
            ],
            "type": "string",
            "description": "Type of shipment status change.<table><tr><th nowrap>Value</th><th>Description</th></tr><tr><td nowrap><code>Automatic</code></td><td>\n            The shipment state transition was done through an automatic process.\n            </td></tr><tr><td nowrap><code>Manual</code></td><td>\n            The shipment state transition was done through a manual process.\n            </td></tr></table>"
          },
          "statusChangedTimeStamp": {
            "type": "string",
            "description": "The timestamp of when the shipment status change event was created.<span class=\"input-format\"> <a href=\"https://en.wikipedia.org/wiki/ISO_8601\" target=\"_blank\">Format: ISO 8601 (YYYY-MM-DDThh:mm:ssZ)</a></span>"
          },
          "effectiveTimeStamp": {
            "type": "string",
            "description": "Timestamp indicating the exact date and time that the status change took effect.\r\nThis value matches the ```StatusChangedTimeStamp``` value except in cases where users manually transition shipments\r\nbetween states. Then, this value reflects the value that was specified when the shipment was manually transitioned to the state.\r\n<note>This value should in most cases be preferred over ```StatusChangedTimeStamp``` as it will reflect more accurately the exact date of the status change.</note><span class=\"input-format\"> <a href=\"https://en.wikipedia.org/wiki/ISO_8601\" target=\"_blank\">Format: ISO 8601 (YYYY-MM-DDThh:mm:ssZ)</a></span>"
          }
        },
        "additionalProperties": false,
        "description": "Defines an Event Subscription Shipment Status Closed Payload"
      },
      "EventSubscriptionShipmentStatusClosedPayloadEventSubscription": {
        "type": "object",
        "properties": {
          "deliveryId": {
            "type": "string",
            "description": "A <a href=\"https://en.wikipedia.org/wiki/Universally_unique_identifier\" target=\"_blank\">universally unique identifier</a> (UUID/GUID) for this event delivery attempt.<remarks>See this value in combination with the ```Reference``` field can be used to distinguish between different delivery attempts for the same event reference.</remarks>"
          },
          "attempt": {
            "type": "integer",
            "description": "An incremental number representing the delivery attempt. First delivery has a value of 1.",
            "format": "int32"
          },
          "reference": {
            "type": "string",
            "description": "Customer supplied unique reference for this event subscription."
          },
          "eventType": {
            "enum": [
              "shipment.report.created",
              "shipment.status.changed",
              "shipment.status.changed.ready",
              "shipment.status.changed.shipping",
              "shipment.status.changed.delivered",
              "shipment.status.changed.closed",
              "shipment.status.changed.deleted",
              "shipment.product.quality.changed",
              "shipment.logger.rearm",
              "shipment.logger.excursion.raised",
              "shipment.logger.button.pressed",
              "shipment.logger.status.changed",
              "shipment.logger.status.changed.shipping",
              "shipment.logger.status.changed.delivered",
              "shipment.logger.light.changed",
              "shipment.logger.geostatus.changed",
              "shipment.analysis.completed",
              "carrier.milestone.published",
              "shipment.data.temperatures.added",
              "shipment.data.geotraces.added"
            ],
            "type": "string",
            "description": "The type of the event.<table><tr><th nowrap>Value</th><th>Description</th></tr><tr><td nowrap><code>shipment.report.created</code></td><td>\n            Occurs whenever a new report is generated for the shipment\n            </td></tr><tr><td nowrap><code>shipment.status.changed</code></td><td>\n            Occurs whenever the status changes for the shipment\n            </td></tr><tr><td nowrap><code>shipment.status.changed.ready</code></td><td>\n            Occurs whenever shipment status is changed to ready (1)\n            </td></tr><tr><td nowrap><code>shipment.status.changed.shipping</code></td><td>\n            Occurs whenever shipment status is changed to shipping (1)\n            </td></tr><tr><td nowrap><code>shipment.status.changed.delivered</code></td><td>\n            Occurs whenever shipment status is changed to delivered (1)\n            </td></tr><tr><td nowrap><code>shipment.status.changed.closed</code></td><td>\n            Occurs whenever shipment status is changed to closed (1)\n            </td></tr><tr><td nowrap><code>shipment.status.changed.deleted</code></td><td>\n            Occurs whenever shipment status is changed to deleted (1)\n            </td></tr><tr><td nowrap><code>shipment.product.quality.changed</code></td><td>\n            Occurs whenever a product quality changes for the shipment\n            </td></tr><tr><td nowrap><code>shipment.logger.rearm</code></td><td>\n            Occurs when a logger should have its boundaries rearmed\n            </td></tr><tr><td nowrap><code>shipment.logger.excursion.raised</code></td><td>\n            Occurs when a logger sends a notification that an excursion was raised\n            </td></tr><tr><td nowrap><code>shipment.logger.button.pressed</code></td><td>\n            Occurs when a logger button is pressed\n            </td></tr><tr><td nowrap><code>shipment.logger.status.changed</code></td><td>\n            Occurs whenever shipment logger status is changed (2)\n            </td></tr><tr><td nowrap><code>shipment.logger.status.changed.shipping</code></td><td>\n            Occurs whenever shipment logger status is changed to shipping (3)\n            </td></tr><tr><td nowrap><code>shipment.logger.status.changed.delivered</code></td><td>\n            Occurs whenever shipment logger status is changed to delivered (3)\n            </td></tr><tr><td nowrap><code>shipment.logger.light.changed</code></td><td>\n            Occurs whenever the light on a logger changes\n            </td></tr><tr><td nowrap><code>shipment.logger.geostatus.changed</code></td><td>\n            Occurs whenever the geo status of a logger changes\n            </td></tr><tr><td nowrap><code>shipment.analysis.completed</code></td><td>\n            Occurs whenever a shipment analysis has completed\n            </td></tr><tr><td nowrap><code>carrier.milestone.published</code></td><td>\n            Occurs whenever a carrier milestone is published\n            </td></tr><tr><td nowrap><code>shipment.data.temperatures.added</code></td><td>\n            Occurs whenever shipment temperature data is added (Streaming)\n            </td></tr><tr><td nowrap><code>shipment.data.geotraces.added</code></td><td>\n            Occurs whenever shipment geo-trace data is added (Streaming)\n            </td></tr></table>"
          },
          "payload": {
            "allOf": [
              {
                "$ref": "#/components/schemas/EventSubscriptionShipmentStatusClosedPayload"
              }
            ],
            "description": "The data payload of the event subscription.<remarks>Use the value from the ```EventType``` field to determine how to de-serialize this data.</remarks>"
          },
          "payloadVersion": {
            "enum": [
              "latest",
              "1"
            ],
            "type": "string",
            "description": "The schema version of the data payload object.<table><tr><th nowrap>Value</th><th>Description</th></tr><tr><td nowrap><code>latest</code></td><td>\n            Explicitly request the latest version of the event subscription payload.\n            This should be the default unless you have explicit dependency on a particular\n            payload schema version.\n            </td></tr><tr><td nowrap><code>1</code></td><td>\n            Fixes the event subscription event payload schema to version 1.\n            </td></tr></table>"
          },
          "properties": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/CustomProperty"
            },
            "description": "List of customer defined properties that were supplied when the event subscription endpoint was created.\r\nThis structure can be useful for storing additional information about the event object in a structured format."
          },
          "mode": {
            "enum": [
              "Event",
              "Simulated"
            ],
            "type": "string",
            "description": "The mode that describes the triggering of the event subscription event. This indicates through what process this event\r\nwas raised. Use this to determine how to process the incoming events as some states may report duplicate or test events.<table><tr><th nowrap>Value</th><th>Description</th></tr><tr><td nowrap><code>Event</code></td><td>\n            The event was raised automatically by the Controlant integration system as a response\n            to an event in the platform.\n            </td></tr><tr><td nowrap><code>Simulated</code></td><td>\n            The event is a result of a simulation event request manually made through the Integration system by\n            a developer or an authorized user.\n            Simulated event payloads should be ignored in production environments.</td></tr></table>"
          },
          "environment": {
            "enum": [
              "Live",
              "UAT"
            ],
            "type": "string",
            "description": "Defines the environment that the event originated from.\r\n<warn>All non-LIVE event payloads should be ignored in production environments.</warn><table><tr><th nowrap>Value</th><th>Description</th></tr><tr><td nowrap><code>Live</code></td><td>\n            Event originated from the Controlant live production system.\n            Events generated by this environment should always be processed.\n            </td></tr><tr><td nowrap><code>UAT</code></td><td>\n            Event originated from the customer accessible Controlant User Acceptance Test environments.\n            </td></tr></table>"
          },
          "generated": {
            "type": "string",
            "description": "Timestamp when the event was generated by the Controlant platform.<span class=\"input-format\"> <a href=\"https://en.wikipedia.org/wiki/ISO_8601\" target=\"_blank\">Format: ISO 8601 (YYYY-MM-DDThh:mm:ssZ)</a></span>"
          }
        },
        "additionalProperties": false,
        "description": "Contains the data posted to the event subscription endpoints. Structure houses the event meta data such as fingerprints, times, type of payload and the payload itself"
      },
      "EventSubscriptionShipmentStatusDeletedPayload": {
        "type": "object",
        "properties": {
          "shipmentReference": {
            "type": "string",
            "description": "Customer supplied unique reference value that identifies the shipment."
          },
          "status": {
            "enum": [
              "Draft",
              "Ready",
              "Shipping",
              "Delivered",
              "Closed",
              "Deleted"
            ],
            "type": "string",
            "description": "Status of the shipment.<table><tr><th nowrap>Value</th><th>Description</th></tr><tr><td nowrap><code>Draft</code></td><td>\n            Shipment is in a draft state, it cannot be started from this state. Usually indicates that it contains incomplete data or unapproved values\n            </td></tr><tr><td nowrap><code>Ready</code></td><td>\n            Shipment is ready to be sent\n            </td></tr><tr><td nowrap><code>Shipping</code></td><td>\n            Shipment is in the process of being delivered. No changes will be applied to logger data during this status.\n            </td></tr><tr><td nowrap><code>Delivered</code></td><td>\n            Shipment has satisfied the conditions for delivery and is considered delivered.\n            </td></tr><tr><td nowrap><code>Closed</code></td><td>\n            Shipment has been closed\n            </td></tr><tr><td nowrap><code>Deleted</code></td><td>\n            Shipment was deleted from the system and was never sent to shipping status\n            </td></tr></table>"
          },
          "previousStatus": {
            "enum": [
              "Draft",
              "Ready",
              "Shipping",
              "Delivered",
              "Closed",
              "Deleted"
            ],
            "type": "string",
            "description": "Previous status of the shipment, before change.<table><tr><th nowrap>Value</th><th>Description</th></tr><tr><td nowrap><code>Draft</code></td><td>\n            Shipment is in a draft state, it cannot be started from this state. Usually indicates that it contains incomplete data or unapproved values\n            </td></tr><tr><td nowrap><code>Ready</code></td><td>\n            Shipment is ready to be sent\n            </td></tr><tr><td nowrap><code>Shipping</code></td><td>\n            Shipment is in the process of being delivered. No changes will be applied to logger data during this status.\n            </td></tr><tr><td nowrap><code>Delivered</code></td><td>\n            Shipment has satisfied the conditions for delivery and is considered delivered.\n            </td></tr><tr><td nowrap><code>Closed</code></td><td>\n            Shipment has been closed\n            </td></tr><tr><td nowrap><code>Deleted</code></td><td>\n            Shipment was deleted from the system and was never sent to shipping status\n            </td></tr></table>"
          },
          "transitionType": {
            "enum": [
              "Automatic",
              "Manual"
            ],
            "type": "string",
            "description": "Type of shipment status change.<table><tr><th nowrap>Value</th><th>Description</th></tr><tr><td nowrap><code>Automatic</code></td><td>\n            The shipment state transition was done through an automatic process.\n            </td></tr><tr><td nowrap><code>Manual</code></td><td>\n            The shipment state transition was done through a manual process.\n            </td></tr></table>"
          },
          "statusChangedTimeStamp": {
            "type": "string",
            "description": "The timestamp of when the shipment status change event was created.<span class=\"input-format\"> <a href=\"https://en.wikipedia.org/wiki/ISO_8601\" target=\"_blank\">Format: ISO 8601 (YYYY-MM-DDThh:mm:ssZ)</a></span>"
          },
          "effectiveTimeStamp": {
            "type": "string",
            "description": "Timestamp indicating the exact date and time that the status change took effect.\r\nThis value matches the ```StatusChangedTimeStamp``` value except in cases where users manually transition shipments\r\nbetween states. Then, this value reflects the value that was specified when the shipment was manually transitioned to the state.\r\n<note>This value should in most cases be preferred over ```StatusChangedTimeStamp``` as it will reflect more accurately the exact date of the status change.</note><span class=\"input-format\"> <a href=\"https://en.wikipedia.org/wiki/ISO_8601\" target=\"_blank\">Format: ISO 8601 (YYYY-MM-DDThh:mm:ssZ)</a></span>"
          }
        },
        "additionalProperties": false,
        "description": "Defines an Event Subscription Shipment Status Deleted Payload"
      },
      "EventSubscriptionShipmentStatusDeletedPayloadEventSubscription": {
        "type": "object",
        "properties": {
          "deliveryId": {
            "type": "string",
            "description": "A <a href=\"https://en.wikipedia.org/wiki/Universally_unique_identifier\" target=\"_blank\">universally unique identifier</a> (UUID/GUID) for this event delivery attempt.<remarks>See this value in combination with the ```Reference``` field can be used to distinguish between different delivery attempts for the same event reference.</remarks>"
          },
          "attempt": {
            "type": "integer",
            "description": "An incremental number representing the delivery attempt. First delivery has a value of 1.",
            "format": "int32"
          },
          "reference": {
            "type": "string",
            "description": "Customer supplied unique reference for this event subscription."
          },
          "eventType": {
            "enum": [
              "shipment.report.created",
              "shipment.status.changed",
              "shipment.status.changed.ready",
              "shipment.status.changed.shipping",
              "shipment.status.changed.delivered",
              "shipment.status.changed.closed",
              "shipment.status.changed.deleted",
              "shipment.product.quality.changed",
              "shipment.logger.rearm",
              "shipment.logger.excursion.raised",
              "shipment.logger.button.pressed",
              "shipment.logger.status.changed",
              "shipment.logger.status.changed.shipping",
              "shipment.logger.status.changed.delivered",
              "shipment.logger.light.changed",
              "shipment.logger.geostatus.changed",
              "shipment.analysis.completed",
              "carrier.milestone.published",
              "shipment.data.temperatures.added",
              "shipment.data.geotraces.added"
            ],
            "type": "string",
            "description": "The type of the event.<table><tr><th nowrap>Value</th><th>Description</th></tr><tr><td nowrap><code>shipment.report.created</code></td><td>\n            Occurs whenever a new report is generated for the shipment\n            </td></tr><tr><td nowrap><code>shipment.status.changed</code></td><td>\n            Occurs whenever the status changes for the shipment\n            </td></tr><tr><td nowrap><code>shipment.status.changed.ready</code></td><td>\n            Occurs whenever shipment status is changed to ready (1)\n            </td></tr><tr><td nowrap><code>shipment.status.changed.shipping</code></td><td>\n            Occurs whenever shipment status is changed to shipping (1)\n            </td></tr><tr><td nowrap><code>shipment.status.changed.delivered</code></td><td>\n            Occurs whenever shipment status is changed to delivered (1)\n            </td></tr><tr><td nowrap><code>shipment.status.changed.closed</code></td><td>\n            Occurs whenever shipment status is changed to closed (1)\n            </td></tr><tr><td nowrap><code>shipment.status.changed.deleted</code></td><td>\n            Occurs whenever shipment status is changed to deleted (1)\n            </td></tr><tr><td nowrap><code>shipment.product.quality.changed</code></td><td>\n            Occurs whenever a product quality changes for the shipment\n            </td></tr><tr><td nowrap><code>shipment.logger.rearm</code></td><td>\n            Occurs when a logger should have its boundaries rearmed\n            </td></tr><tr><td nowrap><code>shipment.logger.excursion.raised</code></td><td>\n            Occurs when a logger sends a notification that an excursion was raised\n            </td></tr><tr><td nowrap><code>shipment.logger.button.pressed</code></td><td>\n            Occurs when a logger button is pressed\n            </td></tr><tr><td nowrap><code>shipment.logger.status.changed</code></td><td>\n            Occurs whenever shipment logger status is changed (2)\n            </td></tr><tr><td nowrap><code>shipment.logger.status.changed.shipping</code></td><td>\n            Occurs whenever shipment logger status is changed to shipping (3)\n            </td></tr><tr><td nowrap><code>shipment.logger.status.changed.delivered</code></td><td>\n            Occurs whenever shipment logger status is changed to delivered (3)\n            </td></tr><tr><td nowrap><code>shipment.logger.light.changed</code></td><td>\n            Occurs whenever the light on a logger changes\n            </td></tr><tr><td nowrap><code>shipment.logger.geostatus.changed</code></td><td>\n            Occurs whenever the geo status of a logger changes\n            </td></tr><tr><td nowrap><code>shipment.analysis.completed</code></td><td>\n            Occurs whenever a shipment analysis has completed\n            </td></tr><tr><td nowrap><code>carrier.milestone.published</code></td><td>\n            Occurs whenever a carrier milestone is published\n            </td></tr><tr><td nowrap><code>shipment.data.temperatures.added</code></td><td>\n            Occurs whenever shipment temperature data is added (Streaming)\n            </td></tr><tr><td nowrap><code>shipment.data.geotraces.added</code></td><td>\n            Occurs whenever shipment geo-trace data is added (Streaming)\n            </td></tr></table>"
          },
          "payload": {
            "allOf": [
              {
                "$ref": "#/components/schemas/EventSubscriptionShipmentStatusDeletedPayload"
              }
            ],
            "description": "The data payload of the event subscription.<remarks>Use the value from the ```EventType``` field to determine how to de-serialize this data.</remarks>"
          },
          "payloadVersion": {
            "enum": [
              "latest",
              "1"
            ],
            "type": "string",
            "description": "The schema version of the data payload object.<table><tr><th nowrap>Value</th><th>Description</th></tr><tr><td nowrap><code>latest</code></td><td>\n            Explicitly request the latest version of the event subscription payload.\n            This should be the default unless you have explicit dependency on a particular\n            payload schema version.\n            </td></tr><tr><td nowrap><code>1</code></td><td>\n            Fixes the event subscription event payload schema to version 1.\n            </td></tr></table>"
          },
          "properties": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/CustomProperty"
            },
            "description": "List of customer defined properties that were supplied when the event subscription endpoint was created.\r\nThis structure can be useful for storing additional information about the event object in a structured format."
          },
          "mode": {
            "enum": [
              "Event",
              "Simulated"
            ],
            "type": "string",
            "description": "The mode that describes the triggering of the event subscription event. This indicates through what process this event\r\nwas raised. Use this to determine how to process the incoming events as some states may report duplicate or test events.<table><tr><th nowrap>Value</th><th>Description</th></tr><tr><td nowrap><code>Event</code></td><td>\n            The event was raised automatically by the Controlant integration system as a response\n            to an event in the platform.\n            </td></tr><tr><td nowrap><code>Simulated</code></td><td>\n            The event is a result of a simulation event request manually made through the Integration system by\n            a developer or an authorized user.\n            Simulated event payloads should be ignored in production environments.</td></tr></table>"
          },
          "environment": {
            "enum": [
              "Live",
              "UAT"
            ],
            "type": "string",
            "description": "Defines the environment that the event originated from.\r\n<warn>All non-LIVE event payloads should be ignored in production environments.</warn><table><tr><th nowrap>Value</th><th>Description</th></tr><tr><td nowrap><code>Live</code></td><td>\n            Event originated from the Controlant live production system.\n            Events generated by this environment should always be processed.\n            </td></tr><tr><td nowrap><code>UAT</code></td><td>\n            Event originated from the customer accessible Controlant User Acceptance Test environments.\n            </td></tr></table>"
          },
          "generated": {
            "type": "string",
            "description": "Timestamp when the event was generated by the Controlant platform.<span class=\"input-format\"> <a href=\"https://en.wikipedia.org/wiki/ISO_8601\" target=\"_blank\">Format: ISO 8601 (YYYY-MM-DDThh:mm:ssZ)</a></span>"
          }
        },
        "additionalProperties": false,
        "description": "Contains the data posted to the event subscription endpoints. Structure houses the event meta data such as fingerprints, times, type of payload and the payload itself"
      },
      "EventSubscriptionShipmentStatusDeliveredPayload": {
        "type": "object",
        "properties": {
          "shipmentReference": {
            "type": "string",
            "description": "Customer supplied unique reference value that identifies the shipment."
          },
          "status": {
            "enum": [
              "Draft",
              "Ready",
              "Shipping",
              "Delivered",
              "Closed",
              "Deleted"
            ],
            "type": "string",
            "description": "Status of the shipment.<table><tr><th nowrap>Value</th><th>Description</th></tr><tr><td nowrap><code>Draft</code></td><td>\n            Shipment is in a draft state, it cannot be started from this state. Usually indicates that it contains incomplete data or unapproved values\n            </td></tr><tr><td nowrap><code>Ready</code></td><td>\n            Shipment is ready to be sent\n            </td></tr><tr><td nowrap><code>Shipping</code></td><td>\n            Shipment is in the process of being delivered. No changes will be applied to logger data during this status.\n            </td></tr><tr><td nowrap><code>Delivered</code></td><td>\n            Shipment has satisfied the conditions for delivery and is considered delivered.\n            </td></tr><tr><td nowrap><code>Closed</code></td><td>\n            Shipment has been closed\n            </td></tr><tr><td nowrap><code>Deleted</code></td><td>\n            Shipment was deleted from the system and was never sent to shipping status\n            </td></tr></table>"
          },
          "previousStatus": {
            "enum": [
              "Draft",
              "Ready",
              "Shipping",
              "Delivered",
              "Closed",
              "Deleted"
            ],
            "type": "string",
            "description": "Previous status of the shipment, before change.<table><tr><th nowrap>Value</th><th>Description</th></tr><tr><td nowrap><code>Draft</code></td><td>\n            Shipment is in a draft state, it cannot be started from this state. Usually indicates that it contains incomplete data or unapproved values\n            </td></tr><tr><td nowrap><code>Ready</code></td><td>\n            Shipment is ready to be sent\n            </td></tr><tr><td nowrap><code>Shipping</code></td><td>\n            Shipment is in the process of being delivered. No changes will be applied to logger data during this status.\n            </td></tr><tr><td nowrap><code>Delivered</code></td><td>\n            Shipment has satisfied the conditions for delivery and is considered delivered.\n            </td></tr><tr><td nowrap><code>Closed</code></td><td>\n            Shipment has been closed\n            </td></tr><tr><td nowrap><code>Deleted</code></td><td>\n            Shipment was deleted from the system and was never sent to shipping status\n            </td></tr></table>"
          },
          "transitionType": {
            "enum": [
              "Automatic",
              "Manual"
            ],
            "type": "string",
            "description": "Type of shipment status change.<table><tr><th nowrap>Value</th><th>Description</th></tr><tr><td nowrap><code>Automatic</code></td><td>\n            The shipment state transition was done through an automatic process.\n            </td></tr><tr><td nowrap><code>Manual</code></td><td>\n            The shipment state transition was done through a manual process.\n            </td></tr></table>"
          },
          "statusChangedTimeStamp": {
            "type": "string",
            "description": "The timestamp of when the shipment status change event was created.<span class=\"input-format\"> <a href=\"https://en.wikipedia.org/wiki/ISO_8601\" target=\"_blank\">Format: ISO 8601 (YYYY-MM-DDThh:mm:ssZ)</a></span>"
          },
          "effectiveTimeStamp": {
            "type": "string",
            "description": "Timestamp indicating the exact date and time that the status change took effect.\r\nThis value matches the ```StatusChangedTimeStamp``` value except in cases where users manually transition shipments\r\nbetween states. Then, this value reflects the value that was specified when the shipment was manually transitioned to the state.\r\n<note>This value should in most cases be preferred over ```StatusChangedTimeStamp``` as it will reflect more accurately the exact date of the status change.</note><span class=\"input-format\"> <a href=\"https://en.wikipedia.org/wiki/ISO_8601\" target=\"_blank\">Format: ISO 8601 (YYYY-MM-DDThh:mm:ssZ)</a></span>"
          }
        },
        "additionalProperties": false,
        "description": "Defines an Event Subscription Shipment Status Delivered Payload"
      },
      "EventSubscriptionShipmentStatusDeliveredPayloadEventSubscription": {
        "type": "object",
        "properties": {
          "deliveryId": {
            "type": "string",
            "description": "A <a href=\"https://en.wikipedia.org/wiki/Universally_unique_identifier\" target=\"_blank\">universally unique identifier</a> (UUID/GUID) for this event delivery attempt.<remarks>See this value in combination with the ```Reference``` field can be used to distinguish between different delivery attempts for the same event reference.</remarks>"
          },
          "attempt": {
            "type": "integer",
            "description": "An incremental number representing the delivery attempt. First delivery has a value of 1.",
            "format": "int32"
          },
          "reference": {
            "type": "string",
            "description": "Customer supplied unique reference for this event subscription."
          },
          "eventType": {
            "enum": [
              "shipment.report.created",
              "shipment.status.changed",
              "shipment.status.changed.ready",
              "shipment.status.changed.shipping",
              "shipment.status.changed.delivered",
              "shipment.status.changed.closed",
              "shipment.status.changed.deleted",
              "shipment.product.quality.changed",
              "shipment.logger.rearm",
              "shipment.logger.excursion.raised",
              "shipment.logger.button.pressed",
              "shipment.logger.status.changed",
              "shipment.logger.status.changed.shipping",
              "shipment.logger.status.changed.delivered",
              "shipment.logger.light.changed",
              "shipment.logger.geostatus.changed",
              "shipment.analysis.completed",
              "carrier.milestone.published",
              "shipment.data.temperatures.added",
              "shipment.data.geotraces.added"
            ],
            "type": "string",
            "description": "The type of the event.<table><tr><th nowrap>Value</th><th>Description</th></tr><tr><td nowrap><code>shipment.report.created</code></td><td>\n            Occurs whenever a new report is generated for the shipment\n            </td></tr><tr><td nowrap><code>shipment.status.changed</code></td><td>\n            Occurs whenever the status changes for the shipment\n            </td></tr><tr><td nowrap><code>shipment.status.changed.ready</code></td><td>\n            Occurs whenever shipment status is changed to ready (1)\n            </td></tr><tr><td nowrap><code>shipment.status.changed.shipping</code></td><td>\n            Occurs whenever shipment status is changed to shipping (1)\n            </td></tr><tr><td nowrap><code>shipment.status.changed.delivered</code></td><td>\n            Occurs whenever shipment status is changed to delivered (1)\n            </td></tr><tr><td nowrap><code>shipment.status.changed.closed</code></td><td>\n            Occurs whenever shipment status is changed to closed (1)\n            </td></tr><tr><td nowrap><code>shipment.status.changed.deleted</code></td><td>\n            Occurs whenever shipment status is changed to deleted (1)\n            </td></tr><tr><td nowrap><code>shipment.product.quality.changed</code></td><td>\n            Occurs whenever a product quality changes for the shipment\n            </td></tr><tr><td nowrap><code>shipment.logger.rearm</code></td><td>\n            Occurs when a logger should have its boundaries rearmed\n            </td></tr><tr><td nowrap><code>shipment.logger.excursion.raised</code></td><td>\n            Occurs when a logger sends a notification that an excursion was raised\n            </td></tr><tr><td nowrap><code>shipment.logger.button.pressed</code></td><td>\n            Occurs when a logger button is pressed\n            </td></tr><tr><td nowrap><code>shipment.logger.status.changed</code></td><td>\n            Occurs whenever shipment logger status is changed (2)\n            </td></tr><tr><td nowrap><code>shipment.logger.status.changed.shipping</code></td><td>\n            Occurs whenever shipment logger status is changed to shipping (3)\n            </td></tr><tr><td nowrap><code>shipment.logger.status.changed.delivered</code></td><td>\n            Occurs whenever shipment logger status is changed to delivered (3)\n            </td></tr><tr><td nowrap><code>shipment.logger.light.changed</code></td><td>\n            Occurs whenever the light on a logger changes\n            </td></tr><tr><td nowrap><code>shipment.logger.geostatus.changed</code></td><td>\n            Occurs whenever the geo status of a logger changes\n            </td></tr><tr><td nowrap><code>shipment.analysis.completed</code></td><td>\n            Occurs whenever a shipment analysis has completed\n            </td></tr><tr><td nowrap><code>carrier.milestone.published</code></td><td>\n            Occurs whenever a carrier milestone is published\n            </td></tr><tr><td nowrap><code>shipment.data.temperatures.added</code></td><td>\n            Occurs whenever shipment temperature data is added (Streaming)\n            </td></tr><tr><td nowrap><code>shipment.data.geotraces.added</code></td><td>\n            Occurs whenever shipment geo-trace data is added (Streaming)\n            </td></tr></table>"
          },
          "payload": {
            "allOf": [
              {
                "$ref": "#/components/schemas/EventSubscriptionShipmentStatusDeliveredPayload"
              }
            ],
            "description": "The data payload of the event subscription.<remarks>Use the value from the ```EventType``` field to determine how to de-serialize this data.</remarks>"
          },
          "payloadVersion": {
            "enum": [
              "latest",
              "1"
            ],
            "type": "string",
            "description": "The schema version of the data payload object.<table><tr><th nowrap>Value</th><th>Description</th></tr><tr><td nowrap><code>latest</code></td><td>\n            Explicitly request the latest version of the event subscription payload.\n            This should be the default unless you have explicit dependency on a particular\n            payload schema version.\n            </td></tr><tr><td nowrap><code>1</code></td><td>\n            Fixes the event subscription event payload schema to version 1.\n            </td></tr></table>"
          },
          "properties": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/CustomProperty"
            },
            "description": "List of customer defined properties that were supplied when the event subscription endpoint was created.\r\nThis structure can be useful for storing additional information about the event object in a structured format."
          },
          "mode": {
            "enum": [
              "Event",
              "Simulated"
            ],
            "type": "string",
            "description": "The mode that describes the triggering of the event subscription event. This indicates through what process this event\r\nwas raised. Use this to determine how to process the incoming events as some states may report duplicate or test events.<table><tr><th nowrap>Value</th><th>Description</th></tr><tr><td nowrap><code>Event</code></td><td>\n            The event was raised automatically by the Controlant integration system as a response\n            to an event in the platform.\n            </td></tr><tr><td nowrap><code>Simulated</code></td><td>\n            The event is a result of a simulation event request manually made through the Integration system by\n            a developer or an authorized user.\n            Simulated event payloads should be ignored in production environments.</td></tr></table>"
          },
          "environment": {
            "enum": [
              "Live",
              "UAT"
            ],
            "type": "string",
            "description": "Defines the environment that the event originated from.\r\n<warn>All non-LIVE event payloads should be ignored in production environments.</warn><table><tr><th nowrap>Value</th><th>Description</th></tr><tr><td nowrap><code>Live</code></td><td>\n            Event originated from the Controlant live production system.\n            Events generated by this environment should always be processed.\n            </td></tr><tr><td nowrap><code>UAT</code></td><td>\n            Event originated from the customer accessible Controlant User Acceptance Test environments.\n            </td></tr></table>"
          },
          "generated": {
            "type": "string",
            "description": "Timestamp when the event was generated by the Controlant platform.<span class=\"input-format\"> <a href=\"https://en.wikipedia.org/wiki/ISO_8601\" target=\"_blank\">Format: ISO 8601 (YYYY-MM-DDThh:mm:ssZ)</a></span>"
          }
        },
        "additionalProperties": false,
        "description": "Contains the data posted to the event subscription endpoints. Structure houses the event meta data such as fingerprints, times, type of payload and the payload itself"
      },
      "EventSubscriptionShipmentStatusReadyPayload": {
        "type": "object",
        "properties": {
          "shipmentReference": {
            "type": "string",
            "description": "Customer supplied unique reference value that identifies the shipment."
          },
          "status": {
            "enum": [
              "Draft",
              "Ready",
              "Shipping",
              "Delivered",
              "Closed",
              "Deleted"
            ],
            "type": "string",
            "description": "Status of the shipment.<table><tr><th nowrap>Value</th><th>Description</th></tr><tr><td nowrap><code>Draft</code></td><td>\n            Shipment is in a draft state, it cannot be started from this state. Usually indicates that it contains incomplete data or unapproved values\n            </td></tr><tr><td nowrap><code>Ready</code></td><td>\n            Shipment is ready to be sent\n            </td></tr><tr><td nowrap><code>Shipping</code></td><td>\n            Shipment is in the process of being delivered. No changes will be applied to logger data during this status.\n            </td></tr><tr><td nowrap><code>Delivered</code></td><td>\n            Shipment has satisfied the conditions for delivery and is considered delivered.\n            </td></tr><tr><td nowrap><code>Closed</code></td><td>\n            Shipment has been closed\n            </td></tr><tr><td nowrap><code>Deleted</code></td><td>\n            Shipment was deleted from the system and was never sent to shipping status\n            </td></tr></table>"
          },
          "previousStatus": {
            "enum": [
              "Draft",
              "Ready",
              "Shipping",
              "Delivered",
              "Closed",
              "Deleted"
            ],
            "type": "string",
            "description": "Previous status of the shipment, before change.<table><tr><th nowrap>Value</th><th>Description</th></tr><tr><td nowrap><code>Draft</code></td><td>\n            Shipment is in a draft state, it cannot be started from this state. Usually indicates that it contains incomplete data or unapproved values\n            </td></tr><tr><td nowrap><code>Ready</code></td><td>\n            Shipment is ready to be sent\n            </td></tr><tr><td nowrap><code>Shipping</code></td><td>\n            Shipment is in the process of being delivered. No changes will be applied to logger data during this status.\n            </td></tr><tr><td nowrap><code>Delivered</code></td><td>\n            Shipment has satisfied the conditions for delivery and is considered delivered.\n            </td></tr><tr><td nowrap><code>Closed</code></td><td>\n            Shipment has been closed\n            </td></tr><tr><td nowrap><code>Deleted</code></td><td>\n            Shipment was deleted from the system and was never sent to shipping status\n            </td></tr></table>"
          },
          "transitionType": {
            "enum": [
              "Automatic",
              "Manual"
            ],
            "type": "string",
            "description": "Type of shipment status change.<table><tr><th nowrap>Value</th><th>Description</th></tr><tr><td nowrap><code>Automatic</code></td><td>\n            The shipment state transition was done through an automatic process.\n            </td></tr><tr><td nowrap><code>Manual</code></td><td>\n            The shipment state transition was done through a manual process.\n            </td></tr></table>"
          },
          "statusChangedTimeStamp": {
            "type": "string",
            "description": "The timestamp of when the shipment status change event was created.<span class=\"input-format\"> <a href=\"https://en.wikipedia.org/wiki/ISO_8601\" target=\"_blank\">Format: ISO 8601 (YYYY-MM-DDThh:mm:ssZ)</a></span>"
          },
          "effectiveTimeStamp": {
            "type": "string",
            "description": "Timestamp indicating the exact date and time that the status change took effect.\r\nThis value matches the ```StatusChangedTimeStamp``` value except in cases where users manually transition shipments\r\nbetween states. Then, this value reflects the value that was specified when the shipment was manually transitioned to the state.\r\n<note>This value should in most cases be preferred over ```StatusChangedTimeStamp``` as it will reflect more accurately the exact date of the status change.</note><span class=\"input-format\"> <a href=\"https://en.wikipedia.org/wiki/ISO_8601\" target=\"_blank\">Format: ISO 8601 (YYYY-MM-DDThh:mm:ssZ)</a></span>"
          }
        },
        "additionalProperties": false,
        "description": "Defines an Event Subscription Shipment Status Ready Payload"
      },
      "EventSubscriptionShipmentStatusReadyPayloadEventSubscription": {
        "type": "object",
        "properties": {
          "deliveryId": {
            "type": "string",
            "description": "A <a href=\"https://en.wikipedia.org/wiki/Universally_unique_identifier\" target=\"_blank\">universally unique identifier</a> (UUID/GUID) for this event delivery attempt.<remarks>See this value in combination with the ```Reference``` field can be used to distinguish between different delivery attempts for the same event reference.</remarks>"
          },
          "attempt": {
            "type": "integer",
            "description": "An incremental number representing the delivery attempt. First delivery has a value of 1.",
            "format": "int32"
          },
          "reference": {
            "type": "string",
            "description": "Customer supplied unique reference for this event subscription."
          },
          "eventType": {
            "enum": [
              "shipment.report.created",
              "shipment.status.changed",
              "shipment.status.changed.ready",
              "shipment.status.changed.shipping",
              "shipment.status.changed.delivered",
              "shipment.status.changed.closed",
              "shipment.status.changed.deleted",
              "shipment.product.quality.changed",
              "shipment.logger.rearm",
              "shipment.logger.excursion.raised",
              "shipment.logger.button.pressed",
              "shipment.logger.status.changed",
              "shipment.logger.status.changed.shipping",
              "shipment.logger.status.changed.delivered",
              "shipment.logger.light.changed",
              "shipment.logger.geostatus.changed",
              "shipment.analysis.completed",
              "carrier.milestone.published",
              "shipment.data.temperatures.added",
              "shipment.data.geotraces.added"
            ],
            "type": "string",
            "description": "The type of the event.<table><tr><th nowrap>Value</th><th>Description</th></tr><tr><td nowrap><code>shipment.report.created</code></td><td>\n            Occurs whenever a new report is generated for the shipment\n            </td></tr><tr><td nowrap><code>shipment.status.changed</code></td><td>\n            Occurs whenever the status changes for the shipment\n            </td></tr><tr><td nowrap><code>shipment.status.changed.ready</code></td><td>\n            Occurs whenever shipment status is changed to ready (1)\n            </td></tr><tr><td nowrap><code>shipment.status.changed.shipping</code></td><td>\n            Occurs whenever shipment status is changed to shipping (1)\n            </td></tr><tr><td nowrap><code>shipment.status.changed.delivered</code></td><td>\n            Occurs whenever shipment status is changed to delivered (1)\n            </td></tr><tr><td nowrap><code>shipment.status.changed.closed</code></td><td>\n            Occurs whenever shipment status is changed to closed (1)\n            </td></tr><tr><td nowrap><code>shipment.status.changed.deleted</code></td><td>\n            Occurs whenever shipment status is changed to deleted (1)\n            </td></tr><tr><td nowrap><code>shipment.product.quality.changed</code></td><td>\n            Occurs whenever a product quality changes for the shipment\n            </td></tr><tr><td nowrap><code>shipment.logger.rearm</code></td><td>\n            Occurs when a logger should have its boundaries rearmed\n            </td></tr><tr><td nowrap><code>shipment.logger.excursion.raised</code></td><td>\n            Occurs when a logger sends a notification that an excursion was raised\n            </td></tr><tr><td nowrap><code>shipment.logger.button.pressed</code></td><td>\n            Occurs when a logger button is pressed\n            </td></tr><tr><td nowrap><code>shipment.logger.status.changed</code></td><td>\n            Occurs whenever shipment logger status is changed (2)\n            </td></tr><tr><td nowrap><code>shipment.logger.status.changed.shipping</code></td><td>\n            Occurs whenever shipment logger status is changed to shipping (3)\n            </td></tr><tr><td nowrap><code>shipment.logger.status.changed.delivered</code></td><td>\n            Occurs whenever shipment logger status is changed to delivered (3)\n            </td></tr><tr><td nowrap><code>shipment.logger.light.changed</code></td><td>\n            Occurs whenever the light on a logger changes\n            </td></tr><tr><td nowrap><code>shipment.logger.geostatus.changed</code></td><td>\n            Occurs whenever the geo status of a logger changes\n            </td></tr><tr><td nowrap><code>shipment.analysis.completed</code></td><td>\n            Occurs whenever a shipment analysis has completed\n            </td></tr><tr><td nowrap><code>carrier.milestone.published</code></td><td>\n            Occurs whenever a carrier milestone is published\n            </td></tr><tr><td nowrap><code>shipment.data.temperatures.added</code></td><td>\n            Occurs whenever shipment temperature data is added (Streaming)\n            </td></tr><tr><td nowrap><code>shipment.data.geotraces.added</code></td><td>\n            Occurs whenever shipment geo-trace data is added (Streaming)\n            </td></tr></table>"
          },
          "payload": {
            "allOf": [
              {
                "$ref": "#/components/schemas/EventSubscriptionShipmentStatusReadyPayload"
              }
            ],
            "description": "The data payload of the event subscription.<remarks>Use the value from the ```EventType``` field to determine how to de-serialize this data.</remarks>"
          },
          "payloadVersion": {
            "enum": [
              "latest",
              "1"
            ],
            "type": "string",
            "description": "The schema version of the data payload object.<table><tr><th nowrap>Value</th><th>Description</th></tr><tr><td nowrap><code>latest</code></td><td>\n            Explicitly request the latest version of the event subscription payload.\n            This should be the default unless you have explicit dependency on a particular\n            payload schema version.\n            </td></tr><tr><td nowrap><code>1</code></td><td>\n            Fixes the event subscription event payload schema to version 1.\n            </td></tr></table>"
          },
          "properties": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/CustomProperty"
            },
            "description": "List of customer defined properties that were supplied when the event subscription endpoint was created.\r\nThis structure can be useful for storing additional information about the event object in a structured format."
          },
          "mode": {
            "enum": [
              "Event",
              "Simulated"
            ],
            "type": "string",
            "description": "The mode that describes the triggering of the event subscription event. This indicates through what process this event\r\nwas raised. Use this to determine how to process the incoming events as some states may report duplicate or test events.<table><tr><th nowrap>Value</th><th>Description</th></tr><tr><td nowrap><code>Event</code></td><td>\n            The event was raised automatically by the Controlant integration system as a response\n            to an event in the platform.\n            </td></tr><tr><td nowrap><code>Simulated</code></td><td>\n            The event is a result of a simulation event request manually made through the Integration system by\n            a developer or an authorized user.\n            Simulated event payloads should be ignored in production environments.</td></tr></table>"
          },
          "environment": {
            "enum": [
              "Live",
              "UAT"
            ],
            "type": "string",
            "description": "Defines the environment that the event originated from.\r\n<warn>All non-LIVE event payloads should be ignored in production environments.</warn><table><tr><th nowrap>Value</th><th>Description</th></tr><tr><td nowrap><code>Live</code></td><td>\n            Event originated from the Controlant live production system.\n            Events generated by this environment should always be processed.\n            </td></tr><tr><td nowrap><code>UAT</code></td><td>\n            Event originated from the customer accessible Controlant User Acceptance Test environments.\n            </td></tr></table>"
          },
          "generated": {
            "type": "string",
            "description": "Timestamp when the event was generated by the Controlant platform.<span class=\"input-format\"> <a href=\"https://en.wikipedia.org/wiki/ISO_8601\" target=\"_blank\">Format: ISO 8601 (YYYY-MM-DDThh:mm:ssZ)</a></span>"
          }
        },
        "additionalProperties": false,
        "description": "Contains the data posted to the event subscription endpoints. Structure houses the event meta data such as fingerprints, times, type of payload and the payload itself"
      },
      "EventSubscriptionShipmentStatusShippingPayload": {
        "type": "object",
        "properties": {
          "shipmentReference": {
            "type": "string",
            "description": "Customer supplied unique reference value that identifies the shipment."
          },
          "status": {
            "enum": [
              "Draft",
              "Ready",
              "Shipping",
              "Delivered",
              "Closed",
              "Deleted"
            ],
            "type": "string",
            "description": "Status of the shipment.<table><tr><th nowrap>Value</th><th>Description</th></tr><tr><td nowrap><code>Draft</code></td><td>\n            Shipment is in a draft state, it cannot be started from this state. Usually indicates that it contains incomplete data or unapproved values\n            </td></tr><tr><td nowrap><code>Ready</code></td><td>\n            Shipment is ready to be sent\n            </td></tr><tr><td nowrap><code>Shipping</code></td><td>\n            Shipment is in the process of being delivered. No changes will be applied to logger data during this status.\n            </td></tr><tr><td nowrap><code>Delivered</code></td><td>\n            Shipment has satisfied the conditions for delivery and is considered delivered.\n            </td></tr><tr><td nowrap><code>Closed</code></td><td>\n            Shipment has been closed\n            </td></tr><tr><td nowrap><code>Deleted</code></td><td>\n            Shipment was deleted from the system and was never sent to shipping status\n            </td></tr></table>"
          },
          "previousStatus": {
            "enum": [
              "Draft",
              "Ready",
              "Shipping",
              "Delivered",
              "Closed",
              "Deleted"
            ],
            "type": "string",
            "description": "Previous status of the shipment, before change.<table><tr><th nowrap>Value</th><th>Description</th></tr><tr><td nowrap><code>Draft</code></td><td>\n            Shipment is in a draft state, it cannot be started from this state. Usually indicates that it contains incomplete data or unapproved values\n            </td></tr><tr><td nowrap><code>Ready</code></td><td>\n            Shipment is ready to be sent\n            </td></tr><tr><td nowrap><code>Shipping</code></td><td>\n            Shipment is in the process of being delivered. No changes will be applied to logger data during this status.\n            </td></tr><tr><td nowrap><code>Delivered</code></td><td>\n            Shipment has satisfied the conditions for delivery and is considered delivered.\n            </td></tr><tr><td nowrap><code>Closed</code></td><td>\n            Shipment has been closed\n            </td></tr><tr><td nowrap><code>Deleted</code></td><td>\n            Shipment was deleted from the system and was never sent to shipping status\n            </td></tr></table>"
          },
          "transitionType": {
            "enum": [
              "Automatic",
              "Manual"
            ],
            "type": "string",
            "description": "Type of shipment status change.<table><tr><th nowrap>Value</th><th>Description</th></tr><tr><td nowrap><code>Automatic</code></td><td>\n            The shipment state transition was done through an automatic process.\n            </td></tr><tr><td nowrap><code>Manual</code></td><td>\n            The shipment state transition was done through a manual process.\n            </td></tr></table>"
          },
          "statusChangedTimeStamp": {
            "type": "string",
            "description": "The timestamp of when the shipment status change event was created.<span class=\"input-format\"> <a href=\"https://en.wikipedia.org/wiki/ISO_8601\" target=\"_blank\">Format: ISO 8601 (YYYY-MM-DDThh:mm:ssZ)</a></span>"
          },
          "effectiveTimeStamp": {
            "type": "string",
            "description": "Timestamp indicating the exact date and time that the status change took effect.\r\nThis value matches the ```StatusChangedTimeStamp``` value except in cases where users manually transition shipments\r\nbetween states. Then, this value reflects the value that was specified when the shipment was manually transitioned to the state.\r\n<note>This value should in most cases be preferred over ```StatusChangedTimeStamp``` as it will reflect more accurately the exact date of the status change.</note><span class=\"input-format\"> <a href=\"https://en.wikipedia.org/wiki/ISO_8601\" target=\"_blank\">Format: ISO 8601 (YYYY-MM-DDThh:mm:ssZ)</a></span>"
          }
        },
        "additionalProperties": false,
        "description": "Defines an Event Subscription Shipment Status Shipping Payload"
      },
      "EventSubscriptionShipmentStatusShippingPayloadEventSubscription": {
        "type": "object",
        "properties": {
          "deliveryId": {
            "type": "string",
            "description": "A <a href=\"https://en.wikipedia.org/wiki/Universally_unique_identifier\" target=\"_blank\">universally unique identifier</a> (UUID/GUID) for this event delivery attempt.<remarks>See this value in combination with the ```Reference``` field can be used to distinguish between different delivery attempts for the same event reference.</remarks>"
          },
          "attempt": {
            "type": "integer",
            "description": "An incremental number representing the delivery attempt. First delivery has a value of 1.",
            "format": "int32"
          },
          "reference": {
            "type": "string",
            "description": "Customer supplied unique reference for this event subscription."
          },
          "eventType": {
            "enum": [
              "shipment.report.created",
              "shipment.status.changed",
              "shipment.status.changed.ready",
              "shipment.status.changed.shipping",
              "shipment.status.changed.delivered",
              "shipment.status.changed.closed",
              "shipment.status.changed.deleted",
              "shipment.product.quality.changed",
              "shipment.logger.rearm",
              "shipment.logger.excursion.raised",
              "shipment.logger.button.pressed",
              "shipment.logger.status.changed",
              "shipment.logger.status.changed.shipping",
              "shipment.logger.status.changed.delivered",
              "shipment.logger.light.changed",
              "shipment.logger.geostatus.changed",
              "shipment.analysis.completed",
              "carrier.milestone.published",
              "shipment.data.temperatures.added",
              "shipment.data.geotraces.added"
            ],
            "type": "string",
            "description": "The type of the event.<table><tr><th nowrap>Value</th><th>Description</th></tr><tr><td nowrap><code>shipment.report.created</code></td><td>\n            Occurs whenever a new report is generated for the shipment\n            </td></tr><tr><td nowrap><code>shipment.status.changed</code></td><td>\n            Occurs whenever the status changes for the shipment\n            </td></tr><tr><td nowrap><code>shipment.status.changed.ready</code></td><td>\n            Occurs whenever shipment status is changed to ready (1)\n            </td></tr><tr><td nowrap><code>shipment.status.changed.shipping</code></td><td>\n            Occurs whenever shipment status is changed to shipping (1)\n            </td></tr><tr><td nowrap><code>shipment.status.changed.delivered</code></td><td>\n            Occurs whenever shipment status is changed to delivered (1)\n            </td></tr><tr><td nowrap><code>shipment.status.changed.closed</code></td><td>\n            Occurs whenever shipment status is changed to closed (1)\n            </td></tr><tr><td nowrap><code>shipment.status.changed.deleted</code></td><td>\n            Occurs whenever shipment status is changed to deleted (1)\n            </td></tr><tr><td nowrap><code>shipment.product.quality.changed</code></td><td>\n            Occurs whenever a product quality changes for the shipment\n            </td></tr><tr><td nowrap><code>shipment.logger.rearm</code></td><td>\n            Occurs when a logger should have its boundaries rearmed\n            </td></tr><tr><td nowrap><code>shipment.logger.excursion.raised</code></td><td>\n            Occurs when a logger sends a notification that an excursion was raised\n            </td></tr><tr><td nowrap><code>shipment.logger.button.pressed</code></td><td>\n            Occurs when a logger button is pressed\n            </td></tr><tr><td nowrap><code>shipment.logger.status.changed</code></td><td>\n            Occurs whenever shipment logger status is changed (2)\n            </td></tr><tr><td nowrap><code>shipment.logger.status.changed.shipping</code></td><td>\n            Occurs whenever shipment logger status is changed to shipping (3)\n            </td></tr><tr><td nowrap><code>shipment.logger.status.changed.delivered</code></td><td>\n            Occurs whenever shipment logger status is changed to delivered (3)\n            </td></tr><tr><td nowrap><code>shipment.logger.light.changed</code></td><td>\n            Occurs whenever the light on a logger changes\n            </td></tr><tr><td nowrap><code>shipment.logger.geostatus.changed</code></td><td>\n            Occurs whenever the geo status of a logger changes\n            </td></tr><tr><td nowrap><code>shipment.analysis.completed</code></td><td>\n            Occurs whenever a shipment analysis has completed\n            </td></tr><tr><td nowrap><code>carrier.milestone.published</code></td><td>\n            Occurs whenever a carrier milestone is published\n            </td></tr><tr><td nowrap><code>shipment.data.temperatures.added</code></td><td>\n            Occurs whenever shipment temperature data is added (Streaming)\n            </td></tr><tr><td nowrap><code>shipment.data.geotraces.added</code></td><td>\n            Occurs whenever shipment geo-trace data is added (Streaming)\n            </td></tr></table>"
          },
          "payload": {
            "allOf": [
              {
                "$ref": "#/components/schemas/EventSubscriptionShipmentStatusShippingPayload"
              }
            ],
            "description": "The data payload of the event subscription.<remarks>Use the value from the ```EventType``` field to determine how to de-serialize this data.</remarks>"
          },
          "payloadVersion": {
            "enum": [
              "latest",
              "1"
            ],
            "type": "string",
            "description": "The schema version of the data payload object.<table><tr><th nowrap>Value</th><th>Description</th></tr><tr><td nowrap><code>latest</code></td><td>\n            Explicitly request the latest version of the event subscription payload.\n            This should be the default unless you have explicit dependency on a particular\n            payload schema version.\n            </td></tr><tr><td nowrap><code>1</code></td><td>\n            Fixes the event subscription event payload schema to version 1.\n            </td></tr></table>"
          },
          "properties": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/CustomProperty"
            },
            "description": "List of customer defined properties that were supplied when the event subscription endpoint was created.\r\nThis structure can be useful for storing additional information about the event object in a structured format."
          },
          "mode": {
            "enum": [
              "Event",
              "Simulated"
            ],
            "type": "string",
            "description": "The mode that describes the triggering of the event subscription event. This indicates through what process this event\r\nwas raised. Use this to determine how to process the incoming events as some states may report duplicate or test events.<table><tr><th nowrap>Value</th><th>Description</th></tr><tr><td nowrap><code>Event</code></td><td>\n            The event was raised automatically by the Controlant integration system as a response\n            to an event in the platform.\n            </td></tr><tr><td nowrap><code>Simulated</code></td><td>\n            The event is a result of a simulation event request manually made through the Integration system by\n            a developer or an authorized user.\n            Simulated event payloads should be ignored in production environments.</td></tr></table>"
          },
          "environment": {
            "enum": [
              "Live",
              "UAT"
            ],
            "type": "string",
            "description": "Defines the environment that the event originated from.\r\n<warn>All non-LIVE event payloads should be ignored in production environments.</warn><table><tr><th nowrap>Value</th><th>Description</th></tr><tr><td nowrap><code>Live</code></td><td>\n            Event originated from the Controlant live production system.\n            Events generated by this environment should always be processed.\n            </td></tr><tr><td nowrap><code>UAT</code></td><td>\n            Event originated from the customer accessible Controlant User Acceptance Test environments.\n            </td></tr></table>"
          },
          "generated": {
            "type": "string",
            "description": "Timestamp when the event was generated by the Controlant platform.<span class=\"input-format\"> <a href=\"https://en.wikipedia.org/wiki/ISO_8601\" target=\"_blank\">Format: ISO 8601 (YYYY-MM-DDThh:mm:ssZ)</a></span>"
          }
        },
        "additionalProperties": false,
        "description": "Contains the data posted to the event subscription endpoints. Structure houses the event meta data such as fingerprints, times, type of payload and the payload itself"
      },
      "EventSubscriptionSimulationRequest": {
        "required": [
          "simulationPayload",
          "subscriptionReference"
        ],
        "type": "object",
        "properties": {
          "subscriptionReference": {
            "maxLength": 128,
            "minLength": 1,
            "type": "string",
            "description": "Limits the simulated event to only being sent to the event subscription with the specified reference."
          },
          "simulationPayload": {
            "maxLength": 4000,
            "type": "object",
            "description": "The sample payload to send as the simulation event payload.\r\n<note>This payload must be a valid JSON structure as it is defined at www.json.org</note>"
          }
        },
        "additionalProperties": false,
        "description": "Defines an Event Subscription Simulation Request"
      },
      "EventSubscriptionSimulationResponse": {
        "type": "object",
        "properties": {
          "success": {
            "type": "boolean",
            "description": "Was the requested operation successful or not. If set to false please refer to the Message property for description of the error."
          },
          "responseTime": {
            "type": "integer",
            "description": "The time taken in milliseconds for processing of the request.",
            "format": "int64"
          },
          "message": {
            "type": "string",
            "description": "Text description of the ```Success``` return value."
          }
        },
        "additionalProperties": false,
        "description": "Defines an Event Subscription Simulation Response"
      },
      "EventsRetrieval": {
        "required": [
          "timeFrom",
          "timeTo"
        ],
        "type": "object",
        "properties": {
          "timeFrom": {
            "maxLength": 22,
            "minLength": 1,
            "type": "string",
            "description": "If set, only return measurements generated by the logger on or after the specified time\r\n<note>The maximum time range between ```timeFrom``` and ```timeTo``` is 2 days</note><span class=\"input-format\"> <a href=\"https://en.wikipedia.org/wiki/ISO_8601\" target=\"_blank\">Format: ISO 8601 (YYYY-MM-DDThh:mm:ssZ)</a></span>"
          },
          "timeTo": {
            "maxLength": 22,
            "minLength": 1,
            "type": "string",
            "description": "If set, only return measurements generated by the logger on or before this time.<span class=\"input-format\"> <a href=\"https://en.wikipedia.org/wiki/ISO_8601\" target=\"_blank\">Format: ISO 8601 (YYYY-MM-DDThh:mm:ssZ)</a></span>"
          },
          "events": {
            "type": "array",
            "items": {
              "enum": [
                "ButtonPressed",
                "Delivered",
                "Status",
                "Light",
                "Sent",
                "ExcursionNotification",
                "SeverityChanged",
                "Rearm",
                "DataUpload"
              ],
              "type": "string",
              "description": "Enumeration values for Logger Event Type"
            },
            "description": "Filters the events that are retrieved for the logger. If this field is left empty then all logger events for the logger are retrieved<table><tr><th nowrap>Value</th><th>Description</th></tr><tr><td nowrap><code>ButtonPressed</code></td><td>\n            Start or Stop button pressed on the logger\n            </td></tr><tr><td nowrap><code>Delivered</code></td><td>\n            Logger has been delivered via button press, geo-fence or manually\n            </td></tr><tr><td nowrap><code>Status</code></td><td>\n            The shipping state of the logger has changed (i.e. when the logger leaves origin or arrives at destination)\n            </td></tr><tr><td nowrap><code>Light</code></td><td>\n            Logger has detected an abrupt change in light conditions\n            </td></tr><tr><td nowrap><code>Sent</code></td><td>\n            Logger has entered shipping mode, meaning it is en-route to the destination\n            </td></tr><tr><td nowrap><code>ExcursionNotification</code></td><td>\n            A notification (i.e. email or SMS) was sent to the contacts assigned to the shipment.\n            Note that notifications are only sent and this event thus raised when contacts are assigned to the shipment.\n            </td></tr><tr><td nowrap><code>SeverityChanged</code></td><td>\n            The logger detected a sensor value that exceeded the alarm boundaries set for the shipment.\n            The severity level can be consulted to determine the severity level of the event.\n            </td></tr><tr><td nowrap><code>Rearm</code></td><td>\n            The logger boundaries were re-armed. This can be done to have the logger re-send notifications if boundaries are violated again.\n            Without rearming the logger device will not re-send notifications for repeated boundary violations.\n            Note that despite rearming then the SeverityChanged event will not be raised again.\n            </td></tr><tr><td nowrap><code>DataUpload</code></td><td>\n            The logger USB data binary file was uploaded through the upload API.\n            </td></tr></table>"
          }
        },
        "additionalProperties": false,
        "description": "Retrieve events based on the values in this class"
      },
      "ExcursionAlert": {
        "required": [
          "severity"
        ],
        "type": "object",
        "properties": {
          "bounds": {
            "enum": [
              "UpperBounds",
              "LowerBounds",
              "DualBounds"
            ],
            "type": "string",
            "description": "Describes the bounds of the current boundary, i.e.: \"LowerBounds\".<table><tr><th nowrap>Value</th><th>Description</th></tr><tr><td nowrap><code>UpperBounds</code></td><td>\n            The alert will trigger on values exceeding the threshold\n            </td></tr><tr><td nowrap><code>LowerBounds</code></td><td>\n            The alert will trigger on values falling below the threshold\n            </td></tr><tr><td nowrap><code>DualBounds</code></td><td>\n            The alert will trigger on values falling above OR below the threshold\n            </td></tr></table>"
          },
          "dataType": {
            "enum": [
              "Temperature"
            ],
            "type": "string",
            "description": "The type of sensor data to alert on.\r\n<info>Currently only ```Temperature``` is available.</info><table><tr><th nowrap>Value</th><th>Description</th></tr><tr><td nowrap><code>Temperature</code></td><td>\n            The temperature of the logger in Celsius\n            </td></tr></table>"
          },
          "lowerBoundary": {
            "type": "integer",
            "description": "The value that determines the lower alert threshold.\r\n<note>This value is specified in each ```DataType```'s minor units.\r\nE.g. for temperature data, it should be scaled up by 10 as only a single decimal value is supported for temperatures.\r\n\nSee table below for a complete reference</note><remarks><table>\r\n  <tr>\r\n    <th>DataType</th>\r\n    <th>Minor unit multiplier</th>\r\n    <th>Temperature</th>\r\n    <th>ThresholdValue to use</th>\r\n  </tr>\r\n  <tr>\r\n    <td>\r\n      ```Temperature```\r\n    </td>\r\n    <td>10</td>\r\n    <td>37.5°C</td>\r\n    <td>375</td>\r\n  </tr>\r\n  <tr>\r\n    <td>\r\n      ```Temperature```\r\n    </td>\r\n    <td>10</td>\r\n    <td>-25.3°C</td>\r\n    <td>-253</td>\r\n  </tr>\r\n  <tr>\r\n    <td>\r\n      ```Temperature```\r\n    </td>\r\n    <td>10</td>\r\n    <td>0.3°C</td>\r\n    <td>3</td>\r\n  </tr>\r\n</table></remarks>",
            "format": "int32"
          },
          "upperBoundary": {
            "type": "integer",
            "description": "The value that determines the upper alert threshold.\r\n<note>This value is specified in each ```DataType```'s minor units.\r\nE.g. for temperature data, it should be scaled up by 10 as only a single decimal value is supported for temperatures.\r\n\nSee table below for a complete reference</note><remarks><table>\r\n  <tr>\r\n    <th>DataType</th>\r\n    <th>Minor unit multiplier</th>\r\n    <th>Temperature</th>\r\n    <th>ThresholdValue to use</th>\r\n  </tr>\r\n  <tr>\r\n    <td>\r\n      ```Temperature```\r\n    </td>\r\n    <td>10</td>\r\n    <td>37.5°C</td>\r\n    <td>375</td>\r\n  </tr>\r\n  <tr>\r\n    <td>\r\n      ```Temperature```\r\n    </td>\r\n    <td>10</td>\r\n    <td>-25.3°C</td>\r\n    <td>-253</td>\r\n  </tr>\r\n  <tr>\r\n    <td>\r\n      ```Temperature```\r\n    </td>\r\n    <td>10</td>\r\n    <td>0.3°C</td>\r\n    <td>3</td>\r\n  </tr>\r\n</table></remarks>",
            "format": "int32"
          },
          "accumulativeTimeLimit": {
            "type": "integer",
            "description": "The limit in seconds divisible by 600 seconds (10 minute intervals) that this alert condition is allowed to be violated until it is triggered. If not specified, then a value of 600 will be assumed.<remarks>Example: Specify a value of 600 to delay a logger reporting an alert until the alert has been sustained for longer than 10 minutes</remarks>",
            "format": "int32"
          },
          "severity": {
            "minLength": 1,
            "enum": [
              "NoExcursion",
              "Level1",
              "Level2",
              "Level3"
            ],
            "type": "string",
            "description": "Signals the severity threshold reported when this alert is triggered.<table><tr><th nowrap>Value</th><th>Description</th></tr><tr><td nowrap><code>NoExcursion</code></td><td>\n            No excursion registered when alert is triggered.\n            </td></tr><tr><td nowrap><code>Level1</code></td><td>\n            Alert will raise a Low (Level 1) excursion critically when triggered.\n            </td></tr><tr><td nowrap><code>Level2</code></td><td>\n            Alert will raise a Medium (Level 2) excursion critically when triggered.\n            </td></tr><tr><td nowrap><code>Level3</code></td><td>\n            Alert will raise a High (Level 3) excursion critically when triggered.\n            </td></tr></table>"
          }
        },
        "additionalProperties": false,
        "description": "Defines a alert which describes the boundary contained in Controlant.Integration.Contracts.EventSubscriptions.Payloads.Shipments.Loggers.EventSubscriptionShipmentLoggerExcursionPayload which has caused an excursion."
      },
      "ExcursionNotification": {
        "type": "object",
        "properties": {
          "type": {
            "enum": [
              "First",
              "Subsequent"
            ],
            "type": "string",
            "description": "The type of the excursion event raised.<table><tr><th nowrap>Value</th><th>Description</th></tr><tr><td nowrap><code>First</code></td><td>\n            This is the first notification for this excursion.\n            </td></tr><tr><td nowrap><code>Subsequent</code></td><td>\n            Indicates that this is a re-raised excursion notification.\n            This occurs when a rule boundary is exceeded again following a rearming of the alarm boundary.\n            </td></tr></table>"
          },
          "severity": {
            "enum": [
              "NoExcursion",
              "Level1",
              "Level2",
              "Level3"
            ],
            "type": "string",
            "description": "The excursion severity level raised.<table><tr><th nowrap>Value</th><th>Description</th></tr><tr><td nowrap><code>NoExcursion</code></td><td>\n            No excursion registered when alert is triggered.\n            </td></tr><tr><td nowrap><code>Level1</code></td><td>\n            Alert will raise a Low (Level 1) excursion critically when triggered.\n            </td></tr><tr><td nowrap><code>Level2</code></td><td>\n            Alert will raise a Medium (Level 2) excursion critically when triggered.\n            </td></tr><tr><td nowrap><code>Level3</code></td><td>\n            Alert will raise a High (Level 3) excursion critically when triggered.\n            </td></tr></table>"
          },
          "state": {
            "enum": [
              "AtOrigin",
              "EnRoute",
              "AtDestination"
            ],
            "type": "string",
            "description": "The geographical state of the logger at the time of the event.<table><tr><th nowrap>Value</th><th>Description</th></tr><tr><td nowrap><code>AtOrigin</code></td><td>\n            Event occurred while the logger was registered as being at the origin location.\n            </td></tr><tr><td nowrap><code>EnRoute</code></td><td>\n            Event occurred while the logger was registered as being en-route between the origin and destination locations.\n            </td></tr><tr><td nowrap><code>AtDestination</code></td><td>\n            Event occurred while the logger was registered as being at the destination location.\n            </td></tr></table>"
          },
          "temperature": {
            "allOf": [
              {
                "$ref": "#/components/schemas/TemperatureNotification"
              }
            ],
            "description": "The temperature alert condition and measurement value that served as the basis to determine the excursion conditions."
          }
        },
        "additionalProperties": false,
        "description": "Defines an Excursion Notification Event Payload"
      },
      "FreezeThaw": {
        "required": [
          "threshold"
        ],
        "type": "object",
        "properties": {
          "threshold": {
            "maximum": 3000,
            "minimum": -2741,
            "type": "integer",
            "description": "The freezing point temperature threshold in centigrade.<remarks><table>\r\n  <tr>\r\n    <th>Temperature</th>\r\n    <th>Threshold Value</th>\r\n  </tr>\r\n  <tr>\r\n    <td>37.5°C</td>\r\n    <td>375</td>\r\n  </tr>\r\n  <tr>\r\n    <td>-25.3°C</td>\r\n    <td>-253</td>\r\n  </tr>\r\n  <tr>\r\n    <td>0.3°C</td>\r\n    <td>3</td>\r\n  </tr>\r\n</table></remarks>",
            "format": "int32"
          },
          "maxCycles": {
            "maximum": 30,
            "minimum": 0,
            "type": "integer",
            "description": "The maximum number of repeated freeze/thaw cycles that the product can tolerate.\r\n<note>If infinite cycles are allowed then omit this property or use the value ```null```</note>",
            "format": "int32"
          }
        },
        "additionalProperties": false,
        "description": "Defines a Freeze Thaw"
      },
      "GenericInputValidationErrorResponse": {
        "type": "object",
        "properties": {
          "errorMessage": {
            "type": "string",
            "description": "Human readable text describing the error that occurred during the operation."
          },
          "status": {
            "type": "integer",
            "description": "The HTTP Status code associated with this error.",
            "format": "int32"
          },
          "errors": {
            "type": "object",
            "additionalProperties": {
              "type": "string",
              "nullable": true
            },
            "description": "Gets the errors associated with this instance."
          },
          "success": {
            "type": "boolean",
            "description": "Was the requested operation successful or not. If set to false please refer to the Message property for description of the error."
          },
          "responseTime": {
            "type": "integer",
            "description": "The time taken in milliseconds for processing of the request.",
            "format": "int64"
          },
          "message": {
            "type": "string",
            "description": "Text description of the ```Success``` return value."
          }
        },
        "additionalProperties": false,
        "description": "Defines a Generic Input Validation Error Response"
      },
      "GetTradeItemRequest": {
        "required": [
          "gtin",
          "serialNumber"
        ],
        "type": "object",
        "properties": {
          "gtin": {
            "minLength": 1,
            "pattern": "^(\\d{8}|\\d{12,14})$",
            "type": "string",
            "description": "The GTIN (Global Trade Item Number) for the trade item. GTINs can be 8, 12, 13, or 14 digits in length to accommodate different application and product constraints.\r\nThe GTIN contains a company prefix at the beginning and a control digit at the end, both of which should be included.\r\n<info>See <a href=\"https://www.gs1.org/standards/id-keys/gtin\" target=\"_blank\">https://www.gs1.org/standards/id-keys/gtin</a> for more information</info>"
          },
          "serialNumber": {
            "minLength": 1,
            "type": "string",
            "description": "The serial number for the trade item."
          }
        },
        "additionalProperties": false,
        "description": "A request to get a trade item from our platform"
      },
      "GetTradeItemResponse": {
        "type": "object",
        "properties": {
          "tradeItem": {
            "allOf": [
              {
                "$ref": "#/components/schemas/TradeItemWithState"
              }
            ],
            "description": "The trade item retrieved from the service"
          },
          "success": {
            "type": "boolean",
            "description": "Was the requested operation successful or not. If set to false please refer to the Message property for description of the error."
          },
          "responseTime": {
            "type": "integer",
            "description": "The time taken in milliseconds for processing of the request.",
            "format": "int64"
          },
          "message": {
            "type": "string",
            "description": "Text description of the ```Success``` return value."
          }
        },
        "additionalProperties": false,
        "description": "A response for get trade item"
      },
      "ILoggerEventPayload": {
        "type": "object",
        "additionalProperties": false,
        "description": "This interface is used as a \"placeholder\" for serialization of shipment event payloads.\r\nIt is used as such in LoggerEventData (Payload member).\r\nA custom JsonConverter (OrcLoggerEventPayloadDataConverter) is responsible\r\nfor instantiating the correct payload class based on the logger event."
      },
      "Inspection": {
        "required": [
          "inspectionStatus"
        ],
        "type": "object",
        "properties": {
          "inspectionStatus": {
            "minLength": 1,
            "enum": [
              "NotInspected",
              "UnderInspection",
              "Inspected"
            ],
            "type": "string",
            "description": "The status of the shipment inspection process after arriving at destination.<remarks><span>\r\n                A shipment starts with an inspection status set to ```NotInspected```.\r\n                When the shipment is in a <code>Ready</code>, <code>Shipping</code> or <code>Delivered</code> state the inspection status can be changed.\r\n                When changing this status to ```Inspected```, the inspection quality must also be set.\r\n            </span></remarks><table><tr><th nowrap>Value</th><th>Description</th></tr><tr><td nowrap><code>NotInspected</code></td><td>\n            Shipment has yet to be inspected at destination\n            </td></tr><tr><td nowrap><code>UnderInspection</code></td><td>\n            Shipment is currently being inspected at destination\n            </td></tr><tr><td nowrap><code>Inspected</code></td><td>\n            Inspection of shipment has been completed\n            </td></tr></table>"
          },
          "inspectionQuality": {
            "enum": [
              "Released",
              "Undecided",
              "Rejected",
              "PartlyReleased"
            ],
            "type": "string",
            "description": "The overall quality of the shipment contents determined during inspection.<remarks><span>\r\n                A shipment has its quality set to ```Undecided``` until the shipment gets delivered. When the shipment has been\r\n                delivered it is processed by the system and its quality is set to ```Released``` automatically if there were no\r\n                temperature excursions.\r\n            </span>\r\n<span>\r\n                If there were excursions, the quality will remain ```Undecided``` until the shipment is inspected manually and\r\n                the InspectionQuality is explicitly updated to be ```Released```, ```Rejected``` or ```PartlyReleased```\r\n                and the accompanying InspectionStatus set to ```Inspected```.\r\n            </span>\r\n<note>\r\n                Updates to this property are only possible when the shipment is either in <code>Ready</code>, <code>Shipping</code> or <code>Delivered</code> state.\r\n            </note></remarks><table><tr><th nowrap>Value</th><th>Description</th></tr><tr><td nowrap><code>Released</code></td><td>\n            The quality of the shipment contents was considered safe to release.\n            </td></tr><tr><td nowrap><code>Undecided</code></td><td>\n            No decision has been made regarding the final quality of the shipment contents.\n            </td></tr><tr><td nowrap><code>Rejected</code></td><td>\n            The quality of the shipment contents was considered unsafe to release and has been rejected.\n            </td></tr><tr><td nowrap><code>PartlyReleased</code></td><td>\n            The quality of the shipment contents could not be fully released as parts of it have been rejected.\n            </td></tr></table>"
          },
          "inspectionComment": {
            "type": "string",
            "description": "Optional comments or details related to the shipment inspection.<remarks>If there is an excursion higher than ```Level1``` during shipping, this field can be used to provide a textual\r\ncomment describing the inspection results.</remarks>"
          }
        },
        "additionalProperties": false,
        "description": "Defines an Inspection request"
      },
      "InspectionInfo": {
        "type": "object",
        "properties": {
          "inspectionStatus": {
            "enum": [
              "NotInspected",
              "UnderInspection",
              "Inspected"
            ],
            "type": "string",
            "description": "The status of the shipment inspection process after arriving at destination.<remarks><span>\r\n                A shipment starts with an inspection status set to ```NotInspected```.\r\n                When the shipment is in a <code>Ready</code>, <code>Shipping</code> or <code>Delivered</code> state the inspection status can be changed.\r\n                When changing this status to ```Inspected```, the inspection quality must also be set.\r\n            </span></remarks><table><tr><th nowrap>Value</th><th>Description</th></tr><tr><td nowrap><code>NotInspected</code></td><td>\n            Shipment has yet to be inspected at destination\n            </td></tr><tr><td nowrap><code>UnderInspection</code></td><td>\n            Shipment is currently being inspected at destination\n            </td></tr><tr><td nowrap><code>Inspected</code></td><td>\n            Inspection of shipment has been completed\n            </td></tr></table>"
          },
          "inspectionQuality": {
            "enum": [
              "Released",
              "Undecided",
              "Rejected",
              "PartlyReleased"
            ],
            "type": "string",
            "description": "The overall quality of the shipment contents determined during inspection.<remarks><span>\r\n                A shipment has its quality set to ```Undecided``` until the shipment gets delivered. When the shipment has been\r\n                delivered it is processed by the system and its quality is set to ```Released``` automatically if there were no\r\n                temperature excursions.\r\n            </span>\r\n<span>\r\n                If there were excursions, the quality will remain ```Undecided``` until the shipment is inspected manually and\r\n                the InspectionQuality is explicitly updated to be ```Released```, ```Rejected``` or ```PartlyReleased```\r\n                and the accompanying InspectionStatus set to ```Inspected```.\r\n            </span>\r\n<note>\r\n                Updates to this property are only possible when the shipment is either in <code>Ready</code>, <code>Shipping</code> or <code>Delivered</code> state.\r\n            </note></remarks><table><tr><th nowrap>Value</th><th>Description</th></tr><tr><td nowrap><code>Released</code></td><td>\n            The quality of the shipment contents was considered safe to release.\n            </td></tr><tr><td nowrap><code>Undecided</code></td><td>\n            No decision has been made regarding the final quality of the shipment contents.\n            </td></tr><tr><td nowrap><code>Rejected</code></td><td>\n            The quality of the shipment contents was considered unsafe to release and has been rejected.\n            </td></tr><tr><td nowrap><code>PartlyReleased</code></td><td>\n            The quality of the shipment contents could not be fully released as parts of it have been rejected.\n            </td></tr></table>"
          },
          "inspectionComment": {
            "type": "string",
            "description": "Optional comments or details related to the shipment inspection.<remarks>If there is an excursion higher than ```Level1``` during shipping, this field can be used to provide a textual\r\ncomment describing the inspection results.</remarks>"
          }
        },
        "additionalProperties": false,
        "description": "Defines an Inspection"
      },
      "Light": {
        "type": "object",
        "properties": {
          "state": {
            "enum": [
              "Low",
              "High"
            ],
            "type": "string",
            "description": "Indicates the interpreted light change state.<table><tr><th nowrap>Value</th><th>Description</th></tr><tr><td nowrap><code>Low</code></td><td>\n            Signals that the ambient light levels experienced a sudden drop in intensity.\n            This indicates that the logger was placed into low light conditions (such as inside of box or packaging)\n            </td></tr><tr><td nowrap><code>High</code></td><td>\n            Signals that the ambient light levels experienced a sudden increase in intensity.\n            This indicates that the logger was removed from low light conditions (such as its box was opened or it removed from packaging).\n            </td></tr></table>"
          }
        },
        "additionalProperties": false,
        "description": "Defines a Light Event Payload"
      },
      "LocationCreateRequest": {
        "required": [
          "addressLine1",
          "country",
          "reference"
        ],
        "type": "object",
        "properties": {
          "options": {
            "allOf": [
              {
                "$ref": "#/components/schemas/LocationOptions"
              }
            ],
            "description": "Optional options governing how location is stored and/or updated"
          },
          "reference": {
            "maxLength": 128,
            "minLength": 1,
            "type": "string",
            "description": "Customer supplied unique reference value that identifies this location."
          },
          "name": {
            "maxLength": 128,
            "type": "string",
            "description": "Customer defined name for this location. If empty then the value from ```Reference``` will be used as the location name."
          },
          "description": {
            "maxLength": 256,
            "type": "string",
            "description": "A human-readable description of this location."
          },
          "phone": {
            "maxLength": 20,
            "type": "string",
            "description": "Phone number of the location."
          },
          "addressLine1": {
            "maxLength": 75,
            "minLength": 1,
            "type": "string",
            "description": "The first address line of the postal address."
          },
          "addressLine2": {
            "maxLength": 75,
            "type": "string",
            "description": "The second address line of the postal address."
          },
          "addressLine3": {
            "maxLength": 75,
            "type": "string",
            "description": "The third address line of the postal address."
          },
          "city": {
            "maxLength": 50,
            "type": "string",
            "description": "The name of the city that this location is in."
          },
          "region": {
            "maxLength": 50,
            "type": "string",
            "description": "The name of the region that this location is in (i.e. county)."
          },
          "postCode": {
            "maxLength": 20,
            "type": "string",
            "description": "The postal (zip) code for the location.<remarks>For locations not having postal or zip codes this value can be omitted or\r\nthe special value ```N/A``` can be used to indicate a missing postal code.</remarks>"
          },
          "country": {
            "maxLength": 2,
            "minLength": 2,
            "type": "string",
            "description": "A two-letter <a href=\"https://en.wikipedia.org/wiki/ISO_3166-1\" target=\"_blank\">ISO 3166-1 country code</a> (i.e. GB or IT).\r\nThe API follows the ISO standard for defining countries, and works best when using the corresponding ISO code\r\nof the country.<remarks>If you receive unexpected results for the country code specified, verify that you are using a\r\ncode which includes the countries, dependent territories, and special areas of geographical interest\r\nyou intend. You can find code information at\r\n<a href=\"https://en.wikipedia.org/wiki/List_of_ISO_3166_country_codes\" target=\"_blank\">Wikipedia: List of ISO 3166 country codes</a></remarks>"
          },
          "latitude": {
            "maximum": 90,
            "minimum": -90,
            "type": "number",
            "description": "The WGS latitude coordinates for the location's center-mass. Must adhere to the World Geodetic System 1984 (WGS 84) standard. Precision is limited to 7 decimal places; additional digits will be rounded to the nearest value at the 7th decimal place.<remarks>If geographic coordinates for locations are not specified or GeoCoding is not enabled or possible, then GeoFence capabilities will\r\nbe unavailable for Shipments and Loggers shipping to and from this location. All attempts to create shipments with GeoFence settings\r\nfor locations without geolocation data will result in an error.</remarks>",
            "format": "double"
          },
          "longitude": {
            "maximum": 180,
            "minimum": -180,
            "type": "number",
            "description": "The WGS longitude coordinates for the location's center-mass. Must adhere to the World Geodetic System 1984 (WGS 84) standard. Precision is limited to 7 decimal places; additional digits will be rounded to the nearest value at the 7th decimal place.<remarks>If geographic coordinates for locations are not specified or GeoCoding is not enabled or possible, then GeoFence capabilities will\r\nbe unavailable for Shipments and Loggers shipping to and from this location. All attempts to create shipments with GeoFence settings\r\nfor locations without geolocation data will result in an error.</remarks>",
            "format": "double"
          },
          "radius": {
            "maximum": 15000,
            "minimum": 250,
            "type": "integer",
            "description": "A radius of effect in meters from the location's center-mass that encompasses its critical area of effect. This defines the boundaries of this\r\nlocation.<remarks>If this value is omitted but geo coordinates are present or resolved, then a default value of 3000 meters (3 km, Medium size) will be used.</remarks>",
            "format": "int32"
          }
        },
        "additionalProperties": false,
        "description": "Defines a Location request"
      },
      "LocationDeleteRequest": {
        "required": [
          "locationReference"
        ],
        "type": "object",
        "properties": {
          "locationReference": {
            "maxLength": 128,
            "minLength": 1,
            "type": "string",
            "description": "Customer supplied unique reference to the already created location that should be deleted."
          }
        },
        "additionalProperties": false,
        "description": "Defines a Location Delete"
      },
      "LocationGetRequest": {
        "required": [
          "locationReference"
        ],
        "type": "object",
        "properties": {
          "locationReference": {
            "maxLength": 128,
            "minLength": 1,
            "type": "string",
            "description": "Customer supplied unique reference to the already created location that should be fetched."
          }
        },
        "additionalProperties": false,
        "description": "Defines a Location Get"
      },
      "LocationGetResponse": {
        "type": "object",
        "properties": {
          "location": {
            "allOf": [
              {
                "$ref": "#/components/schemas/LocationInfoTimeStamped"
              }
            ],
            "description": "The location information"
          },
          "success": {
            "type": "boolean",
            "description": "Was the requested operation successful or not. If set to false please refer to the Message property for description of the error."
          },
          "responseTime": {
            "type": "integer",
            "description": "The time taken in milliseconds for processing of the request.",
            "format": "int64"
          },
          "message": {
            "type": "string",
            "description": "Text description of the ```Success``` return value."
          }
        },
        "additionalProperties": false,
        "description": "Defines a Location request"
      },
      "LocationInfo": {
        "type": "object",
        "properties": {
          "reference": {
            "type": "string",
            "description": "Customer supplied unique reference value that identifies this location."
          },
          "name": {
            "type": "string",
            "description": "Customer defined name for this location. If empty then the value from ```Reference``` will be used as the location name."
          },
          "description": {
            "type": "string",
            "description": "A human-readable description of this location."
          },
          "phone": {
            "type": "string",
            "description": "Phone number of the location."
          },
          "addressLine1": {
            "type": "string",
            "description": "The first address line of the postal address."
          },
          "addressLine2": {
            "type": "string",
            "description": "The second address line of the postal address."
          },
          "addressLine3": {
            "type": "string",
            "description": "The third address line of the postal address."
          },
          "city": {
            "type": "string",
            "description": "The name of the city that this location is in."
          },
          "region": {
            "type": "string",
            "description": "The name of the region that this location is in (i.e. county)."
          },
          "postCode": {
            "type": "string",
            "description": "The postal (zip) code for the location.<remarks>For locations not having postal or zip codes this value can be omitted or\r\nthe special value ```N/A``` can be used to indicate a missing postal code.</remarks>"
          },
          "country": {
            "type": "string",
            "description": "A two-letter <a href=\"https://en.wikipedia.org/wiki/ISO_3166-1\" target=\"_blank\">ISO 3166-1 country code</a> (i.e. GB or IT).\r\nThe API follows the ISO standard for defining countries, and works best when using the corresponding ISO code\r\nof the country.<remarks>If you receive unexpected results for the country code specified, verify that you are using a\r\ncode which includes the countries, dependent territories, and special areas of geographical interest\r\nyou intend. You can find code information at\r\n<a href=\"https://en.wikipedia.org/wiki/List_of_ISO_3166_country_codes\" target=\"_blank\">Wikipedia: List of ISO 3166 country codes</a></remarks>"
          },
          "latitude": {
            "type": "number",
            "description": "The WGS latitude coordinates for the location's center-mass. Must adhere to the World Geodetic System 1984 (WGS 84) standard. Precision is limited to 7 decimal places; additional digits will be rounded to the nearest value at the 7th decimal place.<remarks>If geographic coordinates for locations are not specified or GeoCoding is not enabled or possible, then GeoFence capabilities will\r\nbe unavailable for Shipments and Loggers shipping to and from this location. All attempts to create shipments with GeoFence settings\r\nfor locations without geolocation data will result in an error.</remarks>",
            "format": "double"
          },
          "longitude": {
            "type": "number",
            "description": "The WGS longitude coordinates for the location's center-mass. Must adhere to the World Geodetic System 1984 (WGS 84) standard. Precision is limited to 7 decimal places; additional digits will be rounded to the nearest value at the 7th decimal place.<remarks>If geographic coordinates for locations are not specified or GeoCoding is not enabled or possible, then GeoFence capabilities will\r\nbe unavailable for Shipments and Loggers shipping to and from this location. All attempts to create shipments with GeoFence settings\r\nfor locations without geolocation data will result in an error.</remarks>",
            "format": "double"
          },
          "radius": {
            "type": "integer",
            "description": "A radius of effect in meters from the location's center-mass that encompasses its critical area of effect. This defines the boundaries of this\r\nlocation.<remarks>If this value is omitted but geo coordinates are present or resolved, then a default value of 3000 meters (3 km, Medium size) will be used.</remarks>",
            "format": "int32"
          }
        },
        "additionalProperties": false,
        "description": "Defines a Location"
      },
      "LocationInfoTimeStamped": {
        "type": "object",
        "properties": {
          "created": {
            "type": "string",
            "description": "Timestamp when the location was first created in the Controlant platform<span class=\"input-format\"> <a href=\"https://en.wikipedia.org/wiki/ISO_8601\" target=\"_blank\">Format: ISO 8601 (YYYY-MM-DDThh:mm:ssZ)</a></span>"
          },
          "updated": {
            "type": "string",
            "description": "Timestamp when the location was last updated in the Controlant platform<span class=\"input-format\"> <a href=\"https://en.wikipedia.org/wiki/ISO_8601\" target=\"_blank\">Format: ISO 8601 (YYYY-MM-DDThh:mm:ssZ)</a></span>"
          },
          "reference": {
            "type": "string",
            "description": "Customer supplied unique reference value that identifies this location."
          },
          "name": {
            "type": "string",
            "description": "Customer defined name for this location. If empty then the value from ```Reference``` will be used as the location name."
          },
          "description": {
            "type": "string",
            "description": "A human-readable description of this location."
          },
          "phone": {
            "type": "string",
            "description": "Phone number of the location."
          },
          "addressLine1": {
            "type": "string",
            "description": "The first address line of the postal address."
          },
          "addressLine2": {
            "type": "string",
            "description": "The second address line of the postal address."
          },
          "addressLine3": {
            "type": "string",
            "description": "The third address line of the postal address."
          },
          "city": {
            "type": "string",
            "description": "The name of the city that this location is in."
          },
          "region": {
            "type": "string",
            "description": "The name of the region that this location is in (i.e. county)."
          },
          "postCode": {
            "type": "string",
            "description": "The postal (zip) code for the location.<remarks>For locations not having postal or zip codes this value can be omitted or\r\nthe special value ```N/A``` can be used to indicate a missing postal code.</remarks>"
          },
          "country": {
            "type": "string",
            "description": "A two-letter <a href=\"https://en.wikipedia.org/wiki/ISO_3166-1\" target=\"_blank\">ISO 3166-1 country code</a> (i.e. GB or IT).\r\nThe API follows the ISO standard for defining countries, and works best when using the corresponding ISO code\r\nof the country.<remarks>If you receive unexpected results for the country code specified, verify that you are using a\r\ncode which includes the countries, dependent territories, and special areas of geographical interest\r\nyou intend. You can find code information at\r\n<a href=\"https://en.wikipedia.org/wiki/List_of_ISO_3166_country_codes\" target=\"_blank\">Wikipedia: List of ISO 3166 country codes</a></remarks>"
          },
          "latitude": {
            "type": "number",
            "description": "The WGS latitude coordinates for the location's center-mass. Must adhere to the World Geodetic System 1984 (WGS 84) standard. Precision is limited to 7 decimal places; additional digits will be rounded to the nearest value at the 7th decimal place.<remarks>If geographic coordinates for locations are not specified or GeoCoding is not enabled or possible, then GeoFence capabilities will\r\nbe unavailable for Shipments and Loggers shipping to and from this location. All attempts to create shipments with GeoFence settings\r\nfor locations without geolocation data will result in an error.</remarks>",
            "format": "double"
          },
          "longitude": {
            "type": "number",
            "description": "The WGS longitude coordinates for the location's center-mass. Must adhere to the World Geodetic System 1984 (WGS 84) standard. Precision is limited to 7 decimal places; additional digits will be rounded to the nearest value at the 7th decimal place.<remarks>If geographic coordinates for locations are not specified or GeoCoding is not enabled or possible, then GeoFence capabilities will\r\nbe unavailable for Shipments and Loggers shipping to and from this location. All attempts to create shipments with GeoFence settings\r\nfor locations without geolocation data will result in an error.</remarks>",
            "format": "double"
          },
          "radius": {
            "type": "integer",
            "description": "A radius of effect in meters from the location's center-mass that encompasses its critical area of effect. This defines the boundaries of this\r\nlocation.<remarks>If this value is omitted but geo coordinates are present or resolved, then a default value of 3000 meters (3 km, Medium size) will be used.</remarks>",
            "format": "int32"
          }
        },
        "additionalProperties": false,
        "description": "Defines a Location with timestamps"
      },
      "LocationOptions": {
        "type": "object",
        "properties": {
          "coordinateUpdate": {
            "enum": [
              "IfDataChanges",
              "OnlyIfNoCoordinatesPresent",
              "LeaveUnchanged"
            ],
            "type": "string",
            "description": "Directives for when geo-coordinates are updated<table><tr><th nowrap>Value</th><th>Description</th></tr><tr><td nowrap><code>IfDataChanges</code></td><td>\n            If any location data changes, geo coordinates are updated.\n            This is the default option if not specified\n            </td></tr><tr><td nowrap><code>OnlyIfNoCoordinatesPresent</code></td><td>\n            Attempts to update geo coordinates if no geo coordinates are present on an \n            existing location or no existing location exists\n            </td></tr><tr><td nowrap><code>LeaveUnchanged</code></td><td>\n            Leave current geo location values unchanged\n            </td></tr></table>"
          }
        },
        "additionalProperties": false,
        "description": "Location option"
      },
      "LocationTrace": {
        "type": "object",
        "properties": {
          "timeStamp": {
            "type": "string",
            "description": "The time that the location trace was recorded. This value is only set when Type is ```Interpolated```,\r\notherwise this value is not present in the reply and the timestamp from the event should be used.<span class=\"input-format\"> <a href=\"https://en.wikipedia.org/wiki/ISO_8601\" target=\"_blank\">Format: ISO 8601 (YYYY-MM-DDThh:mm:ssZ)</a></span>"
          },
          "latitude": {
            "type": "number",
            "description": "The WGS latitude coordinates recorded by the logger device.\r\nAdheres to the World Geodetic System 1984 (WGS 84) standard.",
            "format": "double"
          },
          "longitude": {
            "type": "number",
            "description": "The WGS longitude coordinates recorded by the logger device.\r\nAdheres to the World Geodetic System 1984 (WGS 84) standard.",
            "format": "double"
          },
          "type": {
            "enum": [
              "Approximate",
              "Interpolated"
            ],
            "type": "string",
            "description": "The type of location trace<table><tr><th nowrap>Value</th><th>Description</th></tr><tr><td nowrap><code>Approximate</code></td><td>\n            The location is deemed to be approximate, e.g. based on cell-tower triangulation\n            </td></tr><tr><td nowrap><code>Interpolated</code></td><td>\n            The location of the event is not exactly know, but is interpolated from surrounding events\n            </td></tr></table>"
          },
          "accuracyInMeters": {
            "type": "integer",
            "description": "The accuracy of the latitude and longitude device location in meters.<remarks>This is calculated using the cell tower ids that the device reports being connected to.</remarks>",
            "format": "int32"
          }
        },
        "additionalProperties": false,
        "description": "Defines a Location Trace"
      },
      "LocationUpdateResponse": {
        "type": "object",
        "properties": {
          "locationReference": {
            "type": "string",
            "description": "The customer supplied unique reference value of the location that was updated."
          },
          "success": {
            "type": "boolean",
            "description": "Was the requested operation successful or not. If set to false please refer to the Message property for description of the error."
          },
          "responseTime": {
            "type": "integer",
            "description": "The time taken in milliseconds for processing of the request.",
            "format": "int64"
          },
          "message": {
            "type": "string",
            "description": "Text description of the ```Success``` return value."
          }
        },
        "additionalProperties": false,
        "description": "Defines a Location Update Response"
      },
      "LoggerAnalysis": {
        "type": "object",
        "properties": {
          "temperature": {
            "allOf": [
              {
                "$ref": "#/components/schemas/TemperatureAnalysis"
              }
            ],
            "description": "Analysed temperature."
          }
        },
        "additionalProperties": false,
        "description": "Defines logger analysis."
      },
      "LoggerCalibrationResult": {
        "type": "object",
        "properties": {
          "lastCalibrationDate": {
            "type": "string",
            "description": "Last calibration date for the logger.<span class=\"input-format\"> <a href=\"https://en.wikipedia.org/wiki/ISO_8601\" target=\"_blank\">Format: ISO 8601 (YYYY-MM-DDThh:mm:ssZ)</a></span>"
          }
        },
        "additionalProperties": false,
        "description": "Defines calibration results for a logger"
      },
      "LoggerDetail": {
        "type": "object",
        "properties": {
          "loggerId": {
            "type": "string",
            "description": "The unique ID of this logger.\r\nThis is the barcode value in <a href=\"https://simple.wikipedia.org/wiki/Hexadecimal\" target=\"_blank\">Hexadecimal format</a>\r\nassigned to this logger from Controlant and is printed on one side of the logger along with the barcode.<remarks>The barcode printed on most Controlant loggers contain a common prefix <code>CMS</code>.\r\nNote that LoggerIds coming from the Controlant Platform will never include the <code>CMS</code> prefix.</remarks>"
          },
          "firmware": {
            "allOf": [
              {
                "$ref": "#/components/schemas/LoggerFirmware"
              }
            ],
            "description": "Details on the logger firmware"
          },
          "operationStatus": {
            "enum": [
              "InStock",
              "Active",
              "Deactivated",
              "BeingServiced",
              "Recalled"
            ],
            "type": "string",
            "description": "Operation status for this logger<table><tr><th nowrap>Value</th><th>Description</th></tr><tr><td nowrap><code>InStock</code></td><td>\n            Logger is in stock\n            </td></tr><tr><td nowrap><code>Active</code></td><td>\n            Logger is active\n            </td></tr><tr><td nowrap><code>Deactivated</code></td><td>\n            Logger has been deactivated\n            </td></tr><tr><td nowrap><code>BeingServiced</code></td><td>\n            Logger is being serviced\n            </td></tr><tr><td nowrap><code><font style=\"text-decoration: line-through;\">Recalled</font></code></td><td><font style=\"color:indianred;\">[Obsolete]</font> </td></tr></table>"
          },
          "loggerType": {
            "enum": [
              "CO10",
              "Saga",
              "ThirdParty",
              "Unknown"
            ],
            "type": "string",
            "description": "The logger type<table><tr><th nowrap>Value</th><th>Description</th></tr><tr><td nowrap><code><font style=\"text-decoration: line-through;\">CO10</font></code></td><td><font style=\"color:indianred;\">[Obsolete]</font> </td></tr><tr><td nowrap><code>Saga</code></td><td>\n            A Saga logger\n            </td></tr><tr><td nowrap><code><font style=\"text-decoration: line-through;\">ThirdParty</font></code></td><td><font style=\"color:indianred;\">[Obsolete]</font> </td></tr><tr><td nowrap><code>Unknown</code></td><td>\n            An unknown, or as-of-yet, unmapped logger type\n            </td></tr></table>"
          }
        },
        "additionalProperties": false,
        "description": "Logger details"
      },
      "LoggerEvaluation": {
        "type": "object",
        "properties": {
          "status": {
            "enum": [
              "WithinBudget",
              "ExceedsBudget",
              "Undecided"
            ],
            "type": "string",
            "description": "Overall stability budget evaluation status for the logger.<table><tr><th nowrap>Value</th><th>Description</th></tr><tr><td nowrap><code>WithinBudget</code></td><td>\n            Stability budget is still remaining.\n            </td></tr><tr><td nowrap><code>ExceedsBudget</code></td><td>\n            Stability budget has been exceeded.\n            </td></tr><tr><td nowrap><code>Undecided</code></td><td>\n            Unable to evaluate stability budget consumption.\n            </td></tr></table>"
          },
          "temperatureStatus": {
            "enum": [
              "WithinBudget",
              "ExceedsBudget",
              "Undecided"
            ],
            "type": "string",
            "description": "Temperature evaluation status for the logger.<table><tr><th nowrap>Value</th><th>Description</th></tr><tr><td nowrap><code>WithinBudget</code></td><td>\n            Stability budget is still remaining.\n            </td></tr><tr><td nowrap><code>ExceedsBudget</code></td><td>\n            Stability budget has been exceeded.\n            </td></tr><tr><td nowrap><code>Undecided</code></td><td>\n            Unable to evaluate stability budget consumption.\n            </td></tr></table>"
          },
          "freezeThawStatus": {
            "enum": [
              "WithinBudget",
              "ExceedsBudget",
              "Undecided"
            ],
            "type": "string",
            "description": "Freeze thaw cycle evaluation status for the logger.<table><tr><th nowrap>Value</th><th>Description</th></tr><tr><td nowrap><code>WithinBudget</code></td><td>\n            Stability budget is still remaining.\n            </td></tr><tr><td nowrap><code>ExceedsBudget</code></td><td>\n            Stability budget has been exceeded.\n            </td></tr><tr><td nowrap><code>Undecided</code></td><td>\n            Unable to evaluate stability budget consumption.\n            </td></tr></table>"
          }
        },
        "additionalProperties": false,
        "description": "Defines a Logger Evaluation"
      },
      "LoggerEventData": {
        "type": "object",
        "properties": {
          "event": {
            "enum": [
              "ButtonPressed",
              "Delivered",
              "Status",
              "Light",
              "Sent",
              "ExcursionNotification",
              "SeverityChanged",
              "Rearm",
              "DataUpload"
            ],
            "type": "string",
            "description": "The type of the logger event that was raised.<table><tr><th nowrap>Value</th><th>Description</th></tr><tr><td nowrap><code>ButtonPressed</code></td><td>\n            Start or Stop button pressed on the logger\n            </td></tr><tr><td nowrap><code>Delivered</code></td><td>\n            Logger has been delivered via button press, geo-fence or manually\n            </td></tr><tr><td nowrap><code>Status</code></td><td>\n            The shipping state of the logger has changed (i.e. when the logger leaves origin or arrives at destination)\n            </td></tr><tr><td nowrap><code>Light</code></td><td>\n            Logger has detected an abrupt change in light conditions\n            </td></tr><tr><td nowrap><code>Sent</code></td><td>\n            Logger has entered shipping mode, meaning it is en-route to the destination\n            </td></tr><tr><td nowrap><code>ExcursionNotification</code></td><td>\n            A notification (i.e. email or SMS) was sent to the contacts assigned to the shipment.\n            Note that notifications are only sent and this event thus raised when contacts are assigned to the shipment.\n            </td></tr><tr><td nowrap><code>SeverityChanged</code></td><td>\n            The logger detected a sensor value that exceeded the alarm boundaries set for the shipment.\n            The severity level can be consulted to determine the severity level of the event.\n            </td></tr><tr><td nowrap><code>Rearm</code></td><td>\n            The logger boundaries were re-armed. This can be done to have the logger re-send notifications if boundaries are violated again.\n            Without rearming the logger device will not re-send notifications for repeated boundary violations.\n            Note that despite rearming then the SeverityChanged event will not be raised again.\n            </td></tr><tr><td nowrap><code>DataUpload</code></td><td>\n            The logger USB data binary file was uploaded through the upload API.\n            </td></tr></table>"
          },
          "timestamp": {
            "type": "string",
            "description": "The timestamp of the event as recorded by the logger device.<span class=\"input-format\"> <a href=\"https://en.wikipedia.org/wiki/ISO_8601\" target=\"_blank\">Format: ISO 8601 (YYYY-MM-DDThh:mm:ssZ)</a></span>"
          },
          "payload": {
            "oneOf": [
              {
                "$ref": "#/components/schemas/ButtonPressed"
              },
              {
                "$ref": "#/components/schemas/ExcursionNotification"
              },
              {
                "$ref": "#/components/schemas/Light"
              },
              {
                "$ref": "#/components/schemas/SeverityChanged"
              },
              {
                "$ref": "#/components/schemas/Status"
              }
            ],
            "description": "The additional data payload describing details of the event state.\r\n<note>Note: Not all events carry payload, in which case this property will be absent</note>"
          },
          "location": {
            "allOf": [
              {
                "$ref": "#/components/schemas/LocationTrace"
              }
            ],
            "description": "The geo location that this event was raised at.<remarks>The geo location may not always be available for all events depending on\r\nlogger connectivity status, in those cases no geo information will be available\r\nand this value is not present.</remarks>"
          }
        },
        "additionalProperties": false,
        "description": "Defines a Logger Event Data"
      },
      "LoggerEvents": {
        "type": "object",
        "properties": {
          "loggerId": {
            "type": "string",
            "description": "The unique ID of this logger.\r\nThis is the barcode value in <a href=\"https://simple.wikipedia.org/wiki/Hexadecimal\" target=\"_blank\">Hexadecimal format</a>\r\nassigned to this logger from Controlant and is printed on one side of the logger along with the barcode.<remarks>The barcode printed on most Controlant loggers contain a common prefix <code>CMS</code>.\r\nNote that LoggerIds coming from the Controlant Platform will never include the <code>CMS</code> prefix.</remarks>"
          },
          "eventsCount": {
            "type": "integer",
            "description": "The total number of events on record for the logger.",
            "format": "int32"
          },
          "events": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/LoggerEventData"
            },
            "description": "The logger events recorded by the logger device."
          }
        },
        "additionalProperties": false,
        "description": "Defines a Logger Events"
      },
      "LoggerEventsRequest": {
        "required": [
          "shipmentReference"
        ],
        "type": "object",
        "properties": {
          "serverTimeFrom": {
            "type": "string",
            "description": "Return only logger events that were sent to the server on or after this time.<span class=\"input-format\"> <a href=\"https://en.wikipedia.org/wiki/ISO_8601\" target=\"_blank\">Format: ISO 8601 (YYYY-MM-DDThh:mm:ssZ)</a></span>"
          },
          "serverTimeTo": {
            "type": "string",
            "description": "Return only logger-events that were sent to the server on or before this time.<span class=\"input-format\"> <a href=\"https://en.wikipedia.org/wiki/ISO_8601\" target=\"_blank\">Format: ISO 8601 (YYYY-MM-DDThh:mm:ssZ)</a></span>"
          },
          "events": {
            "type": "array",
            "items": {
              "enum": [
                "ButtonPressed",
                "Delivered",
                "Status",
                "Light",
                "Sent",
                "ExcursionNotification",
                "SeverityChanged",
                "Rearm",
                "DataUpload"
              ],
              "type": "string",
              "description": "Enumeration values for Logger Event Type"
            },
            "description": "Filters the events that are retrieved for the shipment. If this field is left empty then all logger events for the shipment are retrieved.<table><tr><th nowrap>Value</th><th>Description</th></tr><tr><td nowrap><code>ButtonPressed</code></td><td>\n            Start or Stop button pressed on the logger\n            </td></tr><tr><td nowrap><code>Delivered</code></td><td>\n            Logger has been delivered via button press, geo-fence or manually\n            </td></tr><tr><td nowrap><code>Status</code></td><td>\n            The shipping state of the logger has changed (i.e. when the logger leaves origin or arrives at destination)\n            </td></tr><tr><td nowrap><code>Light</code></td><td>\n            Logger has detected an abrupt change in light conditions\n            </td></tr><tr><td nowrap><code>Sent</code></td><td>\n            Logger has entered shipping mode, meaning it is en-route to the destination\n            </td></tr><tr><td nowrap><code>ExcursionNotification</code></td><td>\n            A notification (i.e. email or SMS) was sent to the contacts assigned to the shipment.\n            Note that notifications are only sent and this event thus raised when contacts are assigned to the shipment.\n            </td></tr><tr><td nowrap><code>SeverityChanged</code></td><td>\n            The logger detected a sensor value that exceeded the alarm boundaries set for the shipment.\n            The severity level can be consulted to determine the severity level of the event.\n            </td></tr><tr><td nowrap><code>Rearm</code></td><td>\n            The logger boundaries were re-armed. This can be done to have the logger re-send notifications if boundaries are violated again.\n            Without rearming the logger device will not re-send notifications for repeated boundary violations.\n            Note that despite rearming then the SeverityChanged event will not be raised again.\n            </td></tr><tr><td nowrap><code>DataUpload</code></td><td>\n            The logger USB data binary file was uploaded through the upload API.\n            </td></tr></table>"
          },
          "shipmentReference": {
            "maxLength": 128,
            "minLength": 1,
            "type": "string",
            "description": "Customer supplied unique reference value that identifies the shipment."
          }
        },
        "additionalProperties": false,
        "description": "Defines a Logger Events Request"
      },
      "LoggerEventsResponse": {
        "type": "object",
        "properties": {
          "shipmentReference": {
            "type": "string",
            "description": "Customer supplied unique reference value that identifies the shipment."
          },
          "totalEventsCount": {
            "type": "integer",
            "description": "The total number of events for all loggers (in LoggerEvents).",
            "format": "int32"
          },
          "loggersCount": {
            "type": "integer",
            "description": "The total number of loggers in the response.\r\nNote that this value may be equal or less than the total number of loggers in\r\nthe shipment in case some logger devices have not reported any events or if a\r\ndevice is unable to contact the Controlant cloud platform.",
            "format": "int32"
          },
          "loggerEvents": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/LoggerEvents"
            },
            "description": "All logger events recorded by each logger."
          },
          "success": {
            "type": "boolean",
            "description": "Was the requested operation successful or not. If set to false please refer to the Message property for description of the error."
          },
          "responseTime": {
            "type": "integer",
            "description": "The time taken in milliseconds for processing of the request.",
            "format": "int64"
          },
          "message": {
            "type": "string",
            "description": "Text description of the ```Success``` return value."
          }
        },
        "additionalProperties": false,
        "description": "Defines a Logger Events Response"
      },
      "LoggerFirmware": {
        "type": "object",
        "properties": {
          "id": {
            "type": "integer",
            "description": "The firmware id of the firmware currently on the logger",
            "format": "int32"
          },
          "version": {
            "type": "string",
            "description": "The firmware version of the firmware currently on the logger"
          },
          "targetId": {
            "type": "integer",
            "description": "The target firmware for the logger\r\n<Note>If <code>targetId</code> is equal to <code>id</code> then this field will be absent in the response</Note>",
            "format": "int32"
          },
          "targetVersion": {
            "type": "string",
            "description": "The target firmware version for the logger\r\n<Note>If <code>targetVersion</code> is equal to <code>version</code> then this field will be absent in the response</Note>"
          }
        },
        "additionalProperties": false,
        "description": "Logger firmware information"
      },
      "LoggerInShipment": {
        "required": [
          "loggerId"
        ],
        "type": "object",
        "properties": {
          "loggerId": {
            "maxLength": 12,
            "minLength": 8,
            "type": "string",
            "allOf": [
              {
                "pattern": "^(?:C[A-Z]{2} )?[0-9a-fA-F]{8}$"
              },
              {
                "pattern": "^(?:C[A-Z]{2} )?[0-9a-fA-F]{8}$"
              }
            ],
            "description": "The unique identifier (ID) of requested logger.\r\nThis is the barcode value in <a href=\"https://simple.wikipedia.org/wiki/Hexadecimal\" target=\"_blank\">Hexadecimal format</a>\r\nassigned to this logger from Controlant and is printed on one side of the logger along with the barcode.\r\n<note>\r\n\tEnsure that all possible scanner-device dependent end-of-input characters are stripped from the LoggerId.\r\n\tThis includes characters such as carriage return or new line.\r\n</note><remarks>The barcode printed on most Controlant loggers contain a common prefix <code>CMS</code>.\r\nThe loggerId submitted to the Integration platform can include this prefix if needed.\r\nNote that LoggerIds coming from the Controlant Platform will never include the <code>CMS</code> prefix.</remarks>"
          },
          "palletReference": {
            "maxLength": 128,
            "type": "string",
            "description": "Customer supplied reference for the pallet this logger is placed on."
          },
          "placementReference": {
            "maxLength": 128,
            "type": "string",
            "description": "Customer supplied reference for the pallet/container/box this logger belongs to.\r\nThis is usually something along the lines of \"front\", \"back\", \"top\", \"bottom\" or anything that describes\r\nthe product placement within the shipment container or consignment."
          },
          "description": {
            "maxLength": 256,
            "type": "string",
            "description": "Customer supplied description of this logger."
          }
        },
        "additionalProperties": false,
        "description": "Defines a Logger Info"
      },
      "LoggerInfo": {
        "type": "object",
        "properties": {
          "loggerId": {
            "type": "string",
            "description": "The unique ID of this logger.\r\nThis is the barcode value in <a href=\"https://simple.wikipedia.org/wiki/Hexadecimal\" target=\"_blank\">Hexadecimal format</a>\r\nassigned to this logger from Controlant and is printed on one side of the logger along with the barcode.<remarks>The barcode printed on most Controlant loggers contain a common prefix <code>CMS</code>.\r\nNote that LoggerIds coming from the Controlant Platform will never include the <code>CMS</code> prefix.</remarks>"
          },
          "infoData": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/LoggerInfoData"
            },
            "description": "A collection of all existing logger info data for the particular logger."
          },
          "loggerType": {
            "enum": [
              "CO10",
              "Saga",
              "ThirdParty",
              "Unknown"
            ],
            "type": "string",
            "description": "The logger type.<table><tr><th nowrap>Value</th><th>Description</th></tr><tr><td nowrap><code><font style=\"text-decoration: line-through;\">CO10</font></code></td><td><font style=\"color:indianred;\">[Obsolete]</font> </td></tr><tr><td nowrap><code>Saga</code></td><td>\n            A Saga logger\n            </td></tr><tr><td nowrap><code><font style=\"text-decoration: line-through;\">ThirdParty</font></code></td><td><font style=\"color:indianred;\">[Obsolete]</font> </td></tr><tr><td nowrap><code>Unknown</code></td><td>\n            An unknown, or as-of-yet, unmapped logger type\n            </td></tr></table>"
          },
          "eventsCount": {
            "type": "integer",
            "description": "The number of events for this logger\r\n<note>This property is only set if the request uses the FetchEvents property to fetch events</note>",
            "format": "int32"
          },
          "events": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/LoggerEventData"
            },
            "description": "The logger events from the logger\r\n<note>This property is only set if the request uses the FetchEvents property to fetch events</note>"
          }
        },
        "additionalProperties": false,
        "description": "A collection of all currently existing logger info for a particular logger"
      },
      "LoggerInfoData": {
        "type": "object",
        "properties": {
          "value": {
            "type": "number",
            "description": "Measured logger info value.",
            "format": "double"
          },
          "type": {
            "enum": [
              "Battery",
              "CellSignal"
            ],
            "type": "string",
            "description": "Type of logger info for the measured value, currently only either Battery or Cell Signal.<table><tr><th nowrap>Value</th><th>Description</th></tr><tr><td nowrap><code>Battery</code></td><td>\n            Battery status, indicates the percentage left of the battery charge\n            </td></tr><tr><td nowrap><code>CellSignal</code></td><td>\n            Cellular signal, indicates the percentage of the signal strength\n            </td></tr></table>"
          },
          "lastUpdatedTimeStamp": {
            "type": "string",
            "description": "The time that the measured value was most recently updated.<span class=\"input-format\"> <a href=\"https://en.wikipedia.org/wiki/ISO_8601\" target=\"_blank\">Format: ISO 8601 (YYYY-MM-DDThh:mm:ssZ)</a></span>"
          }
        },
        "additionalProperties": false,
        "description": "Defines a single measured value for a logger info, its type of data and the time the value was most recently updated."
      },
      "LoggerListRequest": {
        "type": "object",
        "properties": {
          "loggerIds": {
            "type": "array",
            "items": {
              "type": "string"
            },
            "description": "Optional list of logger ids to filter the response by\r\n<note>If empty or absent, all loggers will be retrieved</note>"
          },
          "excludeLoggerIds": {
            "type": "array",
            "items": {
              "type": "string"
            },
            "description": "Optional list of logger ids to exclude in the response\r\n<note>If empty or absent, no filtering will be done on the logger list</note>"
          },
          "paging": {
            "allOf": [
              {
                "$ref": "#/components/schemas/PagingRequest"
              }
            ],
            "description": "Paging to use for the request. May be omitted, in which case the default number of records is returned for the first page"
          }
        },
        "additionalProperties": false,
        "description": "Defines a request for assigned loggers"
      },
      "LoggerListResponse": {
        "type": "object",
        "properties": {
          "loggers": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/LoggerDetail"
            },
            "description": "A list of loggers matching the request"
          },
          "loggersCount": {
            "type": "integer",
            "description": "The number of loggers in ```loggers```",
            "format": "int32"
          },
          "paging": {
            "allOf": [
              {
                "$ref": "#/components/schemas/PagingResponse"
              }
            ],
            "description": "The paging of the response"
          },
          "success": {
            "type": "boolean",
            "description": "Was the requested operation successful or not. If set to false please refer to the Message property for description of the error."
          },
          "responseTime": {
            "type": "integer",
            "description": "The time taken in milliseconds for processing of the request.",
            "format": "int64"
          },
          "message": {
            "type": "string",
            "description": "Text description of the ```Success``` return value."
          }
        },
        "additionalProperties": false,
        "description": "Response for get logger list with further information on each logger"
      },
      "LoggerLocationTrace": {
        "type": "object",
        "properties": {
          "loggerId": {
            "type": "string",
            "description": "The unique ID of this logger.\r\nThis is the barcode value in <a href=\"https://simple.wikipedia.org/wiki/Hexadecimal\" target=\"_blank\">Hexadecimal format</a>\r\nassigned to this logger from Controlant and is printed on one side of the logger along with the barcode.<remarks>The barcode printed on most Controlant loggers contain a common prefix <code>CMS</code>.\r\nNote that LoggerIds coming from the Controlant Platform will never include the <code>CMS</code> prefix.</remarks>"
          },
          "traces": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/LocationTrace"
            },
            "description": "The list of all geo-location information recorded by the logger during the shipment."
          },
          "tracesCount": {
            "type": "integer",
            "description": "The total number of geo-location traces in ```Traces```.",
            "format": "int32"
          }
        },
        "additionalProperties": false,
        "description": "Defines a Logger Location Trace"
      },
      "LoggerState": {
        "type": "object",
        "properties": {
          "loggerId": {
            "type": "string",
            "description": "The unique ID of this logger.\r\nThis is the barcode value in <a href=\"https://simple.wikipedia.org/wiki/Hexadecimal\" target=\"_blank\">Hexadecimal format</a>\r\nassigned to this logger from Controlant and is printed on one side of the logger along with the barcode.<remarks>The barcode printed on most Controlant loggers contain a common prefix <code>CMS</code>.\r\nNote that LoggerIds coming from the Controlant Platform will never include the <code>CMS</code> prefix.</remarks>"
          },
          "palletReference": {
            "type": "string",
            "description": "Customer supplied reference for the pallet this logger is placed on."
          },
          "placementReference": {
            "type": "string",
            "description": "Customer supplied reference for the pallet/container/box this logger belongs to.\r\nThis is usually something along the lines of \"front\", \"back\", \"top\", \"bottom\" or anything that describes\r\nthe product placement within the shipment container or consignment."
          },
          "description": {
            "type": "string",
            "description": "Customer supplied description of this logger."
          },
          "timeStampLastSync": {
            "type": "string",
            "description": "Timestamp when the logger last communicated data with the Controlant platform.<span class=\"input-format\"> <a href=\"https://en.wikipedia.org/wiki/ISO_8601\" target=\"_blank\">Format: ISO 8601 (YYYY-MM-DDThh:mm:ssZ)</a></span>"
          },
          "timeStampDeparted": {
            "type": "string",
            "description": "Timestamp when the logger departed from the origin location.<span class=\"input-format\"> <a href=\"https://en.wikipedia.org/wiki/ISO_8601\" target=\"_blank\">Format: ISO 8601 (YYYY-MM-DDThh:mm:ssZ)</a></span>"
          },
          "timeStampArrived": {
            "type": "string",
            "description": "Timestamp when the logger detected its arrival at the destination location.<span class=\"input-format\"> <a href=\"https://en.wikipedia.org/wiki/ISO_8601\" target=\"_blank\">Format: ISO 8601 (YYYY-MM-DDThh:mm:ssZ)</a></span>"
          },
          "timeStampShipped": {
            "type": "string",
            "description": "Timestamp when the logger detected or was notified that it had shipped from the origin location.<span class=\"input-format\"> <a href=\"https://en.wikipedia.org/wiki/ISO_8601\" target=\"_blank\">Format: ISO 8601 (YYYY-MM-DDThh:mm:ssZ)</a></span>"
          },
          "timeStampDelivered": {
            "type": "string",
            "description": "Timestamp when the logger was notified that it had been delivered to the customer at the destination location.<span class=\"input-format\"> <a href=\"https://en.wikipedia.org/wiki/ISO_8601\" target=\"_blank\">Format: ISO 8601 (YYYY-MM-DDThh:mm:ssZ)</a></span>"
          },
          "sensorConfigurations": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/SensorConfiguration"
            },
            "description": "List of alert boundaries and configurations that are configured for the loggers' sensors."
          },
          "preferredWakeUpInterval": {
            "enum": [
              "Default",
              "TwoHours",
              "ThreeHours",
              "SixHours",
              "TwelveHours",
              "TwentyFourHours"
            ],
            "type": "string",
            "description": "The preferred wakeup interval configured for the logger.<table><tr><th nowrap>Value</th><th>Description</th></tr><tr><td nowrap><code>Default</code></td><td>\n            The default wakeup period of 1 wake up every 1 hour\n            </td></tr><tr><td nowrap><code>TwoHours</code></td><td>\n            Wakeup period of 1 wake up every 2 hours\n            </td></tr><tr><td nowrap><code>ThreeHours</code></td><td>\n            Wakeup period of 1 wake up every 3 hours\n            </td></tr><tr><td nowrap><code>SixHours</code></td><td>\n            Wakeup period of 1 wake up every 6 hours\n            </td></tr><tr><td nowrap><code>TwelveHours</code></td><td>\n            Wakeup period of 1 wake up every 12 hours.\n            This is a very long sleeping period and should be reserved for special cases where battery-life is critical (e.g. logger in long duration storage in warehouse)\n            </td></tr><tr><td nowrap><code>TwentyFourHours</code></td><td>\n            Wakeup period of 1 wake up every 24 hours.\n            This is an extremely long sleeping period and should be reserved for special cases where battery-life is critical (e.g. logger in long duration storage in warehouse)\n            NOTE: this is only available/applicable to Saga loggers\n            </td></tr></table>"
          },
          "status": {
            "enum": [
              "Draft",
              "Ready",
              "Shipping",
              "Delivered",
              "Closed",
              "Deleted"
            ],
            "type": "string",
            "description": "The shipping status determined for the given logger by the platform.<table><tr><th nowrap>Value</th><th>Description</th></tr><tr><td nowrap><code>Draft</code></td><td>\n            Shipment is in a draft state, it cannot be started from this state. Usually indicates that it contains incomplete data or unapproved values\n            </td></tr><tr><td nowrap><code>Ready</code></td><td>\n            Shipment is ready to be sent\n            </td></tr><tr><td nowrap><code>Shipping</code></td><td>\n            Shipment is in the process of being delivered. No changes will be applied to logger data during this status.\n            </td></tr><tr><td nowrap><code>Delivered</code></td><td>\n            Shipment has satisfied the conditions for delivery and is considered delivered.\n            </td></tr><tr><td nowrap><code>Closed</code></td><td>\n            Shipment has been closed\n            </td></tr><tr><td nowrap><code>Deleted</code></td><td>\n            Shipment was deleted from the system and was never sent to shipping status\n            </td></tr></table>"
          },
          "loggerType": {
            "enum": [
              "CO10",
              "Saga",
              "ThirdParty",
              "Unknown"
            ],
            "type": "string",
            "description": "The logger type.<table><tr><th nowrap>Value</th><th>Description</th></tr><tr><td nowrap><code><font style=\"text-decoration: line-through;\">CO10</font></code></td><td><font style=\"color:indianred;\">[Obsolete]</font> </td></tr><tr><td nowrap><code>Saga</code></td><td>\n            A Saga logger\n            </td></tr><tr><td nowrap><code><font style=\"text-decoration: line-through;\">ThirdParty</font></code></td><td><font style=\"color:indianred;\">[Obsolete]</font> </td></tr><tr><td nowrap><code>Unknown</code></td><td>\n            An unknown, or as-of-yet, unmapped logger type\n            </td></tr></table>"
          }
        },
        "additionalProperties": false,
        "description": "Defines a Logger State"
      },
      "LoggerStatusCheckRequest": {
        "required": [
          "loggerId"
        ],
        "type": "object",
        "properties": {
          "loggerId": {
            "maxLength": 12,
            "minLength": 8,
            "pattern": "^(?:C[A-Z]{2} )?[0-9a-fA-F]{8}$",
            "type": "string",
            "description": "The unique identifier (ID) of requested logger.\r\nThis is the barcode value in <a href=\"https://simple.wikipedia.org/wiki/Hexadecimal\" target=\"_blank\">Hexadecimal format</a>\r\nassigned to this logger from Controlant and is printed on one side of the logger along with the barcode.\r\n<note>\r\n\tEnsure that all possible scanner-device dependent end-of-input characters are stripped from the LoggerId.\r\n\tThis includes characters such as carriage return or new line.\r\n</note><remarks>The barcode printed on most Controlant loggers contain a common prefix <code>CMS</code>.\r\nThe loggerId submitted to the Integration platform can include this prefix if needed.\r\nNote that LoggerIds coming from the Controlant Platform will never include the <code>CMS</code> prefix.</remarks>"
          }
        },
        "additionalProperties": false,
        "description": "Defines a request for logger status check"
      },
      "LoggerStatusCheckResponse": {
        "type": "object",
        "properties": {
          "loggerId": {
            "type": "string",
            "description": "The unique ID of this logger.\r\nThis is the barcode value in <a href=\"https://simple.wikipedia.org/wiki/Hexadecimal\" target=\"_blank\">Hexadecimal format</a>\r\nassigned to this logger from Controlant and is printed on one side of the logger along with the barcode.<remarks>The barcode printed on most Controlant loggers contain a common prefix <code>CMS</code>.\r\nNote that LoggerIds coming from the Controlant Platform will never include the <code>CMS</code> prefix.</remarks>"
          },
          "allowedInShipment": {
            "type": "boolean",
            "description": "Boolean value indicating if logger is valid for a shipment.<remarks>True if logger is valid for shipment. Otherwise false. See NotAllowedReason field for details</remarks>"
          },
          "operationStatus": {
            "enum": [
              "InStock",
              "Active",
              "Deactivated",
              "BeingServiced",
              "Recalled"
            ],
            "type": "string",
            "description": "Operation status for this logger.<table><tr><th nowrap>Value</th><th>Description</th></tr><tr><td nowrap><code>InStock</code></td><td>\n            Logger is in stock\n            </td></tr><tr><td nowrap><code>Active</code></td><td>\n            Logger is active\n            </td></tr><tr><td nowrap><code>Deactivated</code></td><td>\n            Logger has been deactivated\n            </td></tr><tr><td nowrap><code>BeingServiced</code></td><td>\n            Logger is being serviced\n            </td></tr><tr><td nowrap><code><font style=\"text-decoration: line-through;\">Recalled</font></code></td><td><font style=\"color:indianred;\">[Obsolete]</font> </td></tr></table>"
          },
          "notAllowedReason": {
            "type": "string",
            "description": "Descriptive reason for why a logger is not allowed in a shipment."
          },
          "calibration": {
            "allOf": [
              {
                "$ref": "#/components/schemas/LoggerCalibrationResult"
              }
            ],
            "description": "Calibration results for this logger."
          },
          "loggerType": {
            "enum": [
              "CO10",
              "Saga",
              "ThirdParty",
              "Unknown"
            ],
            "type": "string",
            "description": "The logger type.<table><tr><th nowrap>Value</th><th>Description</th></tr><tr><td nowrap><code><font style=\"text-decoration: line-through;\">CO10</font></code></td><td><font style=\"color:indianred;\">[Obsolete]</font> </td></tr><tr><td nowrap><code>Saga</code></td><td>\n            A Saga logger\n            </td></tr><tr><td nowrap><code><font style=\"text-decoration: line-through;\">ThirdParty</font></code></td><td><font style=\"color:indianred;\">[Obsolete]</font> </td></tr><tr><td nowrap><code>Unknown</code></td><td>\n            An unknown, or as-of-yet, unmapped logger type\n            </td></tr></table>"
          },
          "success": {
            "type": "boolean",
            "description": "Was the requested operation successful or not. If set to false please refer to the Message property for description of the error."
          },
          "responseTime": {
            "type": "integer",
            "description": "The time taken in milliseconds for processing of the request.",
            "format": "int64"
          },
          "message": {
            "type": "string",
            "description": "Text description of the ```Success``` return value."
          }
        },
        "additionalProperties": false,
        "description": "Defines logger status"
      },
      "LoggerTemperatureMeasurement": {
        "type": "object",
        "properties": {
          "loggerId": {
            "type": "string",
            "description": "The unique ID of this logger.\r\nThis is the barcode value in <a href=\"https://simple.wikipedia.org/wiki/Hexadecimal\" target=\"_blank\">Hexadecimal format</a>\r\nassigned to this logger from Controlant and is printed on one side of the logger along with the barcode.<remarks>The barcode printed on most Controlant loggers contain a common prefix <code>CMS</code>.\r\nNote that LoggerIds coming from the Controlant Platform will never include the <code>CMS</code> prefix.</remarks>"
          },
          "temperatures": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/TemperatureMeasurement"
            },
            "description": "The list of all temperature information recorded by the logger during the shipment."
          },
          "temperaturesCount": {
            "type": "integer",
            "description": "The total count of temperatures in ```Temperatures```.",
            "format": "int32"
          }
        },
        "additionalProperties": false,
        "description": "Defines a Logger Temperature Measurement"
      },
      "LoggerTemplateCreateRequest": {
        "required": [
          "deliveryMethod",
          "excursionSeverityThreshold",
          "preferredWakeUpInterval",
          "reference",
          "shippingMethod"
        ],
        "type": "object",
        "properties": {
          "reference": {
            "maxLength": 128,
            "minLength": 1,
            "type": "string",
            "description": "Customer supplied unique reference value that identifies this template."
          },
          "shippingMethod": {
            "minLength": 1,
            "enum": [
              "GeoFence",
              "Button",
              "GeoFenceOrButton"
            ],
            "type": "string",
            "description": "The method that the loggers use to determine that the shipment they're assigned to has been shipped.<table><tr><th nowrap>Value</th><th>Description</th></tr><tr><td nowrap><code>GeoFence</code></td><td>\n            Shipping triggered by the logger leaving a predefined GeoFence area\n            </td></tr><tr><td nowrap><code>Button</code></td><td>\n            Shipping initiated by pressing the button on the device\n            </td></tr><tr><td nowrap><code>GeoFenceOrButton</code></td><td>\n            Shipping initiated by pressing the button on the device OR the logger leaving a predefined GeoFence area\n            </td></tr></table>"
          },
          "deliveryMethod": {
            "minLength": 1,
            "enum": [
              "GeoFence",
              "Button",
              "GeoFenceOrButton",
              "GeoFenceAndButton",
              "Platform"
            ],
            "type": "string",
            "description": "The method which the loggers use to determine that they have arrived at their destination and can consider the shipment as delivered.<table><tr><th nowrap>Value</th><th>Description</th></tr><tr><td nowrap><code>GeoFence</code></td><td>\n            Delivery triggered by defined GeoFence area\n            </td></tr><tr><td nowrap><code>Button</code></td><td>\n            Delivery initiated by pressing the button on the device\n            </td></tr><tr><td nowrap><code>GeoFenceOrButton</code></td><td>\n            Delivery initiated by pressing the button on the device OR when the logger is within a predefined GeoFence area\n            </td></tr><tr><td nowrap><code>GeoFenceAndButton</code></td><td>\n            Delivery initiated by pressing the button on the device AND only when the logger is within a predefined GeoFence area\n            </td></tr><tr><td nowrap><code>Platform</code></td><td>\n            Delivery initiated by initiating a platform action/method without considering logger button press or location.\n            </td></tr></table>"
          },
          "warningsIgnorePeriodAtStart": {
            "maximum": 43200,
            "minimum": 0,
            "type": "integer",
            "description": "A period (in seconds) divisible by 600 seconds (10 minute intervals) at the beginning of shipment where the alarm functionality is inactive.\r\nDuring ignore periods temperature data is still being recorded and will be available.<remarks>Example: Product is placed in a truck or package for transport that is not preconditioned.\r\nWarningsIgnorePeriodAtStart is set to 10 minutes to allow for temperature to settle without raising alarms.</remarks>",
            "format": "int32"
          },
          "warningsIgnorePeriodAtEnd": {
            "maximum": 43200,
            "minimum": 0,
            "type": "integer",
            "description": "A period (in seconds) divisible by 600 seconds (10 minute intervals) at the end of shipment where the alarm functionality is inactive.\r\nDuring ignore periods temperature data is still being recorded and will be available.<remarks>Example: There is a known delay at destination from the time logger is removed from product and until the stop button is pressed on all loggers.\r\nWarningsIgnorePeriodAtEnd is set to 20 minutes to allow for button press delays while arranging product at receiving end.</remarks>",
            "format": "int32"
          },
          "excursionSeverityThreshold": {
            "minLength": 1,
            "enum": [
              "NoExcursion",
              "Level1",
              "Level2",
              "Level3"
            ],
            "type": "string",
            "description": "The threshold before alerts are raised for this shipment.<table><tr><th nowrap>Value</th><th>Description</th></tr><tr><td nowrap><code>NoExcursion</code></td><td>\n            No excursion registered when alert is triggered.\n            </td></tr><tr><td nowrap><code>Level1</code></td><td>\n            Alert will raise a Low (Level 1) excursion critically when triggered.\n            </td></tr><tr><td nowrap><code>Level2</code></td><td>\n            Alert will raise a Medium (Level 2) excursion critically when triggered.\n            </td></tr><tr><td nowrap><code>Level3</code></td><td>\n            Alert will raise a High (Level 3) excursion critically when triggered.\n            </td></tr></table>"
          },
          "preferredWakeUpInterval": {
            "minLength": 1,
            "enum": [
              "Default",
              "TwoHours",
              "ThreeHours",
              "SixHours",
              "TwelveHours",
              "TwentyFourHours"
            ],
            "type": "string",
            "description": "Sets a preferred wakeup interval to apply to loggers in this shipment.<table><tr><th nowrap>Value</th><th>Description</th></tr><tr><td nowrap><code>Default</code></td><td>\n            The default wakeup period of 1 wake up every 1 hour\n            </td></tr><tr><td nowrap><code>TwoHours</code></td><td>\n            Wakeup period of 1 wake up every 2 hours\n            </td></tr><tr><td nowrap><code>ThreeHours</code></td><td>\n            Wakeup period of 1 wake up every 3 hours\n            </td></tr><tr><td nowrap><code>SixHours</code></td><td>\n            Wakeup period of 1 wake up every 6 hours\n            </td></tr><tr><td nowrap><code>TwelveHours</code></td><td>\n            Wakeup period of 1 wake up every 12 hours.\n            This is a very long sleeping period and should be reserved for special cases where battery-life is critical (e.g. logger in long duration storage in warehouse)\n            </td></tr><tr><td nowrap><code>TwentyFourHours</code></td><td>\n            Wakeup period of 1 wake up every 24 hours.\n            This is an extremely long sleeping period and should be reserved for special cases where battery-life is critical (e.g. logger in long duration storage in warehouse)\n            NOTE: this is only available/applicable to Saga loggers\n            </td></tr></table>"
          }
        },
        "additionalProperties": false,
        "description": "Defines a Logger Template request"
      },
      "LoggerTemplateInfo": {
        "type": "object",
        "properties": {
          "shippingMethod": {
            "enum": [
              "GeoFence",
              "Button",
              "GeoFenceOrButton"
            ],
            "type": "string",
            "description": "The method that the loggers use to determine that the shipment they're assigned to has been shipped.<table><tr><th nowrap>Value</th><th>Description</th></tr><tr><td nowrap><code>GeoFence</code></td><td>\n            Shipping triggered by the logger leaving a predefined GeoFence area\n            </td></tr><tr><td nowrap><code>Button</code></td><td>\n            Shipping initiated by pressing the button on the device\n            </td></tr><tr><td nowrap><code>GeoFenceOrButton</code></td><td>\n            Shipping initiated by pressing the button on the device OR the logger leaving a predefined GeoFence area\n            </td></tr></table>"
          },
          "deliveryMethod": {
            "enum": [
              "GeoFence",
              "Button",
              "GeoFenceOrButton",
              "GeoFenceAndButton",
              "Platform"
            ],
            "type": "string",
            "description": "The method which the loggers use to determine that they have arrived at their destination and can consider the shipment as delivered.<table><tr><th nowrap>Value</th><th>Description</th></tr><tr><td nowrap><code>GeoFence</code></td><td>\n            Delivery triggered by defined GeoFence area\n            </td></tr><tr><td nowrap><code>Button</code></td><td>\n            Delivery initiated by pressing the button on the device\n            </td></tr><tr><td nowrap><code>GeoFenceOrButton</code></td><td>\n            Delivery initiated by pressing the button on the device OR when the logger is within a predefined GeoFence area\n            </td></tr><tr><td nowrap><code>GeoFenceAndButton</code></td><td>\n            Delivery initiated by pressing the button on the device AND only when the logger is within a predefined GeoFence area\n            </td></tr><tr><td nowrap><code>Platform</code></td><td>\n            Delivery initiated by initiating a platform action/method without considering logger button press or location.\n            </td></tr></table>"
          },
          "warningsIgnorePeriodAtStart": {
            "type": "integer",
            "description": "A period (in seconds) divisible by 600 seconds (10 minute intervals) at the beginning of shipment where the alarm functionality is inactive.\r\nDuring ignore periods temperature data is still being recorded and will be available.<remarks>Example: Product is placed in a truck or package for transport that is not preconditioned.\r\nWarningsIgnorePeriodAtStart is set to 10 minutes to allow for temperature to settle without raising alarms.</remarks>",
            "format": "int32"
          },
          "warningsIgnorePeriodAtEnd": {
            "type": "integer",
            "description": "A period (in seconds) divisible by 600 seconds (10 minute intervals) at the end of shipment where the alarm functionality is inactive.\r\nDuring ignore periods temperature data is still being recorded and will be available.<remarks>Example: There is a known delay at destination from the time logger is removed from product and until the stop button is pressed on all loggers.\r\nWarningsIgnorePeriodAtEnd is set to 20 minutes to allow for button press delays while arranging product at receiving end.</remarks>",
            "format": "int32"
          },
          "excursionSeverityThreshold": {
            "enum": [
              "NoExcursion",
              "Level1",
              "Level2",
              "Level3"
            ],
            "type": "string",
            "description": "The threshold before alerts are raised for this shipment.<table><tr><th nowrap>Value</th><th>Description</th></tr><tr><td nowrap><code>NoExcursion</code></td><td>\n            No excursion registered when alert is triggered.\n            </td></tr><tr><td nowrap><code>Level1</code></td><td>\n            Alert will raise a Low (Level 1) excursion critically when triggered.\n            </td></tr><tr><td nowrap><code>Level2</code></td><td>\n            Alert will raise a Medium (Level 2) excursion critically when triggered.\n            </td></tr><tr><td nowrap><code>Level3</code></td><td>\n            Alert will raise a High (Level 3) excursion critically when triggered.\n            </td></tr></table>"
          },
          "preferredWakeUpInterval": {
            "enum": [
              "Default",
              "TwoHours",
              "ThreeHours",
              "SixHours",
              "TwelveHours",
              "TwentyFourHours"
            ],
            "type": "string",
            "description": "Sets a preferred wakeup interval to apply to loggers in this shipment.<table><tr><th nowrap>Value</th><th>Description</th></tr><tr><td nowrap><code>Default</code></td><td>\n            The default wakeup period of 1 wake up every 1 hour\n            </td></tr><tr><td nowrap><code>TwoHours</code></td><td>\n            Wakeup period of 1 wake up every 2 hours\n            </td></tr><tr><td nowrap><code>ThreeHours</code></td><td>\n            Wakeup period of 1 wake up every 3 hours\n            </td></tr><tr><td nowrap><code>SixHours</code></td><td>\n            Wakeup period of 1 wake up every 6 hours\n            </td></tr><tr><td nowrap><code>TwelveHours</code></td><td>\n            Wakeup period of 1 wake up every 12 hours.\n            This is a very long sleeping period and should be reserved for special cases where battery-life is critical (e.g. logger in long duration storage in warehouse)\n            </td></tr><tr><td nowrap><code>TwentyFourHours</code></td><td>\n            Wakeup period of 1 wake up every 24 hours.\n            This is an extremely long sleeping period and should be reserved for special cases where battery-life is critical (e.g. logger in long duration storage in warehouse)\n            NOTE: this is only available/applicable to Saga loggers\n            </td></tr></table>"
          }
        },
        "additionalProperties": false,
        "description": "Defines a Logger Template"
      },
      "LoggerWithEvaluation": {
        "type": "object",
        "properties": {
          "loggerId": {
            "type": "string",
            "description": "The unique ID of this logger.\r\nThis is the barcode value in <a href=\"https://simple.wikipedia.org/wiki/Hexadecimal\" target=\"_blank\">Hexadecimal format</a>\r\nassigned to this logger from Controlant and is printed on one side of the logger along with the barcode.<remarks>The barcode printed on most Controlant loggers contain a common prefix <code>CMS</code>.\r\nNote that LoggerIds coming from the Controlant Platform will never include the <code>CMS</code> prefix.</remarks>"
          },
          "evaluation": {
            "allOf": [
              {
                "$ref": "#/components/schemas/LoggerEvaluation"
              }
            ],
            "description": "Stability budget evaluation for this logger."
          }
        },
        "additionalProperties": false,
        "description": "Defines a Logger With Evaluation"
      },
      "LoggersInfoRequest": {
        "required": [
          "loggerIds"
        ],
        "type": "object",
        "properties": {
          "loggerIds": {
            "maxItems": 1000,
            "minItems": 1,
            "type": "array",
            "items": {
              "maxLength": 12,
              "minLength": 8,
              "pattern": "^(?:C[A-Z]{2} )?[0-9a-fA-F]{8}$",
              "type": "string"
            },
            "description": "A list of the unique identifiers (ID) of requested loggers.\r\nThis is the barcode value in <a href=\"https://simple.wikipedia.org/wiki/Hexadecimal\" target=\"_blank\">Hexadecimal format</a>\r\nassigned to loggers from Controlant and is printed on one side of the logger along with the barcode.\r\n<note>\r\n    Ensure that all possible scanner-device dependant end-of-input characters are stripped from the LoggerIds.\r\n    This includes characters such as carriage return or new line.\r\n</note><p>\r\n    If logger identifiers are shorter than 8 characters then the value should be left-padded with zeros ('0').\r\n</p><remarks>The barcode printed on most Controlant loggers contain a common prefix <code>CMS</code>.\r\nThe loggerId submitted to the Integration platform can include this prefix if needed.\r\nNote that LoggerIds coming from the Controlant Platform will never include the <code>CMS</code> prefix.</remarks>"
          },
          "fetchEvents": {
            "allOf": [
              {
                "$ref": "#/components/schemas/EventsRetrieval"
              }
            ],
            "description": "Settings for event retrieval for the logger."
          }
        },
        "additionalProperties": false,
        "description": "Defines a request for logger information for requested loggers"
      },
      "LoggersInfoResponse": {
        "type": "object",
        "properties": {
          "loggers": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/LoggerInfo"
            },
            "description": "A collection of loggers with their existing info data."
          },
          "loggersCount": {
            "type": "integer",
            "description": "Number of loggers that have existing info data.",
            "format": "int32"
          },
          "success": {
            "type": "boolean",
            "description": "Was the requested operation successful or not. If set to false please refer to the Message property for description of the error."
          },
          "responseTime": {
            "type": "integer",
            "description": "The time taken in milliseconds for processing of the request.",
            "format": "int64"
          },
          "message": {
            "type": "string",
            "description": "Text description of the ```Success``` return value."
          }
        },
        "additionalProperties": false,
        "description": "Response including a collection of loggers with their currently existing info data"
      },
      "NotFoundErrorResponse": {
        "type": "object",
        "properties": {
          "errorMessage": {
            "type": "string",
            "description": "Human readable text describing the error that occurred during the operation."
          },
          "status": {
            "type": "integer",
            "description": "The HTTP Status code associated with this error.",
            "format": "int32"
          },
          "errors": {
            "type": "object",
            "additionalProperties": {
              "type": "string",
              "nullable": true
            },
            "description": "Gets the errors associated with this instance."
          },
          "success": {
            "type": "boolean",
            "description": "Was the requested operation successful or not. If set to false please refer to the Message property for description of the error."
          },
          "responseTime": {
            "type": "integer",
            "description": "The time taken in milliseconds for processing of the request.",
            "format": "int64"
          },
          "message": {
            "type": "string",
            "description": "Text description of the ```Success``` return value."
          }
        },
        "additionalProperties": false,
        "description": "Defines a Not Found Error Response"
      },
      "PagingRequest": {
        "type": "object",
        "properties": {
          "page": {
            "minimum": 1,
            "type": "integer",
            "description": "The (1-based) page to retrieve",
            "format": "int32"
          },
          "pageSize": {
            "minimum": 10,
            "type": "integer",
            "description": "The maximum number of records on the page",
            "format": "int32"
          }
        },
        "additionalProperties": false,
        "description": "Paging in requests"
      },
      "PagingResponse": {
        "type": "object",
        "properties": {
          "page": {
            "type": "integer",
            "description": "The current page (1-based) being returned",
            "format": "int32"
          },
          "pageSize": {
            "type": "integer",
            "description": "The maximum number of records on the page",
            "format": "int32"
          },
          "numberOfPages": {
            "type": "integer",
            "description": "The total number of available pages",
            "format": "int32"
          },
          "numberOfRecords": {
            "type": "integer",
            "description": "The total number of available records",
            "format": "int32"
          }
        },
        "additionalProperties": false,
        "description": "Paging in responses"
      },
      "PartialProductEntry": {
        "required": [
          "productReference"
        ],
        "type": "object",
        "properties": {
          "productReference": {
            "maxLength": 128,
            "minLength": 1,
            "type": "string",
            "description": "A unique human friendly reference for the partial product, this reference does not have to map to\r\nan already existing product.\r\n<note>If this reference corresponds to an product previously created by the customer\r\n      then values from that product configuration will be referenced automatically</note><remarks>This value will be presented to the users at various places in UIs and Reports.\r\nPlease ensure that you use a textual value that helps users and quality inspectors to easily identify the product in question.</remarks>"
          },
          "productName": {
            "maxLength": 256,
            "type": "string",
            "description": "Optional customer defined name for this partial product, used for display purposes.<remarks>If empty then the value from ```ProductReference``` will be used.</remarks>"
          },
          "transportConditions": {
            "allOf": [
              {
                "$ref": "#/components/schemas/TransportCondition"
              }
            ],
            "description": "Optional transport conditions defined for this partial product profile."
          },
          "description": {
            "maxLength": 256,
            "type": "string",
            "description": "Optional human readable description of this partial product entry in the shipment.\r\nOnly used for display purposes."
          },
          "palletReference": {
            "maxLength": 128,
            "type": "string",
            "description": "Customer supplied reference for the pallet this partial product is placed on."
          },
          "placementReference": {
            "maxLength": 128,
            "type": "string",
            "description": "Customer supplied reference for the location on the pallet/container/box this partial product is placed in/on.\r\nThis is usually something along the lines of \"front\", \"back\", \"top\", \"bottom\" or anything that describes\r\nthe product placement within the shipment container."
          },
          "batchReference": {
            "maxLength": 128,
            "type": "string",
            "description": "A unique identifying number or reference to a production batch or lot number relevant\r\nto the partial product being shipped. Primarily used to trace production history for a given product."
          },
          "skuReference": {
            "maxLength": 128,
            "type": "string",
            "description": "Stock-keeping unit (SKU) reference used to track the movement of product inventory."
          },
          "properties": {
            "maxItems": 1000,
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/CustomProperty"
            },
            "description": "List of customer defined properties that should be assigned to this particular partial product while in the shipment.<remarks>All custom properties not created in the Controlant system prior to being assigned are automatically created upon first use.</remarks>"
          }
        },
        "additionalProperties": false,
        "description": "Defines a Partial Product Entry"
      },
      "PhysicalLocation": {
        "type": "object",
        "properties": {
          "country": {
            "type": "string",
            "description": "The country in which the unit is located."
          },
          "state": {
            "type": "string",
            "description": "The state in which the unit is located."
          },
          "city": {
            "type": "string",
            "description": "The city in which the unit is located."
          },
          "postCode": {
            "type": "string",
            "description": "The post code in which the unit is located."
          },
          "street": {
            "type": "string",
            "description": "The street at which the unit is located."
          },
          "accuracyInMeters": {
            "type": "integer",
            "description": "The accuracy of the measurements represented in meters.",
            "format": "int32"
          }
        },
        "additionalProperties": false,
        "description": "Represents data on the physical location of a device"
      },
      "ProductCreateRequest": {
        "required": [
          "reference",
          "temperatureProfile",
          "transportConditions"
        ],
        "type": "object",
        "properties": {
          "reference": {
            "maxLength": 128,
            "minLength": 1,
            "type": "string",
            "description": "Customer supplied unique reference value that identifies this product profile."
          },
          "name": {
            "maxLength": 256,
            "type": "string",
            "description": "Optional customer defined name for this product, used for display purposes.<remarks>If empty then the value from ```Reference``` will be used.</remarks>"
          },
          "description": {
            "maxLength": 256,
            "type": "string",
            "description": "Optional human readable description of this product profile, used for display purposes."
          },
          "transportConditions": {
            "allOf": [
              {
                "$ref": "#/components/schemas/TransportCondition"
              }
            ],
            "description": "Transport conditions defined for this product profile."
          },
          "freezeThawCycles": {
            "allOf": [
              {
                "$ref": "#/components/schemas/FreezeThaw"
              }
            ],
            "description": "The freeze-thaw temperature cycling that is allowed before the product quality is adversely affected."
          },
          "temperatureProfile": {
            "allOf": [
              {
                "$ref": "#/components/schemas/TemperatureProfile"
              }
            ],
            "description": "List of one or more allowable temperature stability profiles and their budgets."
          },
          "properties": {
            "maxItems": 1000,
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/CustomProperty"
            },
            "description": "List of customer defined properties that should be assigned to this product.<remarks>All custom properties not created in the Controlant system prior to being assigned are automatically created upon first use.</remarks>"
          }
        },
        "additionalProperties": false,
        "description": "Defines a Product"
      },
      "ProductEntry": {
        "required": [
          "productReference"
        ],
        "type": "object",
        "properties": {
          "description": {
            "maxLength": 256,
            "type": "string",
            "description": "Optional human readable description of this product entry in the shipment.\r\nOnly used for display purposes"
          },
          "productReference": {
            "maxLength": 128,
            "minLength": 1,
            "type": "string",
            "description": "Reference to the already created product to assign to the shipment.<remarks>See the <i>Create Product</i> endpoint for more details on how to create products.</remarks>"
          },
          "palletReference": {
            "maxLength": 128,
            "type": "string",
            "description": "Customer supplied reference for the pallet this product is placed on."
          },
          "placementReference": {
            "maxLength": 128,
            "type": "string",
            "description": "Customer supplied reference for the location on the pallet/container/box this product is placed in/on.\r\nThis is usually something along the lines of \"front\", \"back\", \"top\", \"bottom\" or anything that describes\r\nthe product placement within the shipment container."
          },
          "batchReference": {
            "maxLength": 128,
            "type": "string",
            "description": "A unique identifying number or reference to a production batch or lot number relevant\r\nto the product being shipped. Primarily used to trace production history for a given product."
          },
          "skuReference": {
            "maxLength": 128,
            "type": "string",
            "description": "Stock-keeping unit (SKU) reference used to track the movement of product inventory."
          },
          "properties": {
            "maxItems": 1000,
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/CustomProperty"
            },
            "description": "List of customer defined properties that should be assigned to this particular product while in the shipment.<remarks>All custom properties not created in the Controlant system prior to being assigned are automatically created upon first use.</remarks>"
          }
        },
        "additionalProperties": false,
        "description": "Defines a Product Entry"
      },
      "ProductEntryWithEvaluation": {
        "required": [
          "productReference"
        ],
        "type": "object",
        "properties": {
          "evaluation": {
            "allOf": [
              {
                "$ref": "#/components/schemas/ProductEvaluation"
              }
            ],
            "description": "Product evaluation for the shipment product. Indicates if the product is safe for release or not,\r\nbased on recorded temperature data during transit."
          },
          "productReference": {
            "maxLength": 128,
            "minLength": 1,
            "type": "string",
            "description": "The customer supplied unique reference value for the product."
          },
          "productName": {
            "type": "string",
            "description": "Optional customer defined name for this product, used for display purposes.<remarks>If empty then the value set in ```ProductReference``` will be used.</remarks>"
          },
          "properties": {
            "maxItems": 1000,
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/CustomProperty"
            },
            "description": "List of customer defined properties assigned to this particular product while in the shipment."
          },
          "description": {
            "maxLength": 256,
            "type": "string",
            "description": "Optional human readable description of this product entry in the shipment.\r\nOnly used for display purposes"
          },
          "palletReference": {
            "maxLength": 128,
            "type": "string",
            "description": "Customer supplied reference for the pallet this product is placed on."
          },
          "placementReference": {
            "maxLength": 128,
            "type": "string",
            "description": "Customer supplied reference for the location on the pallet/container/box this product is placed in/on.\r\nThis is usually something along the lines of \"front\", \"back\", \"top\", \"bottom\" or anything that describes\r\nthe product placement within the shipment container."
          },
          "batchReference": {
            "maxLength": 128,
            "type": "string",
            "description": "A unique identifying number or reference to a production batch or lot number relevant\r\nto the product being shipped. Primarily used to trace production history for a given product."
          },
          "skuReference": {
            "maxLength": 128,
            "type": "string",
            "description": "Stock-keeping unit (SKU) reference used to track the movement of product inventory."
          }
        },
        "additionalProperties": false,
        "description": "Defines a Product Entry With Evaluation"
      },
      "ProductEvaluation": {
        "type": "object",
        "properties": {
          "status": {
            "enum": [
              "WithinBudget",
              "ExceedsBudget",
              "Undecided"
            ],
            "type": "string",
            "description": "Stability budget evaluation for the product entry. Indicates if the product is safe for release or not,\r\nbased on recorded temperature data during transit. Worst case aggregation of logger budget evaluations\r\nfor all loggers assigned to the product entry.<table><tr><th nowrap>Value</th><th>Description</th></tr><tr><td nowrap><code>WithinBudget</code></td><td>\n            Stability budget is still remaining.\n            </td></tr><tr><td nowrap><code>ExceedsBudget</code></td><td>\n            Stability budget has been exceeded.\n            </td></tr><tr><td nowrap><code>Undecided</code></td><td>\n            Unable to evaluate stability budget consumption.\n            </td></tr></table>"
          },
          "loggers": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/LoggerWithEvaluation"
            },
            "description": "List of logger stability budget evaluations for all loggers assigned to the product entry."
          }
        },
        "additionalProperties": false,
        "description": "Defines a Product Evaluation"
      },
      "ProductUpdateResponse": {
        "type": "object",
        "properties": {
          "productReference": {
            "type": "string",
            "description": "Customer supplied unique reference value that identifies this product profile."
          },
          "success": {
            "type": "boolean",
            "description": "Was the requested operation successful or not. If set to false please refer to the Message property for description of the error."
          },
          "responseTime": {
            "type": "integer",
            "description": "The time taken in milliseconds for processing of the request.",
            "format": "int64"
          },
          "message": {
            "type": "string",
            "description": "Text description of the ```Success``` return value."
          }
        },
        "additionalProperties": false,
        "description": "Defines a Product Update Response"
      },
      "RearmAlert": {
        "required": [
          "severity"
        ],
        "type": "object",
        "properties": {
          "bounds": {
            "enum": [
              "UpperBounds",
              "LowerBounds",
              "DualBounds"
            ],
            "type": "string",
            "description": "Describes the bounds of the current boundary, i.e.: \"LowerBounds\".<table><tr><th nowrap>Value</th><th>Description</th></tr><tr><td nowrap><code>UpperBounds</code></td><td>\n            The alert will trigger on values exceeding the threshold\n            </td></tr><tr><td nowrap><code>LowerBounds</code></td><td>\n            The alert will trigger on values falling below the threshold\n            </td></tr><tr><td nowrap><code>DualBounds</code></td><td>\n            The alert will trigger on values falling above OR below the threshold\n            </td></tr></table>"
          },
          "rearmDelayUntil": {
            "type": "string",
            "description": "UTC Timestamp of the time at which this boundary should be rearmed and active again."
          },
          "dataType": {
            "enum": [
              "Temperature"
            ],
            "type": "string",
            "description": "The type of sensor data to alert on.\r\n<info>Currently only ```Temperature``` is available.</info><table><tr><th nowrap>Value</th><th>Description</th></tr><tr><td nowrap><code>Temperature</code></td><td>\n            The temperature of the logger in Celsius\n            </td></tr></table>"
          },
          "lowerBoundary": {
            "type": "integer",
            "description": "The value that determines the lower alert threshold.\r\n<note>This value is specified in each ```DataType```'s minor units.\r\nE.g. for temperature data, it should be scaled up by 10 as only a single decimal value is supported for temperatures.\r\n\nSee table below for a complete reference</note><remarks><table>\r\n  <tr>\r\n    <th>DataType</th>\r\n    <th>Minor unit multiplier</th>\r\n    <th>Temperature</th>\r\n    <th>ThresholdValue to use</th>\r\n  </tr>\r\n  <tr>\r\n    <td>\r\n      ```Temperature```\r\n    </td>\r\n    <td>10</td>\r\n    <td>37.5°C</td>\r\n    <td>375</td>\r\n  </tr>\r\n  <tr>\r\n    <td>\r\n      ```Temperature```\r\n    </td>\r\n    <td>10</td>\r\n    <td>-25.3°C</td>\r\n    <td>-253</td>\r\n  </tr>\r\n  <tr>\r\n    <td>\r\n      ```Temperature```\r\n    </td>\r\n    <td>10</td>\r\n    <td>0.3°C</td>\r\n    <td>3</td>\r\n  </tr>\r\n</table></remarks>",
            "format": "int32"
          },
          "upperBoundary": {
            "type": "integer",
            "description": "The value that determines the upper alert threshold.\r\n<note>This value is specified in each ```DataType```'s minor units.\r\nE.g. for temperature data, it should be scaled up by 10 as only a single decimal value is supported for temperatures.\r\n\nSee table below for a complete reference</note><remarks><table>\r\n  <tr>\r\n    <th>DataType</th>\r\n    <th>Minor unit multiplier</th>\r\n    <th>Temperature</th>\r\n    <th>ThresholdValue to use</th>\r\n  </tr>\r\n  <tr>\r\n    <td>\r\n      ```Temperature```\r\n    </td>\r\n    <td>10</td>\r\n    <td>37.5°C</td>\r\n    <td>375</td>\r\n  </tr>\r\n  <tr>\r\n    <td>\r\n      ```Temperature```\r\n    </td>\r\n    <td>10</td>\r\n    <td>-25.3°C</td>\r\n    <td>-253</td>\r\n  </tr>\r\n  <tr>\r\n    <td>\r\n      ```Temperature```\r\n    </td>\r\n    <td>10</td>\r\n    <td>0.3°C</td>\r\n    <td>3</td>\r\n  </tr>\r\n</table></remarks>",
            "format": "int32"
          },
          "accumulativeTimeLimit": {
            "type": "integer",
            "description": "The limit in seconds divisible by 600 seconds (10 minute intervals) that this alert condition is allowed to be violated until it is triggered. If not specified, then a value of 600 will be assumed.<remarks>Example: Specify a value of 600 to delay a logger reporting an alert until the alert has been sustained for longer than 10 minutes</remarks>",
            "format": "int32"
          },
          "severity": {
            "minLength": 1,
            "enum": [
              "NoExcursion",
              "Level1",
              "Level2",
              "Level3"
            ],
            "type": "string",
            "description": "Signals the severity threshold reported when this alert is triggered.<table><tr><th nowrap>Value</th><th>Description</th></tr><tr><td nowrap><code>NoExcursion</code></td><td>\n            No excursion registered when alert is triggered.\n            </td></tr><tr><td nowrap><code>Level1</code></td><td>\n            Alert will raise a Low (Level 1) excursion critically when triggered.\n            </td></tr><tr><td nowrap><code>Level2</code></td><td>\n            Alert will raise a Medium (Level 2) excursion critically when triggered.\n            </td></tr><tr><td nowrap><code>Level3</code></td><td>\n            Alert will raise a High (Level 3) excursion critically when triggered.\n            </td></tr></table>"
          }
        },
        "additionalProperties": false,
        "description": "Defines a RearmAlert which describes the boundary contained in Controlant.Integration.Contracts.EventSubscriptions.Payloads.Shipments.Loggers.EventSubscriptionShipmentLoggerRearmPayload which is to be rearmed."
      },
      "SensorConfiguration": {
        "type": "object",
        "properties": {
          "channel": {
            "type": "integer",
            "description": "The internal channel of the sensor on the logger device.<remarks>The primary sensor on most logger devices is assigned channel '0',\r\nwhen using loggers with an external temperature probe then the channel number will be different.</remarks>",
            "format": "int32"
          },
          "type": {
            "enum": [
              "Temperature"
            ],
            "type": "string",
            "description": "Type of sensor measurement<table><tr><th nowrap>Value</th><th>Description</th></tr><tr><td nowrap><code>Temperature</code></td><td>\n            The temperature of the logger in Celsius\n            </td></tr></table>"
          },
          "alerts": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/ViewOnlyAlert"
            },
            "description": "List of all alert boundaries configured for the given sensor."
          }
        },
        "additionalProperties": false,
        "description": "Defines a Sensor Configuration"
      },
      "SeverityChanged": {
        "type": "object",
        "properties": {
          "severity": {
            "enum": [
              "NoExcursion",
              "Level1",
              "Level2",
              "Level3"
            ],
            "type": "string",
            "description": "The excursion severity level raised.<table><tr><th nowrap>Value</th><th>Description</th></tr><tr><td nowrap><code>NoExcursion</code></td><td>\n            No excursion registered when alert is triggered.\n            </td></tr><tr><td nowrap><code>Level1</code></td><td>\n            Alert will raise a Low (Level 1) excursion critically when triggered.\n            </td></tr><tr><td nowrap><code>Level2</code></td><td>\n            Alert will raise a Medium (Level 2) excursion critically when triggered.\n            </td></tr><tr><td nowrap><code>Level3</code></td><td>\n            Alert will raise a High (Level 3) excursion critically when triggered.\n            </td></tr></table>"
          },
          "temperature": {
            "allOf": [
              {
                "$ref": "#/components/schemas/TemperatureNotification"
              }
            ],
            "description": "The temperature alert condition and measurement value that\r\nserved as the basis to trigger the shipment severity change."
          }
        },
        "additionalProperties": false,
        "description": "Defines a Severity Changed Event Payload"
      },
      "ShipmentAlert": {
        "required": [
          "severity"
        ],
        "type": "object",
        "properties": {
          "dataType": {
            "enum": [
              "Temperature"
            ],
            "type": "string",
            "description": "The type of sensor data to alert on.\r\n<info>Currently only ```Temperature``` is available.</info><table><tr><th nowrap>Value</th><th>Description</th></tr><tr><td nowrap><code>Temperature</code></td><td>\n            The temperature of the logger in Celsius\n            </td></tr></table>"
          },
          "lowerBoundary": {
            "type": "integer",
            "description": "The value that determines the lower alert threshold.\r\n<note>This value is specified in each ```DataType```'s minor units.\r\nE.g. for temperature data, it should be scaled up by 10 as only a single decimal value is supported for temperatures.\r\n\nSee table below for a complete reference</note><remarks><table>\r\n  <tr>\r\n    <th>DataType</th>\r\n    <th>Minor unit multiplier</th>\r\n    <th>Temperature</th>\r\n    <th>ThresholdValue to use</th>\r\n  </tr>\r\n  <tr>\r\n    <td>\r\n      ```Temperature```\r\n    </td>\r\n    <td>10</td>\r\n    <td>37.5°C</td>\r\n    <td>375</td>\r\n  </tr>\r\n  <tr>\r\n    <td>\r\n      ```Temperature```\r\n    </td>\r\n    <td>10</td>\r\n    <td>-25.3°C</td>\r\n    <td>-253</td>\r\n  </tr>\r\n  <tr>\r\n    <td>\r\n      ```Temperature```\r\n    </td>\r\n    <td>10</td>\r\n    <td>0.3°C</td>\r\n    <td>3</td>\r\n  </tr>\r\n</table></remarks>",
            "format": "int32"
          },
          "upperBoundary": {
            "type": "integer",
            "description": "The value that determines the upper alert threshold.\r\n<note>This value is specified in each ```DataType```'s minor units.\r\nE.g. for temperature data, it should be scaled up by 10 as only a single decimal value is supported for temperatures.\r\n\nSee table below for a complete reference</note><remarks><table>\r\n  <tr>\r\n    <th>DataType</th>\r\n    <th>Minor unit multiplier</th>\r\n    <th>Temperature</th>\r\n    <th>ThresholdValue to use</th>\r\n  </tr>\r\n  <tr>\r\n    <td>\r\n      ```Temperature```\r\n    </td>\r\n    <td>10</td>\r\n    <td>37.5°C</td>\r\n    <td>375</td>\r\n  </tr>\r\n  <tr>\r\n    <td>\r\n      ```Temperature```\r\n    </td>\r\n    <td>10</td>\r\n    <td>-25.3°C</td>\r\n    <td>-253</td>\r\n  </tr>\r\n  <tr>\r\n    <td>\r\n      ```Temperature```\r\n    </td>\r\n    <td>10</td>\r\n    <td>0.3°C</td>\r\n    <td>3</td>\r\n  </tr>\r\n</table></remarks>",
            "format": "int32"
          },
          "accumulativeTimeLimit": {
            "type": "integer",
            "description": "The limit in seconds divisible by 600 seconds (10 minute intervals) that this alert condition is allowed to be violated until it is triggered. If not specified, then a value of 600 will be assumed.<remarks>Example: Specify a value of 600 to delay a logger reporting an alert until the alert has been sustained for longer than 10 minutes</remarks>",
            "format": "int32"
          },
          "severity": {
            "minLength": 1,
            "enum": [
              "NoExcursion",
              "Level1",
              "Level2",
              "Level3"
            ],
            "type": "string",
            "description": "Signals the severity threshold reported when this alert is triggered.<table><tr><th nowrap>Value</th><th>Description</th></tr><tr><td nowrap><code>NoExcursion</code></td><td>\n            No excursion registered when alert is triggered.\n            </td></tr><tr><td nowrap><code>Level1</code></td><td>\n            Alert will raise a Low (Level 1) excursion critically when triggered.\n            </td></tr><tr><td nowrap><code>Level2</code></td><td>\n            Alert will raise a Medium (Level 2) excursion critically when triggered.\n            </td></tr><tr><td nowrap><code>Level3</code></td><td>\n            Alert will raise a High (Level 3) excursion critically when triggered.\n            </td></tr></table>"
          }
        },
        "additionalProperties": false,
        "description": "Defines alerts that are used within a shipment."
      },
      "ShipmentAnalysisRequest": {
        "required": [
          "shipmentReference"
        ],
        "type": "object",
        "properties": {
          "shipmentReference": {
            "maxLength": 128,
            "minLength": 1,
            "type": "string",
            "description": "Customer supplied unique reference value that identifies the shipment."
          }
        },
        "additionalProperties": false,
        "description": "Defines a shipment analysis request"
      },
      "ShipmentAnalysisResponse": {
        "type": "object",
        "properties": {
          "shipmentReference": {
            "type": "string",
            "description": "Customer supplied unique reference value that identifies the shipment."
          },
          "shipmentType": {
            "enum": [
              "Regular",
              "NoLoggers"
            ],
            "type": "string",
            "description": "The type of the shipment<table><tr><th nowrap>Value</th><th>Description</th></tr><tr><td nowrap><code>Regular</code></td><td>\n            (Default) Regular shipment with loggers\n            </td></tr><tr><td nowrap><code>NoLoggers</code></td><td>\n            A shipment without IoT loggers\n            </td></tr></table>"
          },
          "loggers": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/ShipmentLoggerAnalysis"
            },
            "description": "Analysis for loggers in the shipment."
          },
          "loggersCount": {
            "type": "integer",
            "description": "The total count of loggers in ```Loggers```.",
            "format": "int32"
          },
          "shipmentAnalysisAvailability": {
            "enum": [
              "NotAvailable",
              "PartlyAvailable",
              "Available"
            ],
            "type": "string",
            "description": "Analysis availability for the shipment.<table><tr><th nowrap>Value</th><th>Description</th></tr><tr><td nowrap><code>NotAvailable</code></td><td>\n            Analysis is NOT available for the shipment.\n            This means no loggers in the shipment have been analysed.\n            </td></tr><tr><td nowrap><code>PartlyAvailable</code></td><td>\n            Analysis is partly available for the shipment.\n            This means some, but not all, of the loggers in the shipment have been analysed.\n            </td></tr><tr><td nowrap><code>Available</code></td><td>\n            Analysis is available for the shipment.\n            This means that all loggers in the shipment have been analysed.\n            </td></tr></table>"
          },
          "success": {
            "type": "boolean",
            "description": "Was the requested operation successful or not. If set to false please refer to the Message property for description of the error."
          },
          "responseTime": {
            "type": "integer",
            "description": "The time taken in milliseconds for processing of the request.",
            "format": "int64"
          },
          "message": {
            "type": "string",
            "description": "Text description of the ```Success``` return value."
          }
        },
        "additionalProperties": false,
        "description": "Defines a shipment analysis response"
      },
      "ShipmentCreateOptions": {
        "type": "object",
        "properties": {
          "draftMode": {
            "enum": [
              "Regular",
              "Editable"
            ],
            "type": "string",
            "description": "Draft mode for the shipment. The default setting is ```Regular```<table><tr><th nowrap>Value</th><th>Description</th></tr><tr><td nowrap><code>Regular</code></td><td>\n            (Default) Regular draft, non-editable, and non updateable. Must be deleted in order to create a new draft with modified data.\n            </td></tr><tr><td nowrap><code>Editable</code></td><td>\n            SCM compatible draft. Can be edited in SCM and via the SCM Api.\n            </td></tr></table>"
          },
          "shipmentType": {
            "enum": [
              "Regular",
              "NoLoggers"
            ],
            "type": "string",
            "description": "The type of the shipment<table><tr><th nowrap>Value</th><th>Description</th></tr><tr><td nowrap><code>Regular</code></td><td>\n            (Default) Regular shipment with loggers\n            </td></tr><tr><td nowrap><code>NoLoggers</code></td><td>\n            A shipment without IoT loggers\n            </td></tr></table>"
          }
        },
        "additionalProperties": false,
        "description": "Create options for creating a new shipment."
      },
      "ShipmentCreateRequest": {
        "required": [
          "destinationReference",
          "originReference",
          "reference"
        ],
        "type": "object",
        "properties": {
          "reference": {
            "maxLength": 128,
            "minLength": 1,
            "type": "string",
            "description": "Customer supplied unique reference value that identifies the shipment."
          },
          "description": {
            "maxLength": 256,
            "type": "string",
            "description": "Optional human readable description of this shipment."
          },
          "shipmentCategory": {
            "maxLength": 20,
            "minLength": 1,
            "type": "string",
            "description": "Optional categorization of the shipment.<remarks>Setting this value will influence shipment dependent processes such as how alert template narrowest calculations are determined.\r\nThis value should not be assigned without consulting with your Controlant account manager.</remarks>"
          },
          "contactTemplateReference": {
            "maxLength": 128,
            "type": "string",
            "description": "Reference id of a contact template that should be applied to this shipment\r\nif not set then excursions occurring in this shipment will not automatically trigger\r\nan SMS or email to notify of alerts."
          },
          "loggerTemplateReference": {
            "maxLength": 128,
            "type": "string",
            "description": "Reference id of a logger configuration template that should be applied to all loggers that are added to this shipment.\r\nThis includes warnings, ignore periods, wakeup intervals etc.\r\nSee: LoggerTemplates<remarks>Note that additional constraints apply when assigning loggers to shipments.</remarks>"
          },
          "alertTemplateReference": {
            "maxItems": 1000,
            "type": "array",
            "items": {
              "maxLength": 128,
              "type": "string"
            },
            "description": "References to existing AlertTemplates that should be assigned to loggers that are added to this shipment.\r\n<note>\r\n    If any loggers are assigned to the shipment, then either this field, or Alerts, is required (but not both)\r\n</note><p>\r\n    Alert templates intended for use in this list must be created via the <b>Create Alert Template</b> endpoint.\r\n    When specifying more than one alert template reference the integration platform will attempt to merge their\r\n    temperature boundaries to create a new range that safely intersects all the alert range configurations.\r\n</p><p>\r\n    Any AlertTemplateReferences assigned to loggers directly in the <code>Loggers</code> list will take precedence\r\n    over template references defined in this list.\r\n</p><remarks><p>\r\n                The name of a warning template defined manually in the SCM web-portal can also be used in this field.\r\n                When using a warning template reference the following special restrictions apply:\r\n                <ol><li>The name of the warning template used must start with the prefix <code>Manual-</code>.</li><li>Only a single entry is allowed in the list.</li><li>Mixing warning templates and alert templates is not supported.</li><li>Automatic merging of temperature boundaries is not possible when using warning templates.</li></ol></p></remarks>"
          },
          "alerts": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/ShipmentAlert"
            },
            "description": "Alerts to assign to loggers associated with this shipment.\r\n<note>\r\n    If any loggers are assigned to the shipment, then either this field, or AlertTemplateReference, is required (but not both)\r\n</note>"
          },
          "originReference": {
            "maxLength": 128,
            "minLength": 1,
            "type": "string",
            "description": "Reference id of the origin location template to apply to this shipment."
          },
          "destinationReference": {
            "maxLength": 128,
            "minLength": 1,
            "type": "string",
            "description": "Reference id of the destination location template to apply to this shipment."
          },
          "createOptions": {
            "allOf": [
              {
                "$ref": "#/components/schemas/ShipmentCreateOptions"
              }
            ],
            "description": "Options to define the creation of a new shipment."
          },
          "loggers": {
            "maxItems": 600,
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/LoggerInShipment"
            },
            "description": "The SCM loggers to include in this shipment. If ```draftMode``` is set to ```Editable``` then they can be added to the shipment after creation.\r\nUntil loggers are added then the shipment status cannot be updated from the initial ```Draft``` state.\r\n<info>A maximum of 600 loggers are allowed per shipment</info><remarks><table>\r\n  <tr>\r\n    <th>Additional constraints when assigning loggers to shipments</th>\r\n  </tr>\r\n  <tr>\r\n    <td>The ```LoggerTemplateReference``` must be specified.</td>\r\n  </tr>\r\n</table></remarks>"
          },
          "properties": {
            "maxItems": 1000,
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/ShipmentCustomProperty"
            },
            "description": "List of customer defined properties that should be assigned to this shipment.<remarks>All custom properties not created in the Controlant system prior to being assigned are automatically created upon first use.</remarks>"
          },
          "products": {
            "maxItems": 1000,
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/ProductEntry"
            },
            "description": "List of the products that should be assigned to this shipment.<remarks>The full product stability profile must first have been created via the ```product/create``` endpoint prior to being able to\r\nassign it to a shipment.</remarks><span class=\"addon-feature\">This is an optional added value feature, please contact your Controlant account manager for further details.</span>"
          },
          "partialProducts": {
            "maxItems": 999,
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/PartialProductEntry"
            },
            "description": "List of products that should be assigned to this shipment but are excluded from real-time stability monitoring.<remarks>Partial products are products or deliveries in a shipment that do not have an associated stability profile\r\nbut customers still want to track their assignment to the shipment.</remarks><span class=\"addon-feature\">This is an optional added value feature, please contact your Controlant account manager for further details.</span>"
          },
          "trackingInformation": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/ShipmentTrackingPair"
            },
            "description": "The tracking information for the shipment"
          }
        },
        "additionalProperties": false,
        "description": "Defines a Shipment"
      },
      "ShipmentCustomProperty": {
        "required": [
          "name"
        ],
        "type": "object",
        "properties": {
          "name": {
            "maxLength": 128,
            "minLength": 1,
            "type": "string",
            "description": "Name of the custom property."
          },
          "value": {
            "maxLength": 1024,
            "type": "string",
            "description": "The value of the custom property."
          }
        },
        "additionalProperties": false,
        "description": "Defines a Shipment Custom Property"
      },
      "ShipmentDeleteRequest": {
        "required": [
          "shipmentReference"
        ],
        "type": "object",
        "properties": {
          "shipmentReference": {
            "maxLength": 128,
            "minLength": 1,
            "type": "string",
            "description": "Customer supplied unique reference value that identifies the shipment."
          }
        },
        "additionalProperties": false,
        "description": "Defines a Shipment Delete"
      },
      "ShipmentDeliveredStatusRequest": {
        "required": [
          "shipmentReference"
        ],
        "type": "object",
        "properties": {
          "timeDelivered": {
            "maxLength": 22,
            "type": "string",
            "description": "Timestamp when the shipment was delivered to its destination (UTC time).<span class=\"input-format\"> <a href=\"https://en.wikipedia.org/wiki/ISO_8601\" target=\"_blank\">Format: ISO 8601 (YYYY-MM-DDThh:mm:ssZ)</a></span>"
          },
          "shipmentReference": {
            "maxLength": 128,
            "minLength": 1,
            "type": "string",
            "description": "Customer supplied unique reference value that identifies the shipment."
          }
        },
        "additionalProperties": false,
        "description": "Defines a Shipment Delivered Status"
      },
      "ShipmentInspectionRequest": {
        "required": [
          "shipmentReference"
        ],
        "type": "object",
        "properties": {
          "shipmentReference": {
            "maxLength": 128,
            "minLength": 1,
            "type": "string",
            "description": "Customer supplied unique reference value that identifies the shipment."
          },
          "inspection": {
            "allOf": [
              {
                "$ref": "#/components/schemas/Inspection"
              }
            ],
            "description": "The inspection related data."
          }
        },
        "additionalProperties": false,
        "description": "Defines a Shipment Inspection Request"
      },
      "ShipmentLinkInfo": {
        "type": "object",
        "properties": {
          "shipmentNumber": {
            "type": "integer",
            "description": "The number of this shipment (in case of multiple shipments being generated for the shipment on the Controlant site).<remarks>Denotes the X value in <i>ShipmentReference X/Y</i> when shipments are split</remarks>",
            "format": "int32"
          },
          "url": {
            "type": "string",
            "description": "A link (URL) to the shipment."
          },
          "linkReference": {
            "type": "string",
            "description": "The reference given to a custom link, as configured in the Controlant platform per custom link.<remarks>This property is only available when <code>Custom</code> links are requested and will <b>only</b> be returned when custom links have been configured, otherwise it will be absent in the response</remarks>"
          }
        },
        "additionalProperties": false,
        "description": "Defines a shipment link"
      },
      "ShipmentLinksRequest": {
        "required": [
          "linkType",
          "shipmentReference"
        ],
        "type": "object",
        "properties": {
          "linkType": {
            "minLength": 1,
            "enum": [
              "Private",
              "Public",
              "Custom"
            ],
            "type": "string",
            "description": "The link type to return from the platform.\r\nThe default behaviour is to return a Private link.<table><tr><th nowrap>Value</th><th>Description</th></tr><tr><td nowrap><code>Private</code></td><td>\n            The private link requires sign in to the SCM platform before accessing the shipment information.\n            The link is dependent on environment, but for the LIVE environment an example for shipment 999 could be\n            https://scm.controlant.com/global/shipments/preparation/999/info</td></tr><tr><td nowrap><code>Public</code></td><td>\n            Returns a public link which gives direct access to the shipment information, without requiring users to sign-in to the SCM platform. Lifespan duration for each link is by default 7 days but can be configured per customer. \n            </td></tr><tr><td nowrap><code>Custom</code></td><td>\n            Returns a public link to a custom view. The use of this option is dependent on custom configuration, please contact your Controlant account manager for further details.\n            The use of custom views for shipment links is an added value feature</td></tr></table>"
          },
          "shipmentReference": {
            "maxLength": 128,
            "minLength": 1,
            "type": "string",
            "description": "Customer supplied unique reference value that identifies the shipment."
          },
          "linkReferenceFilters": {
            "maxItems": 10,
            "type": "array",
            "items": {
              "type": "string"
            },
            "description": "An optional list of link references to filter the response by.\r\n<info>You can only filter requests for ```Custom``` links, and the values given here must match the values in the ```LinkReference``` property in the response to this API call.</info>"
          }
        },
        "additionalProperties": false,
        "description": "Defines a Shipment Links Request"
      },
      "ShipmentLinksResponse": {
        "type": "object",
        "properties": {
          "shipmentReference": {
            "type": "string",
            "description": "Customer supplied unique reference value that identifies the shipment."
          },
          "shipmentLinks": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/ShipmentLinkInfo"
            },
            "description": "A list of one or more links to shipment information."
          },
          "shipmentLinksCount": {
            "type": "integer",
            "description": "The total number of shipment links in ```ShipmentLinks```.",
            "format": "int32"
          },
          "linkType": {
            "enum": [
              "Private",
              "Public",
              "Custom"
            ],
            "type": "string",
            "description": "The type of link provided in the URL property.<table><tr><th nowrap>Value</th><th>Description</th></tr><tr><td nowrap><code>Private</code></td><td>\n            The private link requires sign in to the SCM platform before accessing the shipment information.\n            The link is dependent on environment, but for the LIVE environment an example for shipment 999 could be\n            https://scm.controlant.com/global/shipments/preparation/999/info</td></tr><tr><td nowrap><code>Public</code></td><td>\n            Returns a public link which gives direct access to the shipment information, without requiring users to sign-in to the SCM platform. Lifespan duration for each link is by default 7 days but can be configured per customer. \n            </td></tr><tr><td nowrap><code>Custom</code></td><td>\n            Returns a public link to a custom view. The use of this option is dependent on custom configuration, please contact your Controlant account manager for further details.\n            The use of custom views for shipment links is an added value feature</td></tr></table>"
          },
          "success": {
            "type": "boolean",
            "description": "Was the requested operation successful or not. If set to false please refer to the Message property for description of the error."
          },
          "responseTime": {
            "type": "integer",
            "description": "The time taken in milliseconds for processing of the request.",
            "format": "int64"
          },
          "message": {
            "type": "string",
            "description": "Text description of the ```Success``` return value."
          }
        },
        "additionalProperties": false,
        "description": "Defines a Shipment Links Response"
      },
      "ShipmentLoggerAnalysis": {
        "type": "object",
        "properties": {
          "loggerId": {
            "type": "string",
            "description": "The unique ID of this logger.\r\nThis is the barcode value in <a href=\"https://simple.wikipedia.org/wiki/Hexadecimal\" target=\"_blank\">Hexadecimal format</a>\r\nassigned to this logger from Controlant and is printed on one side of the logger along with the barcode.<remarks>The barcode printed on most Controlant loggers contain a common prefix <code>CMS</code>.\r\nNote that LoggerIds coming from the Controlant Platform will never include the <code>CMS</code> prefix.</remarks>"
          },
          "analysis": {
            "allOf": [
              {
                "$ref": "#/components/schemas/LoggerAnalysis"
              }
            ],
            "description": "Analysis for this logger."
          },
          "analysisAvailability": {
            "enum": [
              "NotAvailable",
              "Available"
            ],
            "type": "string",
            "description": "Is analysis available for this logger?<table><tr><th nowrap>Value</th><th>Description</th></tr><tr><td nowrap><code>NotAvailable</code></td><td>\n            Analysis is NOT available for the logger.\n            </td></tr><tr><td nowrap><code>Available</code></td><td>\n            Analysis is available for the logger.\n            </td></tr></table>"
          },
          "analysisExists": {
            "type": "boolean",
            "description": "This property has been deprecated and is scheduled for removal by year end 2022. Please use ```AnalysisAvailability``` instead.",
            "readOnly": true,
            "deprecated": true
          },
          "excursions": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/AnalysisExcursion"
            },
            "description": "Excursions after analysis for this logger."
          },
          "excursionsCount": {
            "type": "integer",
            "description": "The total count of excursions in ```Excursions```.",
            "format": "int32"
          }
        },
        "additionalProperties": false,
        "description": "Defines logger with AnalysisExcursion"
      },
      "ShipmentProcessingInfo": {
        "type": "object",
        "properties": {
          "processingStatus": {
            "enum": [
              "NotProcessed",
              "BeingProcessed",
              "Processed",
              "Error",
              "ProcessingStoppedTooOld",
              "MissingData"
            ],
            "type": "string",
            "description": "The status of data analysis for the shipment.\r\n<info>Shipment analysis will only start once a shipment has been delivered</info><table><tr><th nowrap>Value</th><th>Description</th></tr><tr><td nowrap><code>NotProcessed</code></td><td>\n            Shipment has not yet been processed\n            </td></tr><tr><td nowrap><code>BeingProcessed</code></td><td>\n            Shipment is being processed\n            </td></tr><tr><td nowrap><code>Processed</code></td><td>\n            Shipment has already been processed\n            </td></tr><tr><td nowrap><code>Error</code></td><td>\n            Error occurred during shipment processing\n            </td></tr><tr><td nowrap><code>ProcessingStoppedTooOld</code></td><td>\n            Processing of shipment stopped due to time limitations on shipment contents\n            </td></tr><tr><td nowrap><code>MissingData</code></td><td>\n            Processing was paused due to missing data, it will be retried later\n            </td></tr></table>"
          }
        },
        "additionalProperties": false,
        "description": "The status of shipment processing"
      },
      "ShipmentProductsUpdateRequest": {
        "required": [
          "shipmentReference"
        ],
        "type": "object",
        "properties": {
          "shipmentReference": {
            "maxLength": 128,
            "minLength": 1,
            "type": "string",
            "description": "Customer supplied unique reference value that identifies the shipment."
          },
          "products": {
            "maxItems": 1000,
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/ProductEntry"
            },
            "description": "List of the products that should be assigned to this shipment.\r\n<warn>Values in this list will <b>overwrite</b> any existing products assigned to this shipment.</warn><remarks>The full product stability profile must first have been created via the ```product/create``` endpoint prior to being able to\r\nassign it to a shipment.</remarks>"
          },
          "partialProducts": {
            "maxItems": 999,
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/PartialProductEntry"
            },
            "description": "List of products that should be assigned to this shipment but are excluded from real-time stability monitoring\r\n<warn>Values in this list will <b>overwrite</b> any existing partial products assigned to this shipment.</warn><remarks>Partial products are products or deliveries in a shipment that do not have an associated stability profile\r\nbut customers still want to track their assignment to the shipment.</remarks>"
          }
        },
        "additionalProperties": false,
        "description": "Defines a Shipment Products Update"
      },
      "ShipmentPropertiesUpdateRequest": {
        "required": [
          "properties",
          "shipmentReference"
        ],
        "type": "object",
        "properties": {
          "shipmentReference": {
            "maxLength": 128,
            "minLength": 1,
            "type": "string",
            "description": "Customer supplied unique reference value that identifies the shipment."
          },
          "updateMode": {
            "enum": [
              "Replace",
              "Add"
            ],
            "type": "string",
            "description": "The type of properties update action to perform.<table><tr><th nowrap>Value</th><th>Description</th></tr><tr><td nowrap><code>Replace</code></td><td>\n            Replaces all properties currently assigned to the shipment with the supplied set of properties.\n            This is the default action if nothing is specified.\n            </td></tr><tr><td nowrap><code>Add</code></td><td>\n            Adds the properties supplied to the shipment.\n            If properties with the same names already exists then their values will be updated.\n            </td></tr></table>"
          },
          "properties": {
            "maxItems": 1000,
            "minItems": 1,
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/ShipmentCustomProperty"
            },
            "description": "List of customer defined properties that should be assigned to this shipment.\r\n<warn>Values in this list will <b>overwrite</b> any existing properties assigned to this shipment.</warn><remarks>All custom properties not created in the Controlant system prior to being assigned are automatically created upon first use.</remarks>"
          }
        },
        "additionalProperties": false,
        "description": "Defines a Shipment Properties Update"
      },
      "ShipmentShippedStatusRequest": {
        "required": [
          "shipmentReference"
        ],
        "type": "object",
        "properties": {
          "timeShipped": {
            "maxLength": 22,
            "type": "string",
            "description": "Timestamp when the shipment was shipped from its origin (UTC time).<span class=\"input-format\"> <a href=\"https://en.wikipedia.org/wiki/ISO_8601\" target=\"_blank\">Format: ISO 8601 (YYYY-MM-DDThh:mm:ssZ)</a></span>"
          },
          "shipmentReference": {
            "maxLength": 128,
            "minLength": 1,
            "type": "string",
            "description": "Customer supplied unique reference value that identifies the shipment."
          }
        },
        "additionalProperties": false,
        "description": "Defines a Shipment Shipped Status"
      },
      "ShipmentStateGeoTraceRequest": {
        "required": [
          "shipmentReference"
        ],
        "type": "object",
        "properties": {
          "serverTimeFrom": {
            "type": "string",
            "description": "Return only geo-coordinates that were sent to the server on or after this time.<span class=\"input-format\"> <a href=\"https://en.wikipedia.org/wiki/ISO_8601\" target=\"_blank\">Format: ISO 8601 (YYYY-MM-DDThh:mm:ssZ)</a></span>"
          },
          "serverTimeTo": {
            "type": "string",
            "description": "Return only geo-coordinates that were sent to the server on or before this time.<span class=\"input-format\"> <a href=\"https://en.wikipedia.org/wiki/ISO_8601\" target=\"_blank\">Format: ISO 8601 (YYYY-MM-DDThh:mm:ssZ)</a></span>"
          },
          "shipmentReference": {
            "maxLength": 128,
            "minLength": 1,
            "type": "string",
            "description": "Customer supplied unique reference value that identifies the shipment."
          }
        },
        "additionalProperties": false,
        "description": "Defines a Shipment State Geo Trace Request"
      },
      "ShipmentStateGeoTraceResponse": {
        "type": "object",
        "properties": {
          "locationTraces": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/LoggerLocationTrace"
            },
            "description": "The geo-coordinates observed by the loggers during the shipment."
          },
          "loggersWithTracesCount": {
            "type": "integer",
            "description": "The total number of loggers with location traces in ```LocationTraces```.",
            "format": "int32"
          },
          "shipmentReference": {
            "type": "string",
            "description": "Customer supplied unique reference value that identifies the shipment."
          },
          "shipmentType": {
            "enum": [
              "Regular",
              "NoLoggers"
            ],
            "type": "string",
            "description": "The type of the shipment<table><tr><th nowrap>Value</th><th>Description</th></tr><tr><td nowrap><code>Regular</code></td><td>\n            (Default) Regular shipment with loggers\n            </td></tr><tr><td nowrap><code>NoLoggers</code></td><td>\n            A shipment without IoT loggers\n            </td></tr></table>"
          },
          "success": {
            "type": "boolean",
            "description": "Was the requested operation successful or not. If set to false please refer to the Message property for description of the error."
          },
          "responseTime": {
            "type": "integer",
            "description": "The time taken in milliseconds for processing of the request.",
            "format": "int64"
          },
          "message": {
            "type": "string",
            "description": "Text description of the ```Success``` return value."
          }
        },
        "additionalProperties": false,
        "description": "Defines a Shipment State Geo Trace Response"
      },
      "ShipmentStateInfoResponse": {
        "type": "object",
        "properties": {
          "description": {
            "type": "string",
            "description": "Optional human readable description of this shipment."
          },
          "originLocation": {
            "allOf": [
              {
                "$ref": "#/components/schemas/LocationInfo"
              }
            ],
            "description": "The origin location of the shipment."
          },
          "destinationLocation": {
            "allOf": [
              {
                "$ref": "#/components/schemas/LocationInfo"
              }
            ],
            "description": "The destination location of the shipment."
          },
          "status": {
            "enum": [
              "Draft",
              "Ready",
              "Shipping",
              "Delivered",
              "Closed",
              "Deleted"
            ],
            "type": "string",
            "description": "The current status of this shipment.<table><tr><th nowrap>Value</th><th>Description</th></tr><tr><td nowrap><code>Draft</code></td><td>\n            Shipment is in a draft state, it cannot be started from this state. Usually indicates that it contains incomplete data or unapproved values\n            </td></tr><tr><td nowrap><code>Ready</code></td><td>\n            Shipment is ready to be sent\n            </td></tr><tr><td nowrap><code>Shipping</code></td><td>\n            Shipment is in the process of being delivered. No changes will be applied to logger data during this status.\n            </td></tr><tr><td nowrap><code>Delivered</code></td><td>\n            Shipment has satisfied the conditions for delivery and is considered delivered.\n            </td></tr><tr><td nowrap><code>Closed</code></td><td>\n            Shipment has been closed\n            </td></tr><tr><td nowrap><code>Deleted</code></td><td>\n            Shipment was deleted from the system and was never sent to shipping status\n            </td></tr></table>"
          },
          "excursionSeverity": {
            "enum": [
              "NoExcursion",
              "Level1",
              "Level2",
              "Level3"
            ],
            "type": "string",
            "description": "The current excursion severity assigned to the shipment.<remarks>This value is calculated as the maximum of the reported\r\nexcursion severities raised by the loggers assigned to this shipment</remarks><table><tr><th nowrap>Value</th><th>Description</th></tr><tr><td nowrap><code>NoExcursion</code></td><td>\n            No excursion registered when alert is triggered.\n            </td></tr><tr><td nowrap><code>Level1</code></td><td>\n            Alert will raise a Low (Level 1) excursion critically when triggered.\n            </td></tr><tr><td nowrap><code>Level2</code></td><td>\n            Alert will raise a Medium (Level 2) excursion critically when triggered.\n            </td></tr><tr><td nowrap><code>Level3</code></td><td>\n            Alert will raise a High (Level 3) excursion critically when triggered.\n            </td></tr></table>"
          },
          "timeStampCreated": {
            "type": "string",
            "description": "Timestamp when the shipment was created.<span class=\"input-format\"> <a href=\"https://en.wikipedia.org/wiki/ISO_8601\" target=\"_blank\">Format: ISO 8601 (YYYY-MM-DDThh:mm:ssZ)</a></span>"
          },
          "timeStampReady": {
            "type": "string",
            "description": "Timestamp when the shipment was set to READY status if applicable.<span class=\"input-format\"> <a href=\"https://en.wikipedia.org/wiki/ISO_8601\" target=\"_blank\">Format: ISO 8601 (YYYY-MM-DDThh:mm:ssZ)</a></span>"
          },
          "timeStampShipped": {
            "type": "string",
            "description": "Timestamp when the shipment was shipped if applicable.<span class=\"input-format\"> <a href=\"https://en.wikipedia.org/wiki/ISO_8601\" target=\"_blank\">Format: ISO 8601 (YYYY-MM-DDThh:mm:ssZ)</a></span>"
          },
          "timeStampDelivered": {
            "type": "string",
            "description": "Timestamp when the shipment was delivered to the destination location if applicable.<span class=\"input-format\"> <a href=\"https://en.wikipedia.org/wiki/ISO_8601\" target=\"_blank\">Format: ISO 8601 (YYYY-MM-DDThh:mm:ssZ)</a></span>"
          },
          "timeStampClosed": {
            "type": "string",
            "description": "Timestamp when the shipment was marked as closed post delivery if applicable.<span class=\"input-format\"> <a href=\"https://en.wikipedia.org/wiki/ISO_8601\" target=\"_blank\">Format: ISO 8601 (YYYY-MM-DDThh:mm:ssZ)</a></span>"
          },
          "properties": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/CustomProperty"
            },
            "description": "List of customer defined properties assigned to this shipment."
          },
          "propertiesCount": {
            "type": "integer",
            "description": "The total number of properties in ```Properties```.",
            "format": "int32"
          },
          "inspection": {
            "allOf": [
              {
                "$ref": "#/components/schemas/InspectionInfo"
              }
            ],
            "description": "Shipment inspection related information."
          },
          "deliveryState": {
            "enum": [
              "Automatic",
              "Manual"
            ],
            "type": "string",
            "description": "Indicates how the shipment status was updated to ```Delivered```.\r\nThis property will not have any actionable data and only set to a default value\r\nuntil the shipment ```Status``` field is updated to ```Delivered```.<table><tr><th nowrap>Value</th><th>Description</th></tr><tr><td nowrap><code>Automatic</code></td><td>\n            The shipment was marked as delivered automatically by the Controlant platform.\n            </td></tr><tr><td nowrap><code>Manual</code></td><td>\n            The shipment was marked delivered via manual intervention.\n            </td></tr></table>"
          },
          "shippedState": {
            "enum": [
              "Automatic",
              "Manual"
            ],
            "type": "string",
            "description": "Indicates how the shipment status was updated to ```Shipped```.\r\nThis property will not have any actionable data and only set to a default value\r\nuntil the shipment ```Status``` field is updated to ```Shipped```.<table><tr><th nowrap>Value</th><th>Description</th></tr><tr><td nowrap><code>Automatic</code></td><td>\n            The shipment was marked as shipped automatically by the Controlant platform.\n            </td></tr><tr><td nowrap><code>Manual</code></td><td>\n            The shipment was marked shipped via manual intervention.\n            </td></tr></table>"
          },
          "processingInfo": {
            "allOf": [
              {
                "$ref": "#/components/schemas/ShipmentProcessingInfo"
              }
            ],
            "description": "Information on the processing status of the shipment."
          },
          "loggerTemplate": {
            "allOf": [
              {
                "$ref": "#/components/schemas/LoggerTemplateInfo"
              }
            ],
            "description": "The logger template values assigned to loggers in this shipment."
          },
          "loggerStates": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/LoggerState"
            },
            "description": "A list containing the individual measurements and states of all loggers assigned to the shipment."
          },
          "loggerStatesCount": {
            "type": "integer",
            "description": "The total number of logger states in ```LoggerStates```.",
            "format": "int32"
          },
          "trackingInformation": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/ShipmentTrackingPairInfo"
            },
            "description": "The tracking information for the shipment"
          },
          "shipmentReference": {
            "type": "string",
            "description": "Customer supplied unique reference value that identifies the shipment."
          },
          "shipmentType": {
            "enum": [
              "Regular",
              "NoLoggers"
            ],
            "type": "string",
            "description": "The type of the shipment<table><tr><th nowrap>Value</th><th>Description</th></tr><tr><td nowrap><code>Regular</code></td><td>\n            (Default) Regular shipment with loggers\n            </td></tr><tr><td nowrap><code>NoLoggers</code></td><td>\n            A shipment without IoT loggers\n            </td></tr></table>"
          },
          "success": {
            "type": "boolean",
            "description": "Was the requested operation successful or not. If set to false please refer to the Message property for description of the error."
          },
          "responseTime": {
            "type": "integer",
            "description": "The time taken in milliseconds for processing of the request.",
            "format": "int64"
          },
          "message": {
            "type": "string",
            "description": "Text description of the ```Success``` return value."
          }
        },
        "additionalProperties": false,
        "description": "Defines a Shipment State Info Response"
      },
      "ShipmentStateProductsRequest": {
        "required": [
          "detailLevel",
          "shipmentReference"
        ],
        "type": "object",
        "properties": {
          "detailLevel": {
            "minLength": 1,
            "enum": [
              "Full",
              "Standard"
            ],
            "type": "string",
            "description": "Controls the detail level that is used to retrieve information about the products assigned to this shipment.<table><tr><th nowrap>Value</th><th>Description</th></tr><tr><td nowrap><code>Full</code></td><td>\n            Retrieve the full product information available.\n            </td></tr><tr><td nowrap><code>Standard</code></td><td>\n            Retrieve the product information available without stability evaluation.\n            </td></tr></table>"
          },
          "shipmentReference": {
            "maxLength": 128,
            "minLength": 1,
            "type": "string",
            "description": "Customer supplied unique reference value that identifies the shipment."
          }
        },
        "additionalProperties": false,
        "description": "Defines a Shipment State Products Request"
      },
      "ShipmentStateProductsResponse": {
        "type": "object",
        "properties": {
          "products": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/ProductEntryWithEvaluation"
            },
            "description": "List of the products assigned to this shipment."
          },
          "productsCount": {
            "type": "integer",
            "description": "The total number of products in ```Products```.",
            "format": "int32"
          },
          "shipmentReference": {
            "type": "string",
            "description": "Customer supplied unique reference value that identifies the shipment."
          },
          "shipmentType": {
            "enum": [
              "Regular",
              "NoLoggers"
            ],
            "type": "string",
            "description": "The type of the shipment<table><tr><th nowrap>Value</th><th>Description</th></tr><tr><td nowrap><code>Regular</code></td><td>\n            (Default) Regular shipment with loggers\n            </td></tr><tr><td nowrap><code>NoLoggers</code></td><td>\n            A shipment without IoT loggers\n            </td></tr></table>"
          },
          "success": {
            "type": "boolean",
            "description": "Was the requested operation successful or not. If set to false please refer to the Message property for description of the error."
          },
          "responseTime": {
            "type": "integer",
            "description": "The time taken in milliseconds for processing of the request.",
            "format": "int64"
          },
          "message": {
            "type": "string",
            "description": "Text description of the ```Success``` return value."
          }
        },
        "additionalProperties": false,
        "description": "Defines a Shipment State Products Response"
      },
      "ShipmentStateRequest": {
        "required": [
          "shipmentReference"
        ],
        "type": "object",
        "properties": {
          "shipmentReference": {
            "maxLength": 128,
            "minLength": 1,
            "type": "string",
            "description": "Customer supplied unique reference value that identifies the shipment."
          }
        },
        "additionalProperties": false,
        "description": "Defines a Shipment State Request"
      },
      "ShipmentStateTemperaturesRequest": {
        "required": [
          "shipmentReference"
        ],
        "type": "object",
        "properties": {
          "serverTimeFrom": {
            "type": "string",
            "description": "Return only measurements that were sent to the server on or after this time.<span class=\"input-format\"> <a href=\"https://en.wikipedia.org/wiki/ISO_8601\" target=\"_blank\">Format: ISO 8601 (YYYY-MM-DDThh:mm:ssZ)</a></span>"
          },
          "serverTimeTo": {
            "type": "string",
            "description": "Return only measurements that were sent to the server on or before this time.<span class=\"input-format\"> <a href=\"https://en.wikipedia.org/wiki/ISO_8601\" target=\"_blank\">Format: ISO 8601 (YYYY-MM-DDThh:mm:ssZ)</a></span>"
          },
          "shipmentReference": {
            "maxLength": 128,
            "minLength": 1,
            "type": "string",
            "description": "Customer supplied unique reference value that identifies the shipment."
          }
        },
        "additionalProperties": false,
        "description": "Defines a Shipment State Temperatures Request"
      },
      "ShipmentStateTemperaturesResponse": {
        "type": "object",
        "properties": {
          "full": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/LoggerTemperatureMeasurement"
            },
            "description": "The sensor measurements observed during the shipment for each individual logger."
          },
          "temperaturesCount": {
            "type": "integer",
            "description": "The total number of temperatures retrieved.",
            "format": "int32"
          },
          "shipmentReference": {
            "type": "string",
            "description": "Customer supplied unique reference value that identifies the shipment."
          },
          "shipmentType": {
            "enum": [
              "Regular",
              "NoLoggers"
            ],
            "type": "string",
            "description": "The type of the shipment<table><tr><th nowrap>Value</th><th>Description</th></tr><tr><td nowrap><code>Regular</code></td><td>\n            (Default) Regular shipment with loggers\n            </td></tr><tr><td nowrap><code>NoLoggers</code></td><td>\n            A shipment without IoT loggers\n            </td></tr></table>"
          },
          "success": {
            "type": "boolean",
            "description": "Was the requested operation successful or not. If set to false please refer to the Message property for description of the error."
          },
          "responseTime": {
            "type": "integer",
            "description": "The time taken in milliseconds for processing of the request.",
            "format": "int64"
          },
          "message": {
            "type": "string",
            "description": "Text description of the ```Success``` return value."
          }
        },
        "additionalProperties": false,
        "description": "Defines a Shipment State Temperatures Response"
      },
      "ShipmentStatusRequest": {
        "required": [
          "shipmentReference"
        ],
        "type": "object",
        "properties": {
          "shipmentReference": {
            "maxLength": 128,
            "minLength": 1,
            "type": "string",
            "description": "Customer supplied unique reference value that identifies the shipment."
          }
        },
        "additionalProperties": false,
        "description": "Defines a Shipment Base Status"
      },
      "ShipmentTrackingPair": {
        "type": "object",
        "properties": {
          "value": {
            "maxLength": 200,
            "type": "string",
            "description": "The value for the tracking type.\r\n<info>\r\nAn empty or null value will remove any previously set value\r\n</info>"
          },
          "type": {
            "enum": [
              "TrackingNumber",
              "BillOfLading",
              "ContainerId",
              "CarrierCode"
            ],
            "type": "string",
            "description": "The type of tracking value<table><tr><th nowrap>Value</th><th>Description</th></tr><tr><td nowrap><code>TrackingNumber</code></td><td>\n            The value is a tracking number\n            </td></tr><tr><td nowrap><code>BillOfLading</code></td><td>\n            The value is a bill of lading\n            </td></tr><tr><td nowrap><code>ContainerId</code></td><td>\n            The value is a container id\n            </td></tr><tr><td nowrap><code>CarrierCode</code></td><td>\n            The value is a carrier code\n            </td></tr></table>"
          }
        },
        "additionalProperties": false,
        "description": "Defines a shipment tracking pair (of type and value)"
      },
      "ShipmentTrackingPairInfo": {
        "type": "object",
        "properties": {
          "value": {
            "type": "string",
            "description": "The value for the tracking type."
          },
          "type": {
            "enum": [
              "TrackingNumber",
              "BillOfLading",
              "ContainerId",
              "CarrierCode"
            ],
            "type": "string",
            "description": "The type of tracking value<table><tr><th nowrap>Value</th><th>Description</th></tr><tr><td nowrap><code>TrackingNumber</code></td><td>\n            The value is a tracking number\n            </td></tr><tr><td nowrap><code>BillOfLading</code></td><td>\n            The value is a bill of lading\n            </td></tr><tr><td nowrap><code>ContainerId</code></td><td>\n            The value is a container id\n            </td></tr><tr><td nowrap><code>CarrierCode</code></td><td>\n            The value is a carrier code\n            </td></tr></table>"
          }
        },
        "additionalProperties": false,
        "description": "Defines a shipment tracking pair (of type and value)"
      },
      "ShipmentTrackingUpdateRequest": {
        "required": [
          "shipmentReference"
        ],
        "type": "object",
        "properties": {
          "shipmentReference": {
            "maxLength": 128,
            "minLength": 1,
            "type": "string",
            "description": "Customer supplied unique reference value that identifies the shipment."
          },
          "trackingInformation": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/ShipmentTrackingPair"
            },
            "description": "The tracking information for the shipment"
          }
        },
        "additionalProperties": false,
        "description": "Defines a Shipment Tracking Update Request"
      },
      "ShipmentUpdateResponse": {
        "type": "object",
        "properties": {
          "shipmentReference": {
            "type": "string",
            "description": "The customer supplied unique reference value of the shipment that was updated."
          },
          "success": {
            "type": "boolean",
            "description": "Was the requested operation successful or not. If set to false please refer to the Message property for description of the error."
          },
          "responseTime": {
            "type": "integer",
            "description": "The time taken in milliseconds for processing of the request.",
            "format": "int64"
          },
          "message": {
            "type": "string",
            "description": "Text description of the ```Success``` return value."
          }
        },
        "additionalProperties": false,
        "description": "Defines a Shipment Update Response"
      },
      "Status": {
        "type": "object",
        "properties": {
          "state": {
            "enum": [
              "AtOrigin",
              "EnRoute",
              "AtDestination"
            ],
            "type": "string",
            "description": "The geographical state of the logger at the time of the event.<table><tr><th nowrap>Value</th><th>Description</th></tr><tr><td nowrap><code>AtOrigin</code></td><td>\n            Event occurred while the logger was registered as being at the origin location.\n            </td></tr><tr><td nowrap><code>EnRoute</code></td><td>\n            Event occurred while the logger was registered as being en-route between the origin and destination locations.\n            </td></tr><tr><td nowrap><code>AtDestination</code></td><td>\n            Event occurred while the logger was registered as being at the destination location.\n            </td></tr></table>"
          }
        },
        "additionalProperties": false,
        "description": "Defines a Status Event Payload"
      },
      "TemperatureAnalysis": {
        "type": "object",
        "properties": {
          "max": {
            "type": "integer",
            "description": "Maximum temperature.\r\n<note>This value is specified in the temperature minor units, meaning that\r\nthe values must be divided by 10 to obtain the actual decimal centigrade value observed by the device.\r\n\nSee table below for an example</note><remarks><table>\r\n  <tr>\r\n    <th>Value</th>\r\n    <th>Temperature</th>\r\n  </tr>\r\n  <tr>\r\n    <td>375</td>\r\n    <td>37.5°C</td>\r\n  </tr>\r\n  <tr>\r\n    <td>-253</td>\r\n    <td>-25.3°C</td>\r\n  </tr>\r\n  <tr>\r\n    <td>3</td>\r\n    <td>0.3°C</td>\r\n  </tr>\r\n</table></remarks>",
            "format": "int32"
          },
          "min": {
            "type": "integer",
            "description": "Minimum temperature.\r\n<note>This value is specified in the temperature minor units, meaning that\r\nthe values must be divided by 10 to obtain the actual decimal centigrade value observed by the device.\r\n\nSee table below for an example</note><remarks><table>\r\n  <tr>\r\n    <th>Value</th>\r\n    <th>Temperature</th>\r\n  </tr>\r\n  <tr>\r\n    <td>375</td>\r\n    <td>37.5°C</td>\r\n  </tr>\r\n  <tr>\r\n    <td>-253</td>\r\n    <td>-25.3°C</td>\r\n  </tr>\r\n  <tr>\r\n    <td>3</td>\r\n    <td>0.3°C</td>\r\n  </tr>\r\n</table></remarks>",
            "format": "int32"
          },
          "mean": {
            "type": "integer",
            "description": "Mean temperature.\r\n<note>This value is specified in the temperature minor units, meaning that\r\nthe values must be divided by 10 to obtain the actual decimal centigrade value observed by the device.\r\n\nSee table below for an example</note><remarks><table>\r\n  <tr>\r\n    <th>Value</th>\r\n    <th>Temperature</th>\r\n  </tr>\r\n  <tr>\r\n    <td>375</td>\r\n    <td>37.5°C</td>\r\n  </tr>\r\n  <tr>\r\n    <td>-253</td>\r\n    <td>-25.3°C</td>\r\n  </tr>\r\n  <tr>\r\n    <td>3</td>\r\n    <td>0.3°C</td>\r\n  </tr>\r\n</table></remarks>",
            "format": "int32"
          },
          "mkt": {
            "type": "integer",
            "description": "Mean kinetic temperature.\r\n<note>This value is specified in the temperature minor units, meaning that\r\nthe values must be divided by 10 to obtain the actual decimal centigrade value observed by the device.\r\n\nSee table below for an example</note><remarks><table>\r\n  <tr>\r\n    <th>Value</th>\r\n    <th>Temperature</th>\r\n  </tr>\r\n  <tr>\r\n    <td>375</td>\r\n    <td>37.5°C</td>\r\n  </tr>\r\n  <tr>\r\n    <td>-253</td>\r\n    <td>-25.3°C</td>\r\n  </tr>\r\n  <tr>\r\n    <td>3</td>\r\n    <td>0.3°C</td>\r\n  </tr>\r\n</table></remarks>",
            "format": "int32"
          }
        },
        "additionalProperties": false,
        "description": "Defines Temperature Analysis."
      },
      "TemperatureMeasurement": {
        "type": "object",
        "properties": {
          "timeStamp": {
            "type": "string",
            "description": "Time when the measurement was taken.<span class=\"input-format\"> <a href=\"https://en.wikipedia.org/wiki/ISO_8601\" target=\"_blank\">Format: ISO 8601 (YYYY-MM-DDThh:mm:ssZ)</a></span>"
          },
          "value": {
            "type": "integer",
            "description": "The temperature value measured in centigrade.\r\n<note>This value is specified in the temperature minor units, meaning that\r\nthe values must be divided by 10 to obtain the actual decimal centigrade value observed by the device.\r\n\nSee table below for an example</note><remarks><table>\r\n  <tr>\r\n    <th>Value</th>\r\n    <th>Temperature</th>\r\n  </tr>\r\n  <tr>\r\n    <td>375</td>\r\n    <td>37.5°C</td>\r\n  </tr>\r\n  <tr>\r\n    <td>-253</td>\r\n    <td>-25.3°C</td>\r\n  </tr>\r\n  <tr>\r\n    <td>3</td>\r\n    <td>0.3°C</td>\r\n  </tr>\r\n</table></remarks>",
            "format": "int32"
          }
        },
        "additionalProperties": false,
        "description": "Defines a Temperature Measurement"
      },
      "TemperatureNotification": {
        "type": "object",
        "properties": {
          "thresholdValue": {
            "type": "integer",
            "description": "The temperature value in centigrade that determined the alert threshold that was triggered.\r\n<note>This value is specified in the temperature minor units, meaning that\r\nthe values must be divided by 10 to obtain the actual decimal centigrade value.\r\n\nSee table below for an example</note><remarks><table>\r\n  <tr>\r\n    <th>Value</th>\r\n    <th>Temperature</th>\r\n  </tr>\r\n  <tr>\r\n    <td>375</td>\r\n    <td>37.5°C</td>\r\n  </tr>\r\n  <tr>\r\n    <td>-253</td>\r\n    <td>-25.3°C</td>\r\n  </tr>\r\n  <tr>\r\n    <td>3</td>\r\n    <td>0.3°C</td>\r\n  </tr>\r\n</table></remarks>",
            "format": "int32"
          },
          "bounds": {
            "enum": [
              "UpperBounds",
              "LowerBounds",
              "DualBounds"
            ],
            "type": "string",
            "description": "The bounds being monitored (lower or upper). This controls how the logger\r\ndetermines if alerts are triggered based on the specified ```ThresholdValue```.<table><tr><th nowrap>Value</th><th>Description</th></tr><tr><td nowrap><code>UpperBounds</code></td><td>\n            The alert will trigger on values exceeding the threshold\n            </td></tr><tr><td nowrap><code>LowerBounds</code></td><td>\n            The alert will trigger on values falling below the threshold\n            </td></tr><tr><td nowrap><code>DualBounds</code></td><td>\n            The alert will trigger on values falling above OR below the threshold\n            </td></tr></table>"
          },
          "value": {
            "type": "integer",
            "description": "The temperature value measured in centigrade by the device.\r\n<note>This value is specified in the temperature minor units, meaning that\r\nthe values must be divided by 10 to obtain the actual decimal centigrade value observed by the device.\r\n\nSee table below for an example</note><remarks><table>\r\n  <tr>\r\n    <th>Value</th>\r\n    <th>Temperature</th>\r\n  </tr>\r\n  <tr>\r\n    <td>375</td>\r\n    <td>37.5°C</td>\r\n  </tr>\r\n  <tr>\r\n    <td>-253</td>\r\n    <td>-25.3°C</td>\r\n  </tr>\r\n  <tr>\r\n    <td>3</td>\r\n    <td>0.3°C</td>\r\n  </tr>\r\n</table></remarks>",
            "format": "int32"
          },
          "thresholdValues": {
            "allOf": [
              {
                "$ref": "#/components/schemas/TemperatureThresholds"
              }
            ],
            "description": "The upper and/or lower threshold values."
          }
        },
        "additionalProperties": false,
        "description": "Defines a Temperature Notification"
      },
      "TemperatureProfile": {
        "required": [
          "ruleGroups"
        ],
        "type": "object",
        "properties": {
          "ruleGroups": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/TemperatureRuleGroup"
            },
            "description": "List of one or more individual mutually exclusive (OR relationship) rule groups to use when determining the temperature stability budget status."
          }
        },
        "additionalProperties": false,
        "description": "Defines a Temperature Profile"
      },
      "TemperatureRule": {
        "required": [
          "duration",
          "type"
        ],
        "type": "object",
        "properties": {
          "type": {
            "minLength": 1,
            "enum": [
              "Upper",
              "Lower",
              "Dual"
            ],
            "type": "string",
            "description": "Controls if the upper and lower boundaries specified here interact with each other or are independent.\r\nWhen using a single boundary then both UpperDuration and LowerDuration values will be consumed when either\r\nupper or lower temperature thresholds are exceeded<table><tr><th nowrap>Value</th><th>Description</th></tr><tr><td nowrap><code>Upper</code></td><td>\n            Upper temperature threshold boundary. Only temperatures exceeding the threshold will consume the stability budget defined.\n            </td></tr><tr><td nowrap><code>Lower</code></td><td>\n            Lower temperature threshold boundary. Only temperatures falling under the threshold will consume the stability budget defined.\n            </td></tr><tr><td nowrap><code>Dual</code></td><td>\n            The stability budget will be consumed when either upper or lower bounds are exceeded.\n            </td></tr></table>"
          },
          "upperThreshold": {
            "maximum": 3000,
            "minimum": -2741,
            "type": "integer",
            "description": "The value that determines the maximum temperature excursion threshold.\r\n<note>This value should be scaled up by 10, see table below for a complete reference</note><remarks><table>\r\n  <tr>\r\n    <th>Temperature</th>\r\n    <th>UpperThreshold Value</th>\r\n  </tr>\r\n  <tr>\r\n    <td>37.5°C</td>\r\n    <td>375</td>\r\n  </tr>\r\n  <tr>\r\n    <td>-25.3°C</td>\r\n    <td>-253</td>\r\n  </tr>\r\n  <tr>\r\n    <td>0.3°C</td>\r\n    <td>3</td>\r\n  </tr>\r\n</table></remarks>",
            "format": "int32"
          },
          "lowerThreshold": {
            "maximum": 3000,
            "minimum": -2741,
            "type": "integer",
            "description": "The value that determines the minimum temperature excursion threshold.\r\n<note>This value should be scaled up by 10, see table below for a complete reference</note><remarks><table>\r\n  <tr>\r\n    <th>Temperature</th>\r\n    <th>LowerThreshold Value</th>\r\n  </tr>\r\n  <tr>\r\n    <td>37.5°C</td>\r\n    <td>375</td>\r\n  </tr>\r\n  <tr>\r\n    <td>-25.3°C</td>\r\n    <td>-253</td>\r\n  </tr>\r\n  <tr>\r\n    <td>0.3°C</td>\r\n    <td>3</td>\r\n  </tr>\r\n</table></remarks>",
            "format": "int32"
          },
          "duration": {
            "minLength": 1,
            "type": "string",
            "allOf": [
              {
                "pattern": "^\\d+(h|m|s)$"
              },
              {
                "pattern": "^\\d+(h|m|s)$"
              },
              {
                "pattern": "^\\d+(h|m|s)$"
              },
              {
                "pattern": "^\\d+(h|m|s)$"
              }
            ],
            "description": "The stability budget duration defined for the specified boundaries.\r\nThis is the maximum amount of time allowed before the product quality is adversely affected.\r\n<info>Values must be specified in the <b>duration formats</b> discussed below.</info>\r\nDuration format supports a human readable representation of a fixed non-fractional non-negative duration. An example of this would be\r\n```10h``` for 10 hours or ```15m``` for 15 minutes. The format corresponds to a digit group followed by a single character duration code.\r\nBelow is a table containing the formats currently supported.\r\n<table><tr><th>Duration type</th><th>Code</th><th>Examples</th></tr><tr><td>Hours</td><td><code>h</code></td><td><code>756h</code> = 756 hours\n<code>15h</code> = 15 hours\n<code>5h</code> = 5 hours\n</td></tr><tr><td>Minutes</td><td><code>m</code></td><td><code>15m</code> = 15 minutes\n<code>5m</code> = 5 minutes\n<code>896m</code> = 896 minutes\n</td></tr><tr><td>Seconds</td><td><code>s</code></td><td><code>3600s</code> = 3600 seconds\n<code>450s</code> = 450 seconds</td></tr></table><warn>Negative durations are <b>not</b> supported.</warn>"
          }
        },
        "additionalProperties": false,
        "description": "Defines a Temperature Rule"
      },
      "TemperatureRuleGroup": {
        "required": [
          "rules"
        ],
        "type": "object",
        "properties": {
          "rules": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/TemperatureRule"
            },
            "description": "List of one or more mutually inclusive (AND relationship) rules that when combined define a single temperature stability profile.\r\nIf one of these rules is violated then the current rule group fails."
          }
        },
        "additionalProperties": false,
        "description": "Defines a Temperature Rule Group"
      },
      "TemperatureThresholds": {
        "type": "object",
        "properties": {
          "upperThreshold": {
            "type": "integer",
            "description": "Upper threshold value.\r\n<note>This value is specified in each ```DataType```'s minor units.\r\nE.g. for temperature data, it should be scaled up by 10 as only a single decimal value is supported for temperature.\r\n\nSee table below for a complete reference</note>",
            "format": "int32"
          },
          "lowerThreshold": {
            "type": "integer",
            "description": "Lower threshold value.\r\n<note>This value is specified in each ```DataType```'s minor units.\r\nE.g. for temperature data, it should be scaled up by 10 as only a single decimal value is supported for temperature.\r\n\nSee table below for a complete reference</note>",
            "format": "int32"
          }
        },
        "additionalProperties": false,
        "description": "Holds the upper and lower thresholds for an alert"
      },
      "TradeItem": {
        "required": [
          "batchNumber",
          "expiryDate",
          "gtin",
          "serialNumber"
        ],
        "type": "object",
        "properties": {
          "batchNumber": {
            "minLength": 1,
            "type": "string",
            "description": "The batch number for the trade item."
          },
          "expiryDate": {
            "minLength": 1,
            "type": "string",
            "allOf": [
              {
                "pattern": "^[0-9]{4}-[0-9]{2}(-[0-9]{2})?$"
              },
              {
                "pattern": "^[0-9]{4}-[0-9]{2}(-[0-9]{2})?$"
              }
            ],
            "description": "The expiry date for the trade item, in ISO-8601 format. E.g. 'YYYY-MM-DD' or 'YYYY-MM'."
          },
          "deviceId": {
            "type": "string",
            "description": "The device ID of the Controlant IoT tracker inserted into this trade item."
          },
          "description": {
            "type": "string",
            "description": "A textual description for the trade item, e.g. 'Ibufen tablets 500mg 100pcs'"
          },
          "dataAttributes": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/DataAttribute"
            },
            "description": "An optional array of data attributes, as defined by GS1 standards, and their corresponding application identifiers."
          },
          "allowedCountries": {
            "type": "array",
            "items": {
              "type": "string"
            },
            "description": "An optional array of countries in which this trade item is allowed.\r\nCountries should be specified using their ISO 3166-1 Alpha-2 code (e.g. IS, US, FR, etc.). This array is optional."
          },
          "gtin": {
            "minLength": 1,
            "type": "string",
            "allOf": [
              {
                "pattern": "^(\\d{8}|\\d{12,14})$"
              },
              {
                "pattern": "^(\\d{8}|\\d{12,14})$"
              }
            ],
            "description": "The GTIN (Global Trade Item Number) for the trade item. GTINs can be 8, 12, 13, or 14 digits in length to accommodate different application and product constraints.\r\nThe GTIN contains a company prefix at the beginning and a control digit at the end, both of which should be included.\r\n<info>See <a href=\"https://www.gs1.org/standards/id-keys/gtin\" target=\"_blank\">https://www.gs1.org/standards/id-keys/gtin</a> for more information</info>"
          },
          "serialNumber": {
            "minLength": 1,
            "type": "string",
            "description": "The serial number for the trade item."
          }
        },
        "additionalProperties": false,
        "description": "Defines a trade item"
      },
      "TradeItemBase": {
        "required": [
          "gtin",
          "serialNumber"
        ],
        "type": "object",
        "properties": {
          "gtin": {
            "minLength": 1,
            "type": "string",
            "allOf": [
              {
                "pattern": "^(\\d{8}|\\d{12,14})$"
              },
              {
                "pattern": "^(\\d{8}|\\d{12,14})$"
              }
            ],
            "description": "The GTIN (Global Trade Item Number) for the trade item. GTINs can be 8, 12, 13, or 14 digits in length to accommodate different application and product constraints.\r\nThe GTIN contains a company prefix at the beginning and a control digit at the end, both of which should be included.\r\n<info>See <a href=\"https://www.gs1.org/standards/id-keys/gtin\" target=\"_blank\">https://www.gs1.org/standards/id-keys/gtin</a> for more information</info>"
          },
          "serialNumber": {
            "minLength": 1,
            "type": "string",
            "description": "The serial number for the trade item."
          }
        },
        "additionalProperties": false,
        "description": "Defines a trade item base"
      },
      "TradeItemWithState": {
        "required": [
          "batchNumber",
          "expiryDate",
          "gtin",
          "serialNumber"
        ],
        "type": "object",
        "properties": {
          "createdTime": {
            "type": "string",
            "description": "The time at which this trade item was created. The time is represented in standard ISO-8601 datetime format in the UTC timezone (Z), e.g. '2020-01-01T00:00:00Z'"
          },
          "disabled": {
            "type": "boolean",
            "description": "Whether this trade item has been disabled, either manually via an API call or automatically, e.g. when the device is used for a different trade item"
          },
          "disabledTime": {
            "type": "string",
            "description": "The time at which this trade item was disabled. The time is represented in standard ISO-8601 datetime format in the UTC timezone (Z), e.g. '2020-01-01T00:00:00Z'"
          },
          "currentState": {
            "enum": [
              "Pending",
              "Active",
              "Expired",
              "Used"
            ],
            "type": "string",
            "description": "Describes the current state of the trade item<table><tr><th nowrap>Value</th><th>Description</th></tr><tr><td nowrap><code>Pending</code></td><td>\n            The pairing has been created but the device has not been activated.\n            </td></tr><tr><td nowrap><code>Active</code></td><td>\n            The device has been activated and has begun tracking and reporting data.\n            </td></tr><tr><td nowrap><code>Expired</code></td><td>\n            The device/pairing has passed its expiryDate. Tracking and reporting data is suspended.\n            </td></tr><tr><td nowrap><code>Used</code></td><td>\n            The device has detected a point-of-use event. Tracking and reporting data is suspended.\n            </td></tr></table>"
          },
          "lastKnownLocationTime": {
            "type": "string",
            "description": "The last known location time represents the time at which last location was reported. The time is represented in standard ISO-8601 datetime format in the UTC timezone (Z), e.g. '2020-01-01T00:00:00Z'"
          },
          "lastKnownLocationSource": {
            "enum": [
              "IoTPing",
              "Scan"
            ],
            "type": "string",
            "description": "The source of the location information<table><tr><th nowrap>Value</th><th>Description</th></tr><tr><td nowrap><code>IoTPing</code></td><td>\n            Location reported from an IoT device\n            </td></tr><tr><td nowrap><code>Scan</code></td><td>\n            Location reported from QR code scan\n            </td></tr></table>"
          },
          "unitLocation": {
            "allOf": [
              {
                "$ref": "#/components/schemas/UnitLocation"
              }
            ],
            "description": "The last known location contains information about the location of the device."
          },
          "batchNumber": {
            "minLength": 1,
            "type": "string",
            "description": "The batch number for the trade item."
          },
          "expiryDate": {
            "minLength": 1,
            "pattern": "^[0-9]{4}-[0-9]{2}(-[0-9]{2})?$",
            "type": "string",
            "description": "The expiry date for the trade item, in ISO-8601 format. E.g. 'YYYY-MM-DD' or 'YYYY-MM'."
          },
          "deviceId": {
            "type": "string",
            "description": "The device ID of the Controlant IoT tracker inserted into this trade item."
          },
          "description": {
            "type": "string",
            "description": "A textual description for the trade item, e.g. 'Ibufen tablets 500mg 100pcs'"
          },
          "dataAttributes": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/DataAttribute"
            },
            "description": "An optional array of data attributes, as defined by GS1 standards, and their corresponding application identifiers."
          },
          "allowedCountries": {
            "type": "array",
            "items": {
              "type": "string"
            },
            "description": "An optional array of countries in which this trade item is allowed.\r\nCountries should be specified using their ISO 3166-1 Alpha-2 code (e.g. IS, US, FR, etc.). This array is optional."
          },
          "gtin": {
            "minLength": 1,
            "pattern": "^(\\d{8}|\\d{12,14})$",
            "type": "string",
            "description": "The GTIN (Global Trade Item Number) for the trade item. GTINs can be 8, 12, 13, or 14 digits in length to accommodate different application and product constraints.\r\nThe GTIN contains a company prefix at the beginning and a control digit at the end, both of which should be included.\r\n<info>See <a href=\"https://www.gs1.org/standards/id-keys/gtin\" target=\"_blank\">https://www.gs1.org/standards/id-keys/gtin</a> for more information</info>"
          },
          "serialNumber": {
            "minLength": 1,
            "type": "string",
            "description": "The serial number for the trade item."
          }
        },
        "additionalProperties": false,
        "description": "Defines a trade item with state"
      },
      "TransportCondition": {
        "type": "object",
        "properties": {
          "lowerTemperatureThreshold": {
            "type": "integer",
            "description": "The value that determines the minimum temperature threshold allowed for transport.\r\n<note>This value should be scaled up by 10, see table below for a complete reference</note><remarks><table>\r\n  <tr>\r\n    <th>Temperature</th>\r\n    <th>LowerThreshold Value</th>\r\n  </tr>\r\n  <tr>\r\n    <td>37.5°C</td>\r\n    <td>375</td>\r\n  </tr>\r\n  <tr>\r\n    <td>-25.3°C</td>\r\n    <td>-253</td>\r\n  </tr>\r\n  <tr>\r\n    <td>0.3°C</td>\r\n    <td>3</td>\r\n  </tr>\r\n</table></remarks>",
            "format": "int32"
          },
          "upperTemperatureThreshold": {
            "type": "integer",
            "description": "The value that determines the maximum temperature threshold allowed for transport.\r\n<note>This value should be scaled up by 10, see table below for a complete reference</note><remarks><table>\r\n  <tr>\r\n    <th>Temperature</th>\r\n    <th>UpperThreshold Value</th>\r\n  </tr>\r\n  <tr>\r\n    <td>37.5°C</td>\r\n    <td>375</td>\r\n  </tr>\r\n  <tr>\r\n    <td>-25.3°C</td>\r\n    <td>-253</td>\r\n  </tr>\r\n  <tr>\r\n    <td>0.3°C</td>\r\n    <td>3</td>\r\n  </tr>\r\n</table></remarks>",
            "format": "int32"
          }
        },
        "additionalProperties": false,
        "description": "Defines a Transport Condition"
      },
      "UnitLocation": {
        "type": "object",
        "properties": {
          "description": {
            "type": "string",
            "description": "The last known location time represents the time at which last location was reported. The time is represented in standard ISO-8601 datetime format in the UTC timezone (Z), e.g. '2020-01-01T00:00:00Z'"
          },
          "coordinate": {
            "allOf": [
              {
                "$ref": "#/components/schemas/Coordinate"
              }
            ],
            "description": "The geo-coordinate of the unit"
          },
          "physical": {
            "allOf": [
              {
                "$ref": "#/components/schemas/PhysicalLocation"
              }
            ],
            "description": "The physical location of the unit."
          }
        },
        "additionalProperties": false,
        "description": "Defines a location of a unit"
      },
      "ViewOnlyAlert": {
        "type": "object",
        "properties": {
          "dataType": {
            "enum": [
              "Temperature"
            ],
            "type": "string",
            "description": "The type of sensor data to alert on.\r\n<info>Currently only ```Temperature``` is available.</info><table><tr><th nowrap>Value</th><th>Description</th></tr><tr><td nowrap><code>Temperature</code></td><td>\n            The temperature of the logger in Celsius\n            </td></tr></table>"
          },
          "bounds": {
            "enum": [
              "UpperBounds",
              "LowerBounds",
              "DualBounds"
            ],
            "type": "string",
            "description": "Which bounds are being monitored (lower or upper). This controls how the logger\r\ndetermines if alerts are triggered based on the specified ```ThresholdValue```.<table><tr><th nowrap>Value</th><th>Description</th></tr><tr><td nowrap><code>UpperBounds</code></td><td>\n            The alert will trigger on values exceeding the threshold\n            </td></tr><tr><td nowrap><code>LowerBounds</code></td><td>\n            The alert will trigger on values falling below the threshold\n            </td></tr><tr><td nowrap><code>DualBounds</code></td><td>\n            The alert will trigger on values falling above OR below the threshold\n            </td></tr></table>"
          },
          "thresholdValue": {
            "type": "integer",
            "description": "The value that determines the alert threshold.\r\n<note>This value is specified in each ```DataType```'s minor units.\r\nE.g. for temperature data, it should be scaled up by 10 as only a single decimal value is supported for temperature.\r\n\nSee table below for a complete reference</note><remarks><table>\r\n  <tr>\r\n    <th>DataType</th>\r\n    <th>Minor unit multiplier</th>\r\n    <th>Temperature</th>\r\n    <th>ThresholdValue to use</th>\r\n  </tr>\r\n  <tr>\r\n    <td>\r\n      ```Temperature```\r\n    </td>\r\n    <td>10</td>\r\n    <td>37.5°C</td>\r\n    <td>375</td>\r\n  </tr>\r\n  <tr>\r\n    <td>\r\n      ```Temperature```\r\n    </td>\r\n    <td>10</td>\r\n    <td>-25.3°C</td>\r\n    <td>-253</td>\r\n  </tr>\r\n  <tr>\r\n    <td>\r\n      ```Temperature```\r\n    </td>\r\n    <td>10</td>\r\n    <td>0.3°C</td>\r\n    <td>3</td>\r\n  </tr>\r\n</table></remarks>",
            "format": "int32"
          },
          "thresholdValues": {
            "allOf": [
              {
                "$ref": "#/components/schemas/TemperatureThresholds"
              }
            ],
            "description": "The upper and/or lower threshold value for alerts."
          },
          "accumulativeTimeLimit": {
            "type": "integer",
            "description": "The limit in seconds that this alert condition is allowed to be violated until it is triggered.<remarks>Example: Specify a value of 1200 to delay a logger reporting an alert until the alert has been sustained for longer than 2 minutes</remarks>",
            "format": "int32"
          },
          "severity": {
            "enum": [
              "NoExcursion",
              "Level1",
              "Level2",
              "Level3"
            ],
            "type": "string",
            "description": "Signals the severity threshold reported when this alert is triggered.<table><tr><th nowrap>Value</th><th>Description</th></tr><tr><td nowrap><code>NoExcursion</code></td><td>\n            No excursion registered when alert is triggered.\n            </td></tr><tr><td nowrap><code>Level1</code></td><td>\n            Alert will raise a Low (Level 1) excursion critically when triggered.\n            </td></tr><tr><td nowrap><code>Level2</code></td><td>\n            Alert will raise a Medium (Level 2) excursion critically when triggered.\n            </td></tr><tr><td nowrap><code>Level3</code></td><td>\n            Alert will raise a High (Level 3) excursion critically when triggered.\n            </td></tr></table>"
          }
        },
        "additionalProperties": false,
        "description": "Defines an Alert"
      }
    },
    "securitySchemes": {
      "ApiKey": {
        "type": "apiKey",
        "description": "APIKey authorization code. Must be on the form <code>ApiKey YOUR_API_KEY</code>",
        "name": "Authorization",
        "in": "header"
      }
    }
  },
  "security": [
    {
      "ApiKey": [ ]
    }
  ],
  "tags": [
    {
      "name": "Shipments",
      "description": "Provides endpoints for working with shipments and shipment inspections"
    },
    {
      "name": "Shipments » Reports",
      "description": "Provides endpoints for accessing shipment reports"
    },
    {
      "name": "Shipments » State",
      "description": "Provides endpoints for retrieving shipment state"
    },
    {
      "name": "Shipments » Status",
      "description": "Provides endpoints for modifying shipment status"
    },
    {
      "name": "Templates",
      "description": "Provides endpoints for creating and deleting templates"
    },
    {
      "name": "Events",
      "description": "Subscriptions are a real-time event system that can send events (via <a href=\"https://en.wikipedia.org/wiki/Webhook\" target=\"_blank\">webhooks</a>) to customer systems as they occur in the Controlant platform.\r\n<p>\r\n    Event subscriptions refer to a combination of elements that collectively create a notification and reaction system within a larger integration using custom callbacks.\r\n    These event subscriptions and their subscribers are maintained and managed by our customers and not directly by Controlant.\r\n</p><p>\r\n    Event subscriptions are like a customer phone number that Controlant calls to notify a customer of activity in their Controlant account.\r\n    The activity could be the creation of a new shipment, a delivery of a shipment or the generation of a report.\r\n</p>"
    },
    {
      "name": "Locations",
      "description": "Provides endpoints to create or delete locations for either origin or destination of shipments"
    },
    {
      "name": "Products",
      "description": "Provides endpoints to add products to the system"
    },
    {
      "name": "Loggers",
      "description": "Define a api controller for loggers."
    },
    {
      "name": "Trade Items",
      "description": "Provides endpoints for working with trade items"
    },
    {
      "name": "Test » Echo",
      "description": "Provides an endpoint to test connectivity to the Controlant Integration API"
    }
  ]
}