{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "$id": "https://raw.githubusercontent.com/api-evangelist/evergreen-marine/main/json-schema/evergreen-marine-transport-document-schema.json",
  "title": "Transport Document",
  "description": "The document that governs the terms of carriage between shipper and carrier for maritime transportation. Two distinct types of transport documents exist:\n- Bill of Lading\n- Sea Waybill. \n",
  "x-generated": "2026-10-18",
  "x-method": "derived",
  "x-generator": "derive-json-schema.py",
  "x-source": "openapi/evergreen-marine-transport-document-openapi.yml#/components/schemas/TransportDocument",
  "type": "object",
  "properties": {
    "transportDocumentReference": {
      "type": "string",
      "pattern": "^\\S(?:.*\\S)?$",
      "maxLength": 20,
      "description": "A unique number allocated by the shipping line to the transport document and the main number used for the tracking of the status of the shipment.\n"
    },
    "transportDocumentSubReference": {
      "type": "string",
      "pattern": "^\\S(?:.*\\S)?$",
      "maxLength": 100,
      "description": "Additional reference that can be optionally used alongside the `transportDocumentReference` in order to distinguish between versions of the same `Transport Document`.\n"
    },
    "shippingInstructionsReference": {
      "type": "string",
      "pattern": "^\\S(?:.*\\S)?$",
      "maxLength": 100,
      "description": "The identifier for a `Shipping Instructions` provided by the carrier for system purposes.\n"
    },
    "transportDocumentStatus": {
      "type": "string",
      "maxLength": 50,
      "description": "The status of the `Transport Document`. Possible values are:\n- DRAFT\n- APPROVED\n- ISSUED\n- PENDING_SURRENDER_FOR_AMENDMENT\n- SURRENDERED_FOR_AMENDMENT\n- PENDING_SURRENDER_FOR_DELIVERY\n- SURRENDERED_FOR_DELIVERY\n- VOIDED\n"
    },
    "transportDocumentTypeCode": {
      "type": "string",
      "description": "Specifies the type of the transport document\n- `BOL` (Bill of Lading)\n- `SWB` (Sea Waybill)\n",
      "enum": [
        "BOL",
        "SWB"
      ]
    },
    "isShippedOnBoardType": {
      "type": "boolean",
      "description": "Specifies whether the Transport Document is a received for shipment, or shipped on board.\n"
    },
    "freightPaymentTermCode": {
      "type": "string",
      "description": "An indicator of whether freight and ancillary fees for the main transport are prepaid (`PRE`) or collect (`COL`). When prepaid the charges are the responsibility of the shipper or the Invoice payer on behalf of the shipper (if provided). When collect, the charges are the responsibility of the consignee or the Invoice payer on behalf of the consignee (if provided).\n\n- `PRE` (Prepaid)\n- `COL` (Collect)\n",
      "enum": [
        "PRE",
        "COL"
      ]
    },
    "isElectronic": {
      "type": "boolean",
      "description": "An indicator whether the transport document is electronically transferred.\n"
    },
    "isToOrder": {
      "type": "boolean",
      "description": "Indicates whether the B/L is issued `to order` or not. If `true`, the B/L is considered negotiable and an Endorsee party can be defined in the Document parties. If no Endorsee is defined, the B/L is blank endorsed. If `false`, the B/L is considered non-negotiable (also referred to as `straight`).\n\n`isToOrder` must be `false` if `transportDocumentTypeCode='SWB'` (Sea Waybill).\n"
    },
    "numberOfCopiesWithCharges": {
      "type": "integer",
      "format": "int32",
      "minimum": 0,
      "description": "The requested number of copies of the `Transport Document` to be issued by the carrier including charges.\n\n**Conditions:** The following table defines the conditions for the `numberOfCopiesWithCharges` property:\n| Transport Document Type Code | Is Electronic | Meaning |\n|-------|:-------:|-------|\n|`BOL`|`false`|How many paper copies of the Original BL to be issued by the carrier with charges|\n|`BOL`|`true`|Not applicable, there are no copies|\n|`SWB`|`false`|Indicates that charges should be included in the `SWB` (pdf or other formats)|\n|`SWB`|`true`|Indicates that charges should be included in the electronic `SWB`|\n"
    },
    "numberOfCopiesWithoutCharges": {
      "type": "integer",
      "format": "int32",
      "minimum": 0,
      "description": "The requested number of copies of the `Transport Document` to be issued by the carrier **NOT** including charges.\n\n**Conditions:** The following table defines the conditions for the `numberOfCopiesWithoutCharges` property:\n| Transport Document Type Code | Is Electronic | Meaning |\n|-------|:-------:|-------|\n|`BOL`|`false`|How many paper copies of the Original BL to be issued by the carrier without charges|\n|`BOL`|`true`|Not applicable, there are no copies|\n|`SWB`|`false`|Indicates that charges should NOT be included in the `SWB` (pdf or other formats)|\n|`SWB`|`true`|Indicates that charges NOT should be included in the electronic `SWB`|\n"
    },
    "numberOfOriginalsWithCharges": {
      "type": "integer",
      "format": "int32",
      "minimum": 0,
      "description": "Number of originals of the Bill of Lading that has been requested by the customer with charges.\n        \n**Condition:** Only applicable if `transportDocumentType` = `BOL` (Bill of Lading). If `isElectronic = 'True'`, accepted value is `1` (one) or `0` (zero)\n"
    },
    "numberOfOriginalsWithoutCharges": {
      "type": "integer",
      "format": "int32",
      "minimum": 0,
      "description": "Number of originals of the Bill of Lading that has been requested by the customer without charges.\n        \n**Condition:** Only applicable if `transportDocumentType` = `BOL` (Bill of Lading). If `isElectronic = 'True'`, accepted value is `1` (one) or `0` (zero)\n"
    },
    "displayedNameForPlaceOfReceipt": {
      "description": "The name to be used in order to specify how the `Place of Receipt` should be displayed on the `Transport Document` to match the name and/or address provided on the `Letter of Credit`.\n\n**Condition:** The order of the items in this array **MUST** be preserved as by the provider of the API.\n",
      "type": "array",
      "maxItems": 5,
      "items": {
        "type": "string",
        "maxLength": 35,
        "description": "A line of the address to be displayed on the transport document.\n"
      }
    },
    "displayedNameForPortOfLoad": {
      "description": "The name to be used in order to specify how the `Port of Load` should be displayed on the `Transport Document` to match the name and/or address provided on the `Letter of Credit`.\n\n**Condition:** The order of the items in this array **MUST** be preserved as by the provider of the API.\n",
      "type": "array",
      "maxItems": 5,
      "items": {
        "type": "string",
        "maxLength": 35,
        "description": "A line of the address to be displayed on the transport document.\n"
      }
    },
    "displayedNameForPortOfDischarge": {
      "description": "The name to be used in order to specify how the `Port of Discharge` should be displayed on the `Transport Document` to match the name and/or address provided on the `Letter of Credit`.\n\n**Condition:** The order of the items in this array **MUST** be preserved as by the provider of the API.\n",
      "type": "array",
      "maxItems": 5,
      "items": {
        "type": "string",
        "maxLength": 35,
        "description": "A line of the address to be displayed on the transport document.\n"
      }
    },
    "displayedNameForPlaceOfDelivery": {
      "description": "The name to be used in order to specify how the `Place of Delivery` should be displayed on the `Transport Document` to match the name and/or address provided on the `Letter of Credit`.\n\n**Condition:** The order of the items in this array **MUST** be preserved as by the provider of the API.\n",
      "type": "array",
      "maxItems": 5,
      "items": {
        "type": "string",
        "maxLength": 35,
        "description": "A line of the address to be displayed on the transport document.\n"
      }
    },
    "shippedOnBoardDate": {
      "type": "string",
      "format": "date",
      "description": "Date when the last container that is linked to the transport document is physically loaded onboard the vessel indicated on the transport document.\n\nWhen provided on a transport document, the transportDocument is a `Shipped On Board` B/L.\n\nExactly one of `shippedOnBoard` and `receiveForShipmentDate` must be provided on an issued B/L.\n"
    },
    "displayedShippedOnBoardReceivedForShipment": {
      "type": "string",
      "pattern": "^\\S(?:.*\\S)?$",
      "maxLength": 250,
      "description": "The text to be displayed on the `Transport Document` as evidence that the goods have been received for shipment or shipped on board.\n"
    },
    "termsAndConditions": {
      "type": "string",
      "maxLength": 50000,
      "description": "Carrier terms and conditions of transport.\n"
    },
    "receiptTypeAtOrigin": {
      "type": "string",
      "maxLength": 3,
      "description": "Indicates the type of service offered at `Origin`. The options are:\n- `CY` (Container yard (incl. rail ramp))\n- `SD` (Store Door)\n- `CFS` (Container Freight Station)\n",
      "enum": [
        "CY",
        "SD",
        "CFS"
      ]
    },
    "deliveryTypeAtDestination": {
      "type": "string",
      "maxLength": 3,
      "description": "Indicates the type of service offered at `Destination`. The options are:\n\n- `CY` (Container yard (incl. rail ramp))\n- `SD` (Store Door)\n- `CFS` (Container Freight Station)\n",
      "enum": [
        "CY",
        "SD",
        "CFS"
      ]
    },
    "cargoMovementTypeAtOrigin": {
      "type": "string",
      "maxLength": 3,
      "description": "Refers to the shipment term at the **loading** of the cargo into the container. Possible values are:\n\n- `FCL` (Full Container Load)\n- `LCL` (Less than Container Load)\n"
    },
    "cargoMovementTypeAtDestination": {
      "type": "string",
      "maxLength": 3,
      "description": "Refers to the shipment term at the **unloading** of the cargo out of the container. Possible values are:\n\n- `FCL` (Full Container Load)\n- `LCL` (Less than Container Load)\n"
    },
    "issueDate": {
      "type": "string",
      "format": "date",
      "description": "Local date when the transport document has been issued.\n\nCan be omitted on draft transport documents, but must be provided when the document has been issued.\n"
    },
    "receivedForShipmentDate": {
      "type": "string",
      "format": "date",
      "description": "Date when the last container linked to the transport document is physically in the terminal (customers cleared against the intended vessel).\n\nWhen provided on a transport document, the transportDocument is a `Received For Shipment` B/L.\n\nExactly one of `shippedOnBoard` and `receiveForShipmentDate` must be provided on an issued B/L.\n"
    },
    "serviceContractReference": {
      "type": "string",
      "maxLength": 30,
      "description": "Reference number for agreement between shipper and carrier, which optionally includes a certain minimum quantity commitment (usually referred as “MQC”) of cargo that the shipper commits to over a fixed period, and the carrier commits to a certain rate or rate schedule.\n"
    },
    "contractQuotationReference": {
      "type": "string",
      "pattern": "^\\S(?:.*\\S)?$",
      "maxLength": 35,
      "description": "Information provided by the shipper to identify whether pricing for the shipment has been agreed via a contract or a quotation reference.\n"
    },
    "declaredValue": {
      "type": "number",
      "format": "float",
      "minimum": 0,
      "description": "The value of the cargo that the shipper declares in order to avoid the carrier's limitation of liability and \"Ad Valorem\" freight, i.e., freight which is calculated based on the value of the goods declared by the shipper.\n\n**Condition:** Included in the transport document upon customer request. If customers want the value to show, evidence is required, and customers need to approve additional insurance fee charge from the carrier (very exceptional).\n"
    },
    "declaredValueCurrency": {
      "type": "string",
      "pattern": "^[A-Z]{3}$",
      "minLength": 3,
      "maxLength": 3,
      "description": "The currency used for the declared value, using the 3-character code defined by [ISO 4217](https://www.iso.org/iso-4217-currency-codes.html).\n\n**Condition:** Mandatory if `declaredValue` is provided. If `declaredValue` is not provided, this field must be empty.\n"
    },
    "carrierCode": {
      "type": "string",
      "pattern": "^\\S+$",
      "maxLength": 4,
      "description": "The `SCAC` code (provided by [NMFTA](https://nmfta.org/scac/)) or `SMDG` code (provided by [SMDG](https://smdg.org/documents/smdg-code-lists/smdg-liner-code-list/)) of the issuing carrier of the `Transport Document`. `carrierCodeListProvider` defines which list the `carrierCode` is based upon.\n"
    },
    "carrierCodeListProvider": {
      "type": "string",
      "description": "The code list provider for the `carrierCode`. Possible values are:\n- `SMDG` (Ship Message Design Group)\n- `NMFTA` (National Motor Freight Traffic Association)\n",
      "enum": [
        "SMDG",
        "NMFTA"
      ]
    },
    "carrierClauses": {
      "type": "array",
      "description": "Additional clauses for a specific shipment added by the carrier to the Bill of Lading, subject to local rules / guidelines or certain mandatory information required to be shared with the customer.\n",
      "items": {
        "type": "string",
        "pattern": "^\\S(?:.*\\S)?$",
        "maxLength": 20000,
        "description": "The content of the clause.\n"
      }
    },
    "numberOfRiderPages": {
      "type": "integer",
      "format": "int32",
      "minimum": 0,
      "description": "The number of additional pages required to contain the goods description on a transport document. Only applicable for physical transport documents.\n"
    },
    "transports": {
      "$ref": "#/$defs/Transports"
    },
    "charges": {
      "type": "array",
      "description": "A list of `Charges`\n",
      "items": {
        "$ref": "#/$defs/Charge"
      }
    },
    "placeOfIssue": {
      "$ref": "#/$defs/PlaceOfIssue"
    },
    "invoicePayableAt": {
      "$ref": "#/$defs/InvoicePayableAt"
    },
    "partyContactDetails": {
      "type": "array",
      "minItems": 1,
      "description": "The contact details of the person(s) to contact in relation to the **Transport Document** (changes, notifications etc.) \n",
      "items": {
        "$ref": "#/$defs/PartyContactDetail"
      }
    },
    "documentParties": {
      "$ref": "#/$defs/DocumentParties"
    },
    "consignmentItems": {
      "type": "array",
      "minItems": 1,
      "description": "A list of `ConsignmentItems`\n",
      "items": {
        "$ref": "#/$defs/ConsignmentItem"
      }
    },
    "utilizedTransportEquipments": {
      "type": "array",
      "minItems": 1,
      "description": "A list of `Utilized Transport Equipments` describing the equipment being used.\n",
      "items": {
        "$ref": "#/$defs/UtilizedTransportEquipment"
      }
    },
    "exportLicense": {
      "$ref": "#/$defs/ExportLicense"
    },
    "importLicense": {
      "$ref": "#/$defs/ImportLicense"
    },
    "references": {
      "type": "array",
      "description": "A list of `References`\n",
      "items": {
        "$ref": "#/$defs/Reference"
      }
    },
    "customsReferences": {
      "type": "array",
      "description": "A list of `Customs references`\n",
      "items": {
        "$ref": "#/$defs/CustomsReference"
      }
    }
  },
  "required": [
    "transportDocumentReference",
    "transportDocumentStatus",
    "transportDocumentTypeCode",
    "isShippedOnBoardType",
    "isElectronic",
    "isToOrder",
    "invoicePayableAt",
    "partyContactDetails",
    "documentParties",
    "consignmentItems",
    "utilizedTransportEquipments",
    "termsAndConditions",
    "receiptTypeAtOrigin",
    "deliveryTypeAtDestination",
    "cargoMovementTypeAtOrigin",
    "cargoMovementTypeAtDestination",
    "carrierCode",
    "carrierCodeListProvider",
    "transports"
  ],
  "$defs": {
    "ActiveReeferSettings": {
      "type": "object",
      "title": "Active Reefer Settings",
      "description": "The specifications for a Reefer equipment.\n\n**Condition:** Only applicable when `isNonOperatingReefer` is set to `false`\n",
      "properties": {
        "temperatureSetpoint": {
          "type": "number",
          "format": "float",
          "description": "Target value of the temperature for the Reefer based on the cargo requirement.\n"
        },
        "temperatureUnit": {
          "type": "string",
          "description": "The unit for temperature in Celsius or Fahrenheit\n\n- `CEL` (Celsius)\n- `FAH` (Fahrenheit)\n\n**Condition:** Mandatory if `temperatureSetpoint` is provided. If `temperatureSetpoint` is not provided, this field must be empty.\n",
          "enum": [
            "CEL",
            "FAH"
          ]
        },
        "o2Setpoint": {
          "type": "number",
          "format": "float",
          "minimum": 0,
          "maximum": 100,
          "description": "The percentage of the controlled atmosphere O<sub>2</sub> target value\n"
        },
        "co2Setpoint": {
          "type": "number",
          "format": "float",
          "minimum": 0,
          "maximum": 100,
          "description": "The percentage of the controlled atmosphere CO<sub>2</sub> target value\n"
        },
        "humiditySetpoint": {
          "type": "number",
          "format": "float",
          "minimum": 0,
          "maximum": 100,
          "description": "The percentage of the controlled atmosphere humidity target value\n"
        },
        "airExchangeSetpoint": {
          "type": "number",
          "format": "float",
          "minimum": 0,
          "description": "Target value for the air exchange rate which is the rate at which outdoor air replaces indoor air within a Reefer container\n"
        },
        "airExchangeUnit": {
          "type": "string",
          "description": "The unit for `airExchange` in metrics- or imperial- units per hour\n- `MQH` (Cubic metre per hour)\n- `FQH` (Cubic foot per hour)\n\n**Condition:** Mandatory if `airExchange` is provided. If `airExchange` is not provided, this field must be empty.\n",
          "enum": [
            "MQH",
            "FQH"
          ]
        },
        "isVentilationOpen": {
          "type": "boolean",
          "description": "If `true` the ventilation orifice is `Open` - if `false` the ventilation orifice is `closed`\n"
        },
        "isDrainholesOpen": {
          "type": "boolean",
          "description": "Is drain holes open on the container\n"
        },
        "isBulbMode": {
          "type": "boolean",
          "description": "Is special container setting for handling flower bulbs active\n"
        },
        "isColdTreatmentRequired": {
          "type": "boolean",
          "description": "Indicator whether cargo requires cold treatment prior to loading at origin or during transit, but prior arrival at POD\n"
        },
        "isControlledAtmosphereRequired": {
          "type": "boolean",
          "description": "Indicator of whether cargo requires Controlled Atmosphere.\n"
        }
      }
    },
    "Address": {
      "type": "object",
      "title": "Address",
      "description": "An object for storing address related information\n",
      "properties": {
        "street": {
          "type": "string",
          "maxLength": 70,
          "description": "The name of the street."
        },
        "streetNumber": {
          "type": "string",
          "maxLength": 50,
          "description": "The number of the street."
        },
        "floor": {
          "type": "string",
          "pattern": "^\\S(?:.*\\S)?$",
          "maxLength": 50,
          "description": "The floor of the street number.\n"
        },
        "postCode": {
          "type": "string",
          "maxLength": 10,
          "description": "The post code of the address."
        },
        "POBox": {
          "type": "string",
          "maxLength": 20,
          "description": "A numbered box at a post office where a person or business can have mail or parcels delivered."
        },
        "city": {
          "type": "string",
          "pattern": "^\\S(?:.*\\S)?$",
          "maxLength": 35,
          "description": "The name of the city.\n"
        },
        "stateRegion": {
          "type": "string",
          "maxLength": 65,
          "description": "The name of the state/region."
        },
        "countryCode": {
          "type": "string",
          "pattern": "^[A-Z]{2}$",
          "minLength": 2,
          "maxLength": 2,
          "description": "The 2 characters for the country code using [ISO 3166-1 alpha-2](https://www.iso.org/obp/ui/#iso:pub:PUB500001:en)\n"
        }
      },
      "required": [
        "street",
        "city",
        "countryCode"
      ]
    },
    "CargoGrossVolume": {
      "type": "object",
      "title": "Cargo Gross Volume",
      "description": "Calculated by multiplying the width, height, and length of the packed cargo.\n",
      "properties": {
        "value": {
          "type": "number",
          "format": "float",
          "minimum": 0,
          "exclusiveMinimum": true,
          "description": "Calculated by multiplying the width, height, and length of the packed cargo. A maximum of 4 decimals should be provided.\n"
        },
        "unit": {
          "type": "string",
          "description": "The unit of measure which can be expressed in imperial or metric terms:\n- `FTQ` (Cubic foot)\n- `MTQ` (Cubic meter)\n",
          "enum": [
            "MTQ",
            "FTQ"
          ]
        }
      },
      "required": [
        "value",
        "unit"
      ]
    },
    "CargoGrossWeight": {
      "type": "object",
      "title": "Cargo Gross Weight",
      "description": "The weight of the cargo item including packaging being carried in the container. Excludes the tare weight of the container.\n",
      "properties": {
        "value": {
          "type": "number",
          "format": "float",
          "minimum": 0,
          "exclusiveMinimum": true,
          "description": "The weight of the cargo item including packaging being carried in the container. Excludes the tare weight of the container. A maximum of 3 decimals should be provided.\n"
        },
        "unit": {
          "type": "string",
          "description": "The unit of measure which can be expressed in imperial or metric terms:\n- `KGM` (Kilograms)\n- `LBR` (Pounds)\n",
          "enum": [
            "KGM",
            "LBR"
          ]
        }
      },
      "required": [
        "value",
        "unit"
      ]
    },
    "CargoItem": {
      "type": "object",
      "title": "Cargo Item",
      "description": "A `cargoItem` is the smallest unit used by stuffing. A `cargoItem` cannot be split across containers.\n",
      "properties": {
        "equipmentReference": {
          "type": "string",
          "pattern": "^\\S(?:.*\\S)?$",
          "maxLength": 11,
          "description": "The unique identifier for the equipment, which should follow the BIC ISO Container Identification Number where possible.\nAccording to [ISO 6346](https://www.iso.org/standard/83558.html), a container identification code consists of a 4-letter prefix and a 7-digit number (composed of a 3-letter owner code, a category identifier, a serial number, and a check-digit).\n\nIf a container does not comply with [ISO 6346](https://www.iso.org/standard/83558.html), it is suggested to follow [Recommendation #2: Containers with non-ISO identification](https://smdg.org/documents/smdg-recommendations) from SMDG.\n"
        },
        "cargoGrossWeight": {
          "$ref": "#/$defs/CargoGrossWeight"
        },
        "cargoGrossVolume": {
          "$ref": "#/$defs/CargoGrossVolume"
        },
        "cargoNetWeight": {
          "$ref": "#/$defs/CargoNetWeight"
        },
        "cargoNetVolume": {
          "$ref": "#/$defs/CargoNetVolume"
        },
        "exportLicense": {
          "$ref": "#/$defs/ExportLicense"
        },
        "importLicense": {
          "$ref": "#/$defs/ImportLicense"
        },
        "outerPackaging": {
          "$ref": "#/$defs/OuterPackaging"
        },
        "nationalCommodityCodes": {
          "type": "array",
          "description": "A list of `National Commodity Codes` that apply to this `cargoItem`\n",
          "items": {
            "$ref": "#/$defs/NationalCommodityCode"
          }
        },
        "customsReferences": {
          "type": "array",
          "description": "A list of `Customs references`\n",
          "items": {
            "$ref": "#/$defs/CustomsReference"
          }
        }
      },
      "required": [
        "equipmentReference",
        "cargoGrossWeight",
        "outerPackaging"
      ]
    },
    "CargoNetVolume": {
      "type": "object",
      "title": "Cargo Net Volume",
      "description": "Calculated by multiplying the width, height, and length of the cargo, excluding packaging.\n",
      "properties": {
        "value": {
          "type": "number",
          "format": "float",
          "minimum": 0,
          "exclusiveMinimum": true,
          "description": "Calculated by multiplying the width, height, and length of the cargo, excluding packaging.\n"
        },
        "unit": {
          "type": "string",
          "description": "The unit of measure which can be expressed in imperial or metric terms:\n- `FTQ` (Cubic foot)\n- `MTQ` (Cubic meter)\n",
          "enum": [
            "MTQ",
            "FTQ"
          ]
        }
      },
      "required": [
        "value",
        "unit"
      ]
    },
    "CargoNetWeight": {
      "type": "object",
      "title": "Cargo Net Weight",
      "description": "The weight of the cargo item excluding packaging being carried in the container. Excludes the tare weight of the container.\n",
      "properties": {
        "value": {
          "type": "number",
          "format": "float",
          "minimum": 0,
          "exclusiveMinimum": true,
          "description": "The weight of the cargo item excluding packaging being carried in the container. Excludes the tare weight of the container. A maximum of 3 decimals should be provided.\n"
        },
        "unit": {
          "type": "string",
          "description": "The unit of measure which can be expressed in imperial or metric terms:\n- `KGM` (Kilograms)\n- `LBR` (Pounds)\n",
          "enum": [
            "KGM",
            "LBR"
          ]
        }
      },
      "required": [
        "value",
        "unit"
      ]
    },
    "CarriersAgentAtDestination": {
      "type": "object",
      "title": "Carrier's Agent At Destination",
      "description": "The party on the import side assigned by the carrier to whom the customer need to reach out to for cargo release.\n",
      "properties": {
        "partyName": {
          "type": "string",
          "pattern": "^\\S(?:.*\\S)?$",
          "maxLength": 70,
          "description": "Name of the party.\n"
        },
        "address": {
          "$ref": "#/$defs/Address"
        },
        "partyContactDetails": {
          "type": "array",
          "description": "A list of contact details\n",
          "items": {
            "$ref": "#/$defs/PartyContactDetail"
          }
        }
      },
      "required": [
        "partyName",
        "address",
        "partyContactDetails"
      ]
    },
    "Charge": {
      "type": "object",
      "title": "Charge",
      "description": "Addresses the monetary value of freight and other service charges for a `Booking`.\n",
      "properties": {
        "chargeName": {
          "type": "string",
          "pattern": "^\\S(?:.*\\S)?$",
          "maxLength": 50,
          "description": "Free text field describing the charge to apply\n"
        },
        "currencyAmount": {
          "type": "number",
          "format": "float",
          "minimum": 0,
          "description": "The monetary value of all freight and other service charges for a transport document, with a maximum of 2-digit decimals.\n"
        },
        "currencyCode": {
          "type": "string",
          "pattern": "^[A-Z]{3}$",
          "minLength": 3,
          "maxLength": 3,
          "description": "The currency for the charge, using a 3-character code ([ISO 4217](https://www.iso.org/iso-4217-currency-codes.html)).\n"
        },
        "paymentTermCode": {
          "type": "string",
          "description": "An indicator of whether a charge is prepaid (PRE) or collect (COL). When prepaid, the charge is the responsibility of the shipper or the Invoice payer on behalf of the shipper (if provided). When collect, the charge is the responsibility of the consignee or the Invoice payer on behalf of the consignee (if provided).\n\n- `PRE` (Prepaid)\n- `COL` (Collect)\n",
          "enum": [
            "PRE",
            "COL"
          ]
        },
        "calculationBasis": {
          "type": "string",
          "pattern": "^\\S(?:.*\\S)?$",
          "maxLength": 50,
          "description": "The code specifying the measure unit used for the corresponding unit price for this cost, such as per day, per ton, per square metre.\n"
        },
        "unitPrice": {
          "type": "number",
          "format": "float",
          "minimum": 0,
          "description": "The unit price of this charge item in the currency of the charge.\n"
        },
        "quantity": {
          "type": "number",
          "format": "float",
          "minimum": 0,
          "description": "The amount of unit for this charge item.\n"
        }
      },
      "required": [
        "chargeName",
        "currencyAmount",
        "currencyCode",
        "paymentTermCode",
        "calculationBasis",
        "unitPrice",
        "quantity"
      ]
    },
    "City": {
      "type": "object",
      "title": "City",
      "description": "An object for storing city, state/region and country related information\n",
      "properties": {
        "city": {
          "type": "string",
          "pattern": "^\\S(?:.*\\S)?$",
          "maxLength": 35,
          "description": "The name of the city.\n"
        },
        "stateRegion": {
          "type": "string",
          "maxLength": 65,
          "description": "The name of the state/region.\n"
        },
        "countryCode": {
          "type": "string",
          "pattern": "^[A-Z]{2}$",
          "minLength": 2,
          "maxLength": 2,
          "description": "The 2 characters for the country code using [ISO 3166-1 alpha-2](https://www.iso.org/obp/ui/#iso:pub:PUB500001:en)\n"
        }
      },
      "required": [
        "city",
        "countryCode"
      ]
    },
    "Consignee": {
      "type": "object",
      "title": "Consignee",
      "description": "The party to which goods are consigned in the `Master Bill of Lading`.\n\n**Condition:** Mandatory for non-negotiable BL (`isToOrder=false`)\n\n**Condition:** If a `displayedAddress` is provided, it must be included in the `Transport Document` instead of the `address`.\n",
      "properties": {
        "partyName": {
          "type": "string",
          "pattern": "^\\S(?:.*\\S)?$",
          "maxLength": 70,
          "description": "Name of the party.\n"
        },
        "typeOfPerson": {
          "type": "string",
          "maxLength": 50,
          "pattern": "^\\S(?:.*\\S)?$",
          "description": "Can be one of the following values as per the Union Customs Code art. 5(4):\n- `NATURAL_PERSON` (A person that is an individual living human being)\n- `LEGAL_PERSON` (person (including a human being and public or private organizations) that can perform legal actions, such as own a property, sue and be sued)\n- `ASSOCIATION_OF_PERSONS` (Not a legal person, but recognised under Union or National law as having the capacity to perform legal acts)\n"
        },
        "address": {
          "$ref": "#/$defs/PartyAddress"
        },
        "displayedAddress": {
          "type": "array",
          "maxItems": 6,
          "description": "The address of the party to be displayed on the `Transport Document`. The displayed address may be used to match the address provided in the `Letter of Credit`.\n\n**Conditions:** If provided:\n  - the displayed address must be included in the `Transport Document`.\n  - for physical BL (`isElectronic=false`), it is only allowed to provide max 2 lines of 35 characters\n  - for electronic BL (`isElectronic=true`), the limit is 6 lines of 35 characters\n  - the order of the items in this array **MUST** be preserved as by the provider of the API.\n",
          "items": {
            "type": "string",
            "maxLength": 35,
            "description": "A single address line\n"
          }
        },
        "identifyingCodes": {
          "type": "array",
          "minItems": 1,
          "items": {
            "$ref": "#/$defs/IdentifyingCode"
          }
        },
        "taxLegalReferences": {
          "description": "A list of `Tax References` for a `Party`\n",
          "type": "array",
          "items": {
            "$ref": "#/$defs/TaxLegalReference"
          }
        },
        "partyContactDetails": {
          "type": "array",
          "description": "A list of contact details\n",
          "items": {
            "$ref": "#/$defs/PartyContactDetail"
          }
        },
        "reference": {
          "type": "string",
          "pattern": "^\\S(?:.*\\S)?$",
          "maxLength": 35,
          "description": "A reference linked to the `Consignee`.\n"
        },
        "purchaseOrderReferences": {
          "type": "array",
          "description": "A list of `Purchase Order Reference`s linked to the `Consignee`.\n",
          "items": {
            "type": "string",
            "pattern": "^\\S(?:.*\\S)?$",
            "maxLength": 35,
            "description": "A purchase order reference linked to the `Consignee`.\n"
          }
        }
      },
      "required": [
        "partyName",
        "identifyingCodes"
      ]
    },
    "ConsignmentItem": {
      "type": "object",
      "title": "Consignment Item",
      "description": "Defines a list of `CargoItems` belonging together and the associated `Booking`. A `ConsignmentItem` can be split across multiple containers (`UtilizedTransportEquipment`) by referencing multiple `CargoItems`\n",
      "properties": {
        "carrierBookingReference": {
          "type": "string",
          "pattern": "^\\S(?:.*\\S)?$",
          "maxLength": 35,
          "description": "The associated booking number provided by the carrier for this `Consignment Item`.\n"
        },
        "descriptionOfGoods": {
          "type": "array",
          "description": "A plain language description that is precise enough for Customs services to be able to identify the goods. General terms (i.e. 'consolidated', 'general cargo' 'parts' or 'freight of all kinds') or not sufficiently precise description cannot be accepted.\n\n**Condition:** The order of the items in this array **MUST** be preserved as by the provider of the API.\n",
          "maxItems": 150,
          "items": {
            "type": "string",
            "maxLength": 35,
            "pattern": "^\\S(?:.*\\S)?$",
            "description": "A line describing the cargo"
          }
        },
        "HSCodes": {
          "type": "array",
          "minItems": 1,
          "description": "A list of `HS Codes` that apply to this `consignmentItem`\n",
          "items": {
            "type": "string",
            "pattern": "^\\d{6,10}$",
            "minLength": 6,
            "maxLength": 10,
            "description": "Used by customs to classify the product being shipped. The type of HS code depends on country and customs requirements. The code must be at least 6 and at most 10 digits.\n\nMore information can be found here: [HS Nomenclature](https://www.wcoomd.org/en/topics/nomenclature/instrument-and-tools).\n"
          }
        },
        "nationalCommodityCodes": {
          "type": "array",
          "description": "A list of `National Commodity Codes` that apply to this `commodity`\n",
          "items": {
            "$ref": "#/$defs/NationalCommodityCode"
          }
        },
        "shippingMarks": {
          "type": "array",
          "maxItems": 50,
          "description": "A list of the `ShippingMarks` applicable to this `consignmentItem`\n\n**Condition:** The order of the items in this array **MUST** be preserved as by the provider of the API.\n",
          "items": {
            "type": "string",
            "maxLength": 35,
            "description": "The identifying details of a package or the actual markings that appear on the package(s). This information is provided by the customer.\n"
          }
        },
        "cargoItems": {
          "type": "array",
          "minItems": 1,
          "description": "A list of all `cargoItems`\n",
          "items": {
            "$ref": "#/$defs/CargoItem"
          }
        },
        "exportLicense": {
          "$ref": "#/$defs/ExportLicense"
        },
        "importLicense": {
          "$ref": "#/$defs/ImportLicense"
        },
        "references": {
          "type": "array",
          "description": "A list of `References`\n",
          "items": {
            "$ref": "#/$defs/ReferenceConsignmentItem"
          }
        },
        "customsReferences": {
          "type": "array",
          "description": "A list of `Customs references`\n",
          "items": {
            "$ref": "#/$defs/CustomsReference"
          }
        }
      },
      "required": [
        "carrierBookingReference",
        "descriptionOfGoods",
        "HSCodes",
        "cargoItems"
      ]
    },
    "CustomsReference": {
      "type": "object",
      "title": "Customs Reference",
      "description": "Reference associated with customs and/or excise purposes required by the relevant authorities for the import, export, or transit of the goods.\n\nA small list of **potential** examples:\n\n| Type  | Country | Description |\n|-------|:-------:|-------------|\n|UCR|NL|Unique Consignment Reference|\n|CUS|NL|Customs Union and Statistics|\n|ACID|EG|Advance Cargo Information Declaration in Egypt|\n|CERS|CA|Canadian Export Reporting System|\n|ITN|US|Internal Transaction Number in US|\n|PEB|ID|PEB reference number|\n|CSN|IN|Cargo Summary Notification (CSN)|\n",
      "properties": {
        "type": {
          "type": "string",
          "pattern": "^\\S(?:.*\\S)?$",
          "maxLength": 50,
          "description": "The reference type code as defined in the relevant customs jurisdiction.\n"
        },
        "countryCode": {
          "type": "string",
          "pattern": "^[A-Z]{2}$",
          "minLength": 2,
          "maxLength": 2,
          "description": "The 2 characters for the country code using [ISO 3166-1 alpha-2](https://www.iso.org/obp/ui/#iso:pub:PUB500001:en)\n"
        },
        "values": {
          "type": "array",
          "minItems": 1,
          "items": {
            "type": "string",
            "pattern": "^\\S(?:.*\\S)?$",
            "maxLength": 35,
            "description": "The value of the `customsReference`\n"
          }
        }
      },
      "required": [
        "type",
        "countryCode",
        "values"
      ]
    },
    "DangerousGoods": {
      "type": "object",
      "title": "Dangerous Goods",
      "description": "Specification for `Dangerous Goods`. It is mandatory to provide one of `UNNumber` or `NANumber`. Dangerous Goods is based on **IMDG Amendment Version 41-22**.\n",
      "oneOf": [
        {
          "type": "object",
          "title": "UN Number",
          "properties": {
            "UNNumber": {
              "type": "string",
              "pattern": "^\\d{4}$",
              "minLength": 4,
              "maxLength": 4,
              "description": "United Nations Dangerous Goods Identifier (UNDG) assigned by the UN Sub-Committee of Experts on the Transport of Dangerous Goods and shown in the IMO IMDG.\n"
            }
          },
          "required": [
            "UNNumber"
          ]
        },
        {
          "type": "object",
          "title": "NA Number",
          "properties": {
            "NANumber": {
              "type": "string",
              "pattern": "^\\d{4}$",
              "minLength": 4,
              "maxLength": 4,
              "description": "Four-digit number that is assigned to dangerous, hazardous, and harmful substances by the United States Department of Transportation.\n"
            }
          },
          "required": [
            "NANumber"
          ]
        }
      ],
      "properties": {
        "codedVariantList": {
          "type": "string",
          "pattern": "^[0-3][0-9A-Z]{3}$",
          "minLength": 4,
          "maxLength": 4,
          "description": "Four-character code supplied by Exis Technologies that assists to remove ambiguities when identifying a variant within a single UN number or NA number that may occur when two companies exchange DG information.\n\nCharacter | Valid Characters | Description\n:--------:|------------------|------------\n1| 0, 1, 2, 3|The packing group. Code 0 indicates there is no packing group\n2|0 to 9 and A to Z|A sequence letter for the PSN, or 0 if there were no alternative PSNs\n3 and 4|0 to 9 and A to Z|Two sequence letters for other information, for the cases where the variant is required because of different in subrisks, packing instruction etc.\n"
        },
        "properShippingName": {
          "type": "string",
          "maxLength": 250,
          "description": "The proper shipping name for goods under IMDG Code, or the product name for goods under IBC Code and IGC Code, or the bulk cargo shipping name for goods under IMSBC Code, or the name of oil for goods under Annex I to the MARPOL Convention.\n"
        },
        "technicalName": {
          "type": "string",
          "maxLength": 250,
          "description": "The recognized chemical or biological name or other name currently used for the referenced dangerous goods as described in chapter 3.1.2.8 of the IMDG Code.\n"
        },
        "imoClass": {
          "type": "string",
          "maxLength": 4,
          "description": "The hazard class code of the referenced dangerous goods according to the specified regulation. Examples of possible values are:\n\n- `1.1A` (Substances and articles which have a mass explosion hazard)\n- `1.6N` (Extremely insensitive articles which do not have a mass explosion hazard)\n- `2.1` (Flammable gases)\n- `8` (Corrosive substances)\n"
        },
        "subsidiaryRisk1": {
          "type": "string",
          "pattern": "^[0-9](\\.[0-9])?$",
          "minLength": 1,
          "maxLength": 3,
          "description": "Any risk in addition to the class of the referenced dangerous goods according to the IMO IMDG Code.\n"
        },
        "subsidiaryRisk2": {
          "type": "string",
          "pattern": "^[0-9](\\.[0-9])?$",
          "minLength": 1,
          "maxLength": 3,
          "description": "Any risk in addition to the class of the referenced dangerous goods according to the IMO IMDG Code.\n"
        },
        "isMarinePollutant": {
          "type": "boolean",
          "description": "Indicates if the goods belong to the classification of Marine Pollutant.\n"
        },
        "packingGroup": {
          "type": "integer",
          "format": "int32",
          "minimum": 1,
          "maximum": 3,
          "description": "The packing group according to the UN Recommendations on the Transport of Dangerous Goods and IMO IMDG Code.\n"
        },
        "isLimitedQuantity": {
          "type": "boolean",
          "description": "Indicates if the dangerous goods can be transported as limited quantity in accordance with Chapter 3.4 of the IMO IMDG Code.\n"
        },
        "isExceptedQuantity": {
          "type": "boolean",
          "description": "Indicates if the dangerous goods can be transported as excepted quantity in accordance with Chapter 3.5 of the IMO IMDG Code.\n"
        },
        "isSalvagePackings": {
          "type": "boolean",
          "description": "Indicates if the cargo has special packaging for the transport, recovery or disposal of damaged, defective, leaking or nonconforming hazardous materials packages, or hazardous materials that have spilled or leaked.\n"
        },
        "isEmptyUncleanedResidue": {
          "type": "boolean",
          "description": "Indicates if the cargo is residue.\n"
        },
        "isWaste": {
          "type": "boolean",
          "description": "Indicates if waste is being shipped\n"
        },
        "isHot": {
          "type": "boolean",
          "description": "Indicates if high temperature cargo is shipped.\n"
        },
        "isCompetentAuthorityApprovalRequired": {
          "type": "boolean",
          "description": "Indicates if the cargo require approval from authorities\n"
        },
        "competentAuthorityApproval": {
          "type": "string",
          "pattern": "^\\S(?:.*\\S)?$",
          "maxLength": 70,
          "description": "Name and reference number of the competent authority providing the approval.\n"
        },
        "segregationGroups": {
          "type": "array",
          "description": "List of the segregation groups applicable to specific hazardous goods according to the IMO IMDG Code.\n\n**Condition:** only applicable to specific hazardous goods.\n",
          "items": {
            "type": "string",
            "maxLength": 2,
            "description": "Grouping of Dangerous Goods having certain similar chemical properties. Possible values are:\n\n- `1` (Acids)\n- `2` (Ammonium Compounds)\n- `3` (Bromates)\n- `4` (Chlorates)\n- `5` (Chlorites)\n- `6` (Cyanides)\n- `7` (Heavy metals and their salts)\n- `8` (Hypochlorites)\n- `9` (Lead and its compounds)\n- `10` (Liquid halogenated hydrocarbons)\n- `11` (Mercury and mercury compounds)\n- `12` (Nitrites and their mixtures)\n- `13` (Perchlorates)\n- `14` (Permanganates)\n- `15` (Powdered metals)\n- `16` (Peroxides),\n- `17` (Azides)\n- `18` (Alkalis)\n"
          }
        },
        "innerPackagings": {
          "type": "array",
          "description": "A list of `Inner Packings` contained inside this `outer packaging/overpack`.\n",
          "items": {
            "$ref": "#/$defs/InnerPackaging"
          }
        },
        "emergencyContactDetails": {
          "$ref": "#/$defs/EmergencyContactDetails"
        },
        "EMSNumber": {
          "type": "string",
          "maxLength": 7,
          "description": "The emergency schedule identified in the IMO EmS Guide – Emergency Response Procedures for Ships Carrying Dangerous Goods. Comprises 2 values; 1 for spillage and 1 for fire. Possible values spillage: S-A to S-Z. Possible values fire: F-A to F-Z.\n"
        },
        "endOfHoldingTime": {
          "type": "string",
          "format": "date",
          "description": "Date by when the refrigerated liquid needs to be delivered.\n"
        },
        "fumigationDateTime": {
          "type": "string",
          "format": "date-time",
          "description": "Date & time when the container was fumigated\n"
        },
        "isReportableQuantity": {
          "type": "boolean",
          "description": "Indicates if a container of hazardous material is at the reportable quantity level. If `true`, a report to the relevant authority must be made in case of spill.\n"
        },
        "inhalationZone": {
          "type": "string",
          "maxLength": 1,
          "minLength": 1,
          "description": "The zone classification of the toxicity of the inhalant. Possible values are:\n\n- `A` (Hazard Zone A) can be assigned to specific gases and liquids\n- `B` (Hazard Zone B) can be assigned to specific gases and liquids\n- `C` (Hazard Zone C) can **only** be assigned to specific gases\n- `D` (Hazard Zone D) can **only** be assigned to specific gases\n"
        },
        "grossWeight": {
          "$ref": "#/$defs/GrossWeight"
        },
        "netWeight": {
          "$ref": "#/$defs/NetWeight"
        },
        "netExplosiveContent": {
          "$ref": "#/$defs/NetExplosiveContent"
        },
        "netVolume": {
          "$ref": "#/$defs/NetVolume"
        },
        "limits": {
          "$ref": "#/$defs/Limits"
        }
      },
      "required": [
        "properShippingName",
        "imoClass"
      ]
    },
    "DocumentParties": {
      "type": "object",
      "title": "Document Parties",
      "description": "All `Parties` with associated roles.\n",
      "properties": {
        "shipper": {
          "$ref": "#/$defs/Shipper"
        },
        "consignee": {
          "$ref": "#/$defs/Consignee"
        },
        "endorsee": {
          "$ref": "#/$defs/Endorsee"
        },
        "issuingParty": {
          "$ref": "#/$defs/IssuingParty"
        },
        "carriersAgentAtDestination": {
          "$ref": "#/$defs/CarriersAgentAtDestination"
        },
        "notifyParties": {
          "type": "array",
          "maxItems": 3,
          "description": "List of up to 3 `Notify Parties`. The first item in the list is the **First Notify Party** (`N1`), the second item is the **Second Notify Party** (`N2`) and the last item is the **Other Notify Party** (`NI`).\n\n**Condition:** If provided:\n  - Mandatory for To Order BLs, `isToOrder=true`\n  - The order of the items in this array **MUST** be preserved as by the provider of the API.\n",
          "items": {
            "$ref": "#/$defs/NotifyParty"
          }
        },
        "other": {
          "type": "array",
          "description": "A list of document parties that can be optionally provided in the `Shipping Instructions` and `Transport Document`.",
          "items": {
            "$ref": "#/$defs/OtherDocumentParty"
          }
        }
      },
      "required": [
        "shipper",
        "issuingParty"
      ]
    },
    "EmergencyContactDetails": {
      "type": "object",
      "title": "Emergency Contact Details",
      "description": "24 hr emergency contact details\n",
      "properties": {
        "contact": {
          "type": "string",
          "maxLength": 255,
          "description": "Name of the Contact person during an emergency.\n"
        },
        "provider": {
          "type": "string",
          "maxLength": 255,
          "description": "Name of the third party vendor providing emergency support\n"
        },
        "phone": {
          "type": "string",
          "pattern": "^\\S(?:.*\\S)?$",
          "maxLength": 30,
          "description": "Phone number for the contact. Phone **MUST** include an international phone number format as defined in the [ITU-T recommendation E.123](https://www.itu.int/rec/T-REC-E.123/en).\n"
        },
        "referenceNumber": {
          "type": "string",
          "maxLength": 255,
          "description": "Contract reference for the emergency support provided by an external third party vendor.\n"
        }
      },
      "required": [
        "contact",
        "phone"
      ]
    },
    "Endorsee": {
      "type": "object",
      "title": "Endorsee",
      "description": "The party to whom the title to the goods is transferred by means of endorsement.\n\n**Condition:** Can only be provided for negotiable BLs (`isToOrder=true`). If a negotiable BL does not have an `Endorsee`, the BL is said to be \"blank endorsed\". Note `Consignee` and `Endorsee` are mutually exclusive.\n\n**Condition:** If a `displayedAddress` is provided, it must be included in the `Transport Document` instead of the `address`.\n",
      "properties": {
        "partyName": {
          "type": "string",
          "pattern": "^\\S(?:.*\\S)?$",
          "maxLength": 70,
          "description": "Name of the party.\n"
        },
        "address": {
          "$ref": "#/$defs/PartyAddress"
        },
        "displayedAddress": {
          "type": "array",
          "maxItems": 6,
          "description": "The address of the party to be displayed on the `Transport Document`. The displayed address may be used to match the address provided in the `Letter of Credit`.\n\n**Conditions:** If provided:\n  - the displayed address must be included in the `Transport Document`.\n  - for physical BL (`isElectronic=false`), it is only allowed to provide max 2 lines of 35 characters\n  - for electronic BL (`isElectronic=true`), the limit is 6 lines of 35 characters\n  - the order of the items in this array **MUST** be preserved as by the provider of the API.\n",
          "items": {
            "type": "string",
            "maxLength": 35,
            "description": "A single address line\n"
          }
        },
        "identifyingCodes": {
          "type": "array",
          "minItems": 1,
          "items": {
            "$ref": "#/$defs/IdentifyingCode"
          }
        },
        "taxLegalReferences": {
          "description": "A list of `Tax References` for a `Party`\n",
          "type": "array",
          "items": {
            "$ref": "#/$defs/TaxLegalReference"
          }
        },
        "partyContactDetails": {
          "type": "array",
          "description": "A list of contact details\n",
          "items": {
            "$ref": "#/$defs/PartyContactDetail"
          }
        }
      },
      "required": [
        "partyName",
        "identifyingCodes"
      ]
    },
    "Equipment": {
      "type": "object",
      "title": "Equipment",
      "description": "Used for storing cargo in/on during transport. The equipment size/type is defined by the ISO 6346 code. The most common equipment size/type is 20'/40'/45' DRY Freight Container, but several different versions exist.\n",
      "properties": {
        "equipmentReference": {
          "type": "string",
          "pattern": "^\\S(?:.*\\S)?$",
          "maxLength": 11,
          "description": "The unique identifier for the equipment, which should follow the BIC ISO Container Identification Number where possible.\nAccording to [ISO 6346](https://www.iso.org/standard/83558.html), a container identification code consists of a 4-letter prefix and a 7-digit number (composed of a 3-letter owner code, a category identifier, a serial number, and a check-digit).\n\nIf a container does not comply with [ISO 6346](https://www.iso.org/standard/83558.html), it is suggested to follow [Recommendation #2: Containers with non-ISO identification](https://smdg.org/documents/smdg-recommendations) from SMDG.\n"
        },
        "ISOEquipmentCode": {
          "type": "string",
          "pattern": "^\\S(?:.*\\S)?$",
          "maxLength": 4,
          "description": "Unique code for the different equipment size and type used to transport commodities. The code can refer to one of ISO size type (e.g. 22G1) or ISO type group (e.g. 22GP) following the [ISO 6346](https://www.iso.org/standard/83558.html) standard.\n"
        },
        "tareWeight": {
          "$ref": "#/$defs/TareWeight"
        }
      },
      "required": [
        "equipmentReference"
      ]
    },
    "ExportLicense": {
      "type": "object",
      "title": "Export License",
      "description": "`Export License` requirements\n\n**Condition:** Included if the property is provided in the `Shipping Instructions.`\n",
      "properties": {
        "isRequired": {
          "type": "boolean",
          "description": "Information provided by the shipper to indicate whether an `Export License` or permit is required for this shipment/commodity/destination.\n  \n**Note:** If this property is omitted, it may be interpreted differently by different API providers and by the same API provider in different contexts.\n"
        },
        "reference": {
          "type": "string",
          "pattern": "^\\S(?:.*\\S)?$",
          "maxLength": 35,
          "description": "Reference number assigned to an `Export License` or permit, which authorizes a business or individual to export specific goods to specific countries under defined conditions. It is a permit that is required when shipping certain restricted or controlled goods, such as military equipment, high-tech items, chemicals, or items subject to international regulations. The `Export License` must be valid at time of departure.\n"
        },
        "issueDate": {
          "type": "string",
          "format": "date",
          "description": "Issue date of the `Export License`.\n"
        },
        "expiryDate": {
          "type": "string",
          "format": "date",
          "description": "Expiry date of the `Export License`.\n"
        }
      }
    },
    "Facility": {
      "type": "object",
      "title": "Facility",
      "description": "An object used to express a location using a `Facility`. The facility can be expressed using one of `BIC` code or `SMDG` code. The `facilityCode` does not contain the `UNLocationCode` - this should be provided in the `UnLocationCode` attribute.\n",
      "properties": {
        "facilityCode": {
          "type": "string",
          "pattern": "^\\S(?:.*\\S)?$",
          "maxLength": 6,
          "description": "The code used for identifying the specific facility. This code does not include the UN Location Code.\nThe definition of the code depends on the `facilityCodeListProvider`. As code list providers maintain multiple codeLists the following codeList is used:\n- `SMDG` (the codeList used is the [SMDG Terminal Code List](https://smdg.org/documents/smdg-code-lists/))\n- `BIC` (the codeList used is the [BIC Facility Codes](https://www.bic-code.org/facility-codes/))",
          "nullable": false
        },
        "facilityCodeListProvider": {
          "type": "string",
          "description": "The provider used for identifying the facility Code. Some facility codes are only defined in combination with an `UN Location Code`\n- `BIC` (Requires a UN Location Code)\n- `SMDG` (Requires a UN Location Code)\n",
          "enum": [
            "BIC",
            "SMDG"
          ]
        }
      },
      "required": [
        "facilityCode",
        "facilityCodeListProvider"
      ]
    },
    "GeoCoordinate": {
      "type": "object",
      "title": "Geo Coordinate",
      "description": "An object used to express a location using `latitude` and `longitude`.\n",
      "properties": {
        "latitude": {
          "type": "string",
          "description": "Geographic coordinate that specifies the north–south position of a point on the Earth's surface.",
          "maxLength": 10
        },
        "longitude": {
          "type": "string",
          "description": "Geographic coordinate that specifies the east–west position of a point on the Earth's surface.",
          "maxLength": 11
        }
      },
      "required": [
        "latitude",
        "longitude"
      ]
    },
    "GrossWeight": {
      "type": "object",
      "title": "Gross Weight",
      "description": "Total weight of the goods carried, including packaging.\n",
      "properties": {
        "value": {
          "type": "number",
          "format": "float",
          "minimum": 0,
          "exclusiveMinimum": true,
          "description": "The grand total weight of the DG cargo and weight per `UNNumber`/`NANumber` including packaging items being carried, which can be expressed in imperial or metric terms, as provided by the shipper.\n"
        },
        "unit": {
          "type": "string",
          "description": "The unit of measure which can be expressed in imperial or metric terms:\n- `KGM` (Kilograms)\n- `LBR` (Pounds)\n",
          "enum": [
            "KGM",
            "LBR"
          ]
        }
      },
      "required": [
        "value",
        "unit"
      ]
    },
    "IdentifyingCode": {
      "type": "object",
      "title": "Identifying Code",
      "properties": {
        "codeListProvider": {
          "type": "string",
          "maxLength": 100,
          "description": "A list of codes identifying a party. Possible values are:\n- `WAVE` (Wave)\n- `CARX` (CargoX)\n- `ESSD` (EssDOCS)\n- `IDT` (ICE Digital Trade)\n- `BOLE` (Bolero)\n- `EDOX` (EdoxOnline)\n- `IQAX` (IQAX)\n- `SECR` (Secro)\n- `TRGO` (TradeGO)\n- `ETEU` (eTEU)\n- `TRAC` (Enigio trace:original)\n- `BRIT` (BRITC eBL)\n- `GSBN` (Global Shipping Business Network)\n- `WISE` (WiseTech)\n- `GLEIF` (Global Legal Entity Identifier Foundation)\n- `W3C` (World Wide Web Consortium)\n- `DNB` (Dun and Bradstreet)\n- `FMC` (Federal Maritime Commission)\n- `DCSA` (Digital Container Shipping Association)\n- `ZZZ` (Mutually defined)\n"
        },
        "partyCode": {
          "type": "string",
          "maxLength": 150,
          "description": "Code to identify the party as provided by the code list provider\n"
        },
        "codeListName": {
          "type": "string",
          "maxLength": 100,
          "description": "The name of the code list, code generation mechanism or code authority for the `partyCode`. Example values could be:\n- `DID` (Decentralized Identifier) for `codeListProvider` `W3C`\n- `LEI` (Legal Entity Identifier) for `codeListProvider` `GLEIF`\n- `DUNS` (Data Universal Numbering System) for `codeListProvider` `DNB`\n"
        }
      },
      "required": [
        "codeListProvider",
        "partyCode"
      ]
    },
    "ImportLicense": {
      "type": "object",
      "title": "Import License",
      "description": "`Import License` requirements\n\n**Condition:** Included if the property is provided in the `Shipping Instructions.`\n",
      "properties": {
        "isRequired": {
          "type": "boolean",
          "description": "Information provided by the shipper to indicate whether an `Import License` or permit is required for this shipment/commodity/destination.\n  \n**Note:** If this property is omitted, it may be interpreted differently by different API providers and by the same API provider in different contexts.\n"
        },
        "reference": {
          "type": "string",
          "pattern": "^\\S(?:.*\\S)?$",
          "maxLength": 35,
          "description": "Reference number assigned to an `Import License` or permit, issued by countries exercising import controls that authorizes the importation of the articles stated in the license. The `Import License` must be valid at time of arrival.\n"
        },
        "issueDate": {
          "type": "string",
          "format": "date",
          "description": "Issue date of the `Import License`.\n"
        },
        "expiryDate": {
          "type": "string",
          "format": "date",
          "description": "Expiry date of the `Import License`.\n"
        }
      }
    },
    "InnerPackaging": {
      "type": "object",
      "title": "Inner Packaging",
      "description": "Object for inner packaging specification\n",
      "properties": {
        "quantity": {
          "type": "integer",
          "format": "int32",
          "description": "Count of `Inner Packagings` of the referenced `Dangerous Goods`.\n"
        },
        "material": {
          "type": "string",
          "maxLength": 100,
          "description": "The `material` used for the `Inner Packaging` of the referenced `Dangerous Goods`.\n"
        },
        "description": {
          "type": "string",
          "maxLength": 100,
          "description": "Description of the packaging.\n"
        }
      },
      "required": [
        "quantity",
        "material",
        "description"
      ]
    },
    "InvoicePayableAt": {
      "type": "object",
      "title": "Invoice Payable At",
      "description": "Location where payment of ocean freight and charges for the main transport will take place by the customer.\n\nThe location can be provided as a `UN Location Code` or as a fallback - a `freeText` field\n",
      "oneOf": [
        {
          "type": "object",
          "title": "UN Location Code",
          "properties": {
            "UNLocationCode": {
              "type": "string",
              "pattern": "^[A-Z]{2}[A-Z2-9]{3}$",
              "minLength": 5,
              "maxLength": 5,
              "description": "The UN Location code specifying where the place is located. The pattern used must be\n\n- 2 characters for the country code using [ISO 3166-1 alpha-2](https://www.iso.org/obp/ui/#iso:pub:PUB500001:en)\n- 3 characters to code a location within that country. Letters A-Z and numbers from 2-9 can be used\n\nMore info can be found here: [UN/LOCODE](https://unece.org/trade/cefact/UNLOCODE-Download)"
            }
          },
          "required": [
            "UNLocationCode"
          ]
        },
        {
          "type": "object",
          "title": "Free text",
          "properties": {
            "freeText": {
              "type": "string",
              "maxLength": 35,
              "description": "The name of the location where payment will be rendered by the customer.\n"
            }
          },
          "required": [
            "freeText"
          ]
        }
      ]
    },
    "IssuingParty": {
      "type": "object",
      "title": "Issuing Party",
      "description": "The company or a legal entity issuing the `Transport Document`.\n",
      "properties": {
        "partyName": {
          "type": "string",
          "pattern": "^\\S(?:.*\\S)?$",
          "maxLength": 70,
          "description": "Name of the party.\n"
        },
        "address": {
          "$ref": "#/$defs/PartyAddress"
        },
        "identifyingCodes": {
          "type": "array",
          "items": {
            "$ref": "#/$defs/IdentifyingCode"
          }
        },
        "taxLegalReferences": {
          "description": "A list of `Tax References` for a `Party`\n",
          "type": "array",
          "items": {
            "$ref": "#/$defs/TaxLegalReference"
          }
        },
        "partyContactDetails": {
          "type": "array",
          "description": "A list of contact details\n",
          "items": {
            "$ref": "#/$defs/PartyContactDetail"
          }
        }
      },
      "required": [
        "partyName",
        "address"
      ]
    },
    "Limits": {
      "type": "object",
      "title": "Limits",
      "description": "Limits for the `Dangerous Goods`. The same `Temperature Unit` needs to apply to all attributes in this structure.\n",
      "properties": {
        "temperatureUnit": {
          "type": "string",
          "description": "The unit for **all attributes in the limits structure** in Celsius or Fahrenheit\n\n- `CEL` (Celsius)\n- `FAH` (Fahrenheit)\n",
          "enum": [
            "CEL",
            "FAH"
          ]
        },
        "flashPoint": {
          "type": "number",
          "format": "float",
          "description": "Lowest temperature at which a chemical can vaporize to form an ignitable mixture in air.\n\n**Condition:** only applicable to specific hazardous goods according to the IMO IMDG Code.\n"
        },
        "transportControlTemperature": {
          "type": "number",
          "format": "float",
          "description": "Maximum temperature at which certain substance (such as organic peroxides and self-reactive and related substances) can be safely transported for a prolonged period.\n"
        },
        "transportEmergencyTemperature": {
          "type": "number",
          "format": "float",
          "description": "Temperature at which emergency procedures shall be implemented\n"
        },
        "SADT": {
          "type": "number",
          "format": "float",
          "description": "Lowest temperature in which self-accelerating decomposition may occur in a substance\n"
        },
        "SAPT": {
          "type": "number",
          "format": "float",
          "description": "Lowest temperature in which self-accelerating polymerization may occur in a substance\n"
        }
      },
      "required": [
        "temperatureUnit"
      ]
    },
    "NationalCommodityCode": {
      "type": "object",
      "title": "National Commodity Code",
      "description": "The national commodity classification code linked to a country with a value.\n\nAn example could look like this:\n\n| Type  | Country | Value |\n|-------|:-------:|-------------|\n|NCM|BR|['1515', '2106', '2507', '2512']|\n",
      "properties": {
        "type": {
          "type": "string",
          "pattern": "^\\S(?:.*\\S)?$",
          "maxLength": 10,
          "description": "The national commodity classification code, which can be one of the following values defined by DCSA:\n- `NCM` (Nomenclatura Comum do Mercosul)\n- `HTS` (Harmonized Tariff Schedule)\n- `SCHEDULE_B` ( Schedule B)\n- `TARIC` (Integrated Tariff of the European Communities)\n- `CN` (Combined Nomenclature)\n- `CUS` (Customs Union and Statistics)\n"
        },
        "countryCode": {
          "type": "string",
          "pattern": "^[A-Z]{2}$",
          "minLength": 2,
          "maxLength": 2,
          "description": "The 2 characters for the country code using [ISO 3166-1 alpha-2](https://www.iso.org/obp/ui/#iso:pub:PUB500001:en)\n"
        },
        "values": {
          "type": "array",
          "minItems": 1,
          "description": "A list of `national commodity codes` values.\n",
          "items": {
            "type": "string",
            "pattern": "^\\S(?:.*\\S)?$",
            "maxLength": 10,
            "description": "The value of the `National Commodity Code`\n"
          }
        }
      },
      "required": [
        "type",
        "values"
      ]
    },
    "NetExplosiveContent": {
      "type": "object",
      "title": "Net Explosive Content",
      "description": "The total weight of the explosive substances, without the packaging’s, casings, etc.\n",
      "properties": {
        "value": {
          "type": "number",
          "format": "float",
          "minimum": 0,
          "exclusiveMinimum": true,
          "description": "The total weight of the explosive substances, without the packaging’s, casings, etc.\n"
        },
        "unit": {
          "type": "string",
          "description": "The unit of measure which can be expressed in imperial or metric terms:\n- `KGM` (Kilograms)\n- `LBR` (Pounds)\n- `GRM` (Grams)\n- `ONZ` (Ounce)\n",
          "enum": [
            "KGM",
            "LBR",
            "GRM",
            "ONZ"
          ]
        }
      },
      "required": [
        "value",
        "unit"
      ]
    },
    "NetVolume": {
      "type": "object",
      "title": "Net Volume",
      "description": "The volume of the referenced dangerous goods.\n\n**Condition:** only applicable to liquids and gas.\n",
      "properties": {
        "value": {
          "type": "number",
          "format": "float",
          "minimum": 0,
          "exclusiveMinimum": true,
          "description": "The volume of the referenced dangerous goods.\n"
        },
        "unit": {
          "type": "string",
          "description": "The unit of measure which can be expressed in imperial or metric terms:\n- `FTQ` (Cubic foot)\n- `MTQ` (Cubic meter)\n- `LTR` (Litre)\n",
          "enum": [
            "MTQ",
            "FTQ",
            "LTR"
          ]
        }
      },
      "required": [
        "value",
        "unit"
      ]
    },
    "NetWeight": {
      "type": "object",
      "title": "Net Weight",
      "description": "Total weight of the goods carried, excluding packaging.\n",
      "properties": {
        "value": {
          "type": "number",
          "format": "float",
          "minimum": 0,
          "exclusiveMinimum": true,
          "description": "Total weight of the goods carried, excluding packaging.\n"
        },
        "unit": {
          "type": "string",
          "description": "The unit of measure which can be expressed in imperial or metric terms:\n- `KGM` (Kilograms)\n- `LBR` (Pounds)\n",
          "enum": [
            "KGM",
            "LBR"
          ]
        }
      },
      "required": [
        "value",
        "unit"
      ]
    },
    "NotifyParty": {
      "type": "object",
      "title": "Notify Party",
      "description": "The person to be notified when a shipment arrives at its destination.\n\n**Condition:** Either the `address` or a party `identifyingCode` must be provided in the `Shipping Instructions`. If a `displayedAddress` is provided, it must be included in the `Transport Document` instead of the `address`.\n",
      "properties": {
        "partyName": {
          "type": "string",
          "pattern": "^\\S(?:.*\\S)?$",
          "maxLength": 70,
          "description": "Name of the party.\n"
        },
        "typeOfPerson": {
          "type": "string",
          "maxLength": 50,
          "pattern": "^\\S(?:.*\\S)?$",
          "description": "Can be one of the following values as per the Union Customs Code art. 5(4):\n- `NATURAL_PERSON` (A person that is an individual living human being)\n- `LEGAL_PERSON` (person (including a human being and public or private organizations) that can perform legal actions, such as own a property, sue and be sued)\n- `ASSOCIATION_OF_PERSONS` (Not a legal person, but recognised under Union or National law as having the capacity to perform legal acts)\n"
        },
        "address": {
          "$ref": "#/$defs/PartyAddress"
        },
        "displayedAddress": {
          "type": "array",
          "maxItems": 6,
          "description": "The address of the party to be displayed on the `Transport Document`. The displayed address may be used to match the address provided in the `Letter of Credit`.\n\n**Conditions:** If provided:\n  - the displayed address must be included in the `Transport Document`.\n  - for physical BL (`isElectronic=false`), it is only allowed to provide max 2 lines of 35 characters\n  - for electronic BL (`isElectronic=true`), the limit is 6 lines of 35 characters\n  - the order of the items in this array **MUST** be preserved as by the provider of the API.\n",
          "items": {
            "type": "string",
            "maxLength": 35,
            "description": "A single address line\n"
          }
        },
        "identifyingCodes": {
          "type": "array",
          "description": "**Condition:** Either the `address` or a party `identifyingCode` must be provided. \n",
          "items": {
            "$ref": "#/$defs/IdentifyingCode"
          }
        },
        "taxLegalReferences": {
          "description": "A list of `Tax References` for a `Party`\n",
          "type": "array",
          "items": {
            "$ref": "#/$defs/TaxLegalReference"
          }
        },
        "partyContactDetails": {
          "type": "array",
          "description": "A list of contact details\n",
          "items": {
            "$ref": "#/$defs/PartyContactDetail"
          }
        },
        "reference": {
          "type": "string",
          "pattern": "^\\S(?:.*\\S)?$",
          "maxLength": 35,
          "description": "A reference linked to the `NotifyParty`.\n"
        }
      },
      "required": [
        "partyName"
      ]
    },
    "OnwardInlandRouting": {
      "type": "object",
      "title": "Onward Inland Routing",
      "description": "An object to capture `Onward Inland Routing` location specified as the end location of the inland movement that takes place after the container(s) being delivered to the port of discharge/place of delivery for account and risk of merchant (merchant haulage).\n\nThe location can be specified in **any** of the following ways: `UN Location Code`, `Facility` or an `Address`.\n\n**Condition:** It is expected that if a location is specified in multiple ways (e.g. both as an `Address` and as a `Facility`) that both ways point to the same location.\n",
      "properties": {
        "locationName": {
          "type": "string",
          "description": "The name of the location.",
          "pattern": "^\\S(?:.*\\S)?$",
          "maxLength": 100
        },
        "address": {
          "$ref": "#/$defs/Address"
        },
        "facility": {
          "$ref": "#/$defs/Facility"
        },
        "UNLocationCode": {
          "type": "string",
          "pattern": "^[A-Z]{2}[A-Z2-9]{3}$",
          "minLength": 5,
          "maxLength": 5,
          "description": "The UN Location code specifying where the place is located. The pattern used must be\n\n- 2 characters for the country code using [ISO 3166-1 alpha-2](https://www.iso.org/obp/ui/#iso:pub:PUB500001:en)\n- 3 characters to code a location within that country. Letters A-Z and numbers from 2-9 can be used\n\nMore info can be found here: [UN/LOCODE](https://unece.org/trade/cefact/UNLOCODE-Download)\n"
        }
      }
    },
    "OtherDocumentParty": {
      "type": "object",
      "title": "Other Document Party",
      "description": "A list of document parties that can be optionally provided in the `Shipping Instructions` and `Transport Document`.\n",
      "properties": {
        "party": {
          "$ref": "#/$defs/Party"
        },
        "partyFunction": {
          "type": "string",
          "maxLength": 3,
          "description": "Specifies the role of the party in a given context. Possible values are:\n\n- `SCO` (Service Contract Owner)\n- `DDR` (Consignor's freight forwarder)\n- `DDS` (Consignee's freight forwarder)\n- `COW` (Invoice payer on behalf of the consignor (shipper))\n- `COX` (Invoice payer on behalf of the consignee)\n- `CS` (Consolidator)\n- `MF` (Manufacturer)\n- `WH` (Warehouse Keeper)\n"
        }
      },
      "required": [
        "party",
        "partyFunction"
      ]
    },
    "OuterPackaging": {
      "type": "object",
      "title": "Outer Packaging",
      "description": "Object for outer packaging/overpack specification. Examples of overpacks are a number of packages stacked on to a pallet and secured by strapping or placed in a protective outer packaging such as a box or crate to form one unit for the convenience of handling and stowage during transport.\n",
      "properties": {
        "packageCode": {
          "type": "string",
          "pattern": "^[A-Z0-9]{2}$",
          "minLength": 2,
          "maxLength": 2,
          "description": "A code identifying the outer packaging/overpack. `PackageCode` must follow the codes specified in [Recommendation N°21](https://unece.org/trade/uncefact/cl-recommendations)\n\n**Condition:** only applicable to dangerous goods if the `IMO packaging code` is not available.\n"
        },
        "imoPackagingCode": {
          "type": "string",
          "pattern": "^[A-Z0-9]{1,5}$",
          "minLength": 1,
          "maxLength": 5,
          "description": "The code of the packaging as per IMO.\n\n**Condition:** only applicable to dangerous goods if specified in the [IMO IMDG code](https://www.imo.org/en/publications/Pages/IMDG%20Code.aspx). If not available, the `packageCode` as per UN recommendation 21 should be used.\n"
        },
        "numberOfPackages": {
          "type": "integer",
          "format": "int32",
          "minimum": 1,
          "maximum": 99999999,
          "description": "Specifies the number of outer packagings/overpacks associated with this `Cargo Item`.\n"
        },
        "description": {
          "type": "string",
          "maxLength": 100,
          "description": "Description of the outer packaging/overpack.\n"
        },
        "woodDeclaration": {
          "type": "string",
          "maxLength": 30,
          "description": "Property to clearly indicate if the products, packaging and any other items are made of wood. Possible values include:\n- `NOT_APPLICABLE` (if no wood or any other wood product such as packaging and supports are being shipped)\n- `NOT_TREATED_AND_NOT_CERTIFIED` (if the wood or wooden materials have not been treated nor fumigated and do not include a certificate)\n- `PROCESSED` (if the wood or wooden materials are entirely made of processed wood, such as plywood, particle board, sliver plates of wood and wood laminate sheets produced using glue, heat, pressure or a combination of these)\n- `TREATED_AND_CERTIFIED` (if the wood or wooden materials have been treated and/or fumigated and include a certificate)\n"
        },
        "dangerousGoods": {
          "type": "array",
          "description": "A list of `Dangerous Goods`\n",
          "items": {
            "$ref": "#/$defs/DangerousGoods"
          }
        }
      },
      "required": [
        "numberOfPackages",
        "description"
      ]
    },
    "Party": {
      "type": "object",
      "title": "Party",
      "description": "Refers to a company or a legal entity.\n\n**Condition:** Either the `address` or a party `identifyingCode` must be provided in the `Shipping Instructions`.\n",
      "properties": {
        "partyName": {
          "type": "string",
          "pattern": "^\\S(?:.*\\S)?$",
          "maxLength": 70,
          "description": "Name of the party.\n"
        },
        "address": {
          "$ref": "#/$defs/PartyAddress"
        },
        "identifyingCodes": {
          "type": "array",
          "description": "**Condition:** Either the `address` or a party `identifyingCode` must be provided. \n",
          "items": {
            "$ref": "#/$defs/IdentifyingCode"
          }
        },
        "taxLegalReferences": {
          "description": "A list of `Tax References` for a `Party`\n",
          "type": "array",
          "items": {
            "$ref": "#/$defs/TaxLegalReference"
          }
        },
        "partyContactDetails": {
          "type": "array",
          "description": "A list of contact details\n",
          "items": {
            "$ref": "#/$defs/PartyContactDetail"
          }
        },
        "reference": {
          "type": "string",
          "pattern": "^\\S(?:.*\\S)?$",
          "maxLength": 35,
          "description": "A reference linked to the `Party`.\n"
        }
      },
      "required": [
        "partyName"
      ]
    },
    "PartyAddress": {
      "type": "object",
      "title": "Party Address",
      "description": "Address where the party is located. It is an object of the attributes below.\n",
      "properties": {
        "street": {
          "type": "string",
          "description": "The name of the street of the party’s address.",
          "maxLength": 70
        },
        "streetNumber": {
          "type": "string",
          "description": "The number of the street of the party’s address.",
          "maxLength": 50
        },
        "floor": {
          "type": "string",
          "description": "The floor of the party’s street number.\n",
          "pattern": "^\\S(?:.*\\S)?$",
          "maxLength": 50
        },
        "postCode": {
          "type": "string",
          "description": "The post code of the party’s address.",
          "maxLength": 10
        },
        "POBox": {
          "type": "string",
          "maxLength": 20,
          "description": "A numbered box at a post office where a person or business can have mail or parcels delivered."
        },
        "city": {
          "type": "string",
          "description": "The city name of the party’s address.\n",
          "pattern": "^\\S(?:.*\\S)?$",
          "maxLength": 35
        },
        "UNLocationCode": {
          "type": "string",
          "description": "The UN Location code specifying where the carrier booking office is located. The pattern used must be\n- 2 characters for the country code using [ISO 3166-1 alpha-2](https://www.iso.org/obp/ui/#iso:pub:PUB500001:en)\n- 3 characters to code a location within that country. Letters A-Z and numbers from 2-9 can be used\nMore info can be found here: [UN/LOCODE](https://unece.org/trade/cefact/UNLOCODE-Download)\n",
          "pattern": "^[A-Z]{2}[A-Z2-9]{3}$",
          "minLength": 5,
          "maxLength": 5
        },
        "stateRegion": {
          "type": "string",
          "description": "The state/region of the party’s address.",
          "maxLength": 65
        },
        "countryCode": {
          "type": "string",
          "description": "The 2 characters for the country code using [ISO 3166-1 alpha-2](https://www.iso.org/obp/ui/#iso:pub:PUB500001:en)\n",
          "pattern": "^[A-Z]{2}$",
          "minLength": 2,
          "maxLength": 2
        }
      },
      "required": [
        "street",
        "city",
        "countryCode"
      ]
    },
    "PartyContactDetail": {
      "type": "object",
      "title": "Party Contact Detail",
      "description": "The contact details of the person to contact. It is mandatory to provide either `phone` and/or `email` along with the `name`, both can be provided.\n",
      "properties": {
        "name": {
          "type": "string",
          "pattern": "^\\S(?:.*\\S)?$",
          "maxLength": 35,
          "description": "Name of the contact\n"
        }
      },
      "anyOf": [
        {
          "type": "object",
          "title": "Phone required",
          "description": "`Phone` is mandatory to provide\n",
          "properties": {
            "phone": {
              "type": "string",
              "pattern": "^\\S(?:.*\\S)?$",
              "maxLength": 30,
              "description": "Phone number for the contact. Phone **MUST** include an international phone number format as defined in the [ITU-T recommendation E.123](https://www.itu.int/rec/T-REC-E.123/en).\n"
            }
          },
          "required": [
            "phone"
          ]
        },
        {
          "type": "object",
          "title": "Email required",
          "description": "`Email` is mandatory to provide\n",
          "properties": {
            "email": {
              "type": "string",
              "pattern": "^.+@\\S+$",
              "maxLength": 100,
              "description": "`E-mail` address to be used\n"
            }
          },
          "required": [
            "email"
          ]
        }
      ],
      "required": [
        "name"
      ]
    },
    "PlaceOfDelivery": {
      "type": "object",
      "title": "Place of Delivery",
      "description": "An object to capture `Place of Delivery` location specified as: the location where the cargo is handed over to the consignee, or his agent, by the shipping line and where responsibility of the shipping line ceases.\n\n**Condition:** Only when onward transport is done by the carrier\n\nThe location can be specified in **any** of the following ways: `UN Location Code`, `Facility`, `Address` or a `Geo Coordinate`.\n\n**Condition:** It is expected that if a location is specified in multiple ways (e.g. both as an `Address` and as a `Facility`) that both ways point to the same location.\n",
      "properties": {
        "locationName": {
          "type": "string",
          "description": "The name of the location.",
          "pattern": "^\\S(?:.*\\S)?$",
          "maxLength": 100
        },
        "address": {
          "$ref": "#/$defs/Address"
        },
        "facility": {
          "$ref": "#/$defs/Facility"
        },
        "UNLocationCode": {
          "type": "string",
          "pattern": "^[A-Z]{2}[A-Z2-9]{3}$",
          "minLength": 5,
          "maxLength": 5,
          "description": "The UN Location code specifying where the place is located. The pattern used must be\n\n- 2 characters for the country code using [ISO 3166-1 alpha-2](https://www.iso.org/obp/ui/#iso:pub:PUB500001:en)\n- 3 characters to code a location within that country. Letters A-Z and numbers from 2-9 can be used\n\nMore info can be found here: [UN/LOCODE](https://unece.org/trade/cefact/UNLOCODE-Download)\n"
        },
        "geoCoordinate": {
          "$ref": "#/$defs/GeoCoordinate"
        }
      }
    },
    "PlaceOfIssue": {
      "type": "object",
      "title": "Place of Issue",
      "description": "An object to capture where the original Transport Document (`Bill of Lading`) will be issued.\n\n**Condition:** The location can be specified as one of `UN Location Code` or `CountryCode`, but not both.\n",
      "properties": {
        "locationName": {
          "type": "string",
          "description": "The name of the location.",
          "pattern": "^\\S(?:.*\\S)?$",
          "maxLength": 100
        }
      },
      "oneOf": [
        {
          "type": "object",
          "title": "UN Location Code",
          "properties": {
            "UNLocationCode": {
              "type": "string",
              "pattern": "^[A-Z]{2}[A-Z2-9]{3}$",
              "minLength": 5,
              "maxLength": 5,
              "description": "The UN Location code specifying where the place is located. The pattern used must be\n\n- 2 characters for the country code using [ISO 3166-1 alpha-2](https://www.iso.org/obp/ui/#iso:pub:PUB500001:en)\n- 3 characters to code a location within that country. Letters A-Z and numbers from 2-9 can be used\n\nMore info can be found here: [UN/LOCODE](https://unece.org/trade/cefact/UNLOCODE-Download)"
            }
          },
          "required": [
            "UNLocationCode"
          ]
        },
        {
          "type": "object",
          "title": "Country Code",
          "properties": {
            "countryCode": {
              "type": "string",
              "pattern": "^[A-Z]{2}$",
              "minLength": 2,
              "maxLength": 2,
              "description": "The 2 characters for the country code using [ISO 3166-1 alpha-2](https://www.iso.org/obp/ui/#iso:pub:PUB500001:en)\n"
            }
          },
          "required": [
            "countryCode"
          ]
        }
      ]
    },
    "PlaceOfReceipt": {
      "type": "object",
      "title": "Place of Receipt",
      "description": "An object to capture `Place of Receipt` location specified as: the location where the cargo is handed over by the shipper, or his agent, to the shipping line. This indicates the point at which the shipping line takes on responsibility for carriage of the container.\n\n**Condition:** Only when pre-carriage is done by the carrier.\n\nThe location can be specified in **any** of the following ways: `UN Location Code`, `Facility`, `Address` or a `Geo Coordinate`.\n\n**Condition:** It is expected that if a location is specified in multiple ways (e.g. both as an `Address` and as a `Facility`) that both ways point to the same location.\n",
      "properties": {
        "locationName": {
          "type": "string",
          "description": "The name of the location.",
          "pattern": "^\\S(?:.*\\S)?$",
          "maxLength": 100
        },
        "address": {
          "$ref": "#/$defs/Address"
        },
        "facility": {
          "$ref": "#/$defs/Facility"
        },
        "UNLocationCode": {
          "type": "string",
          "pattern": "^[A-Z]{2}[A-Z2-9]{3}$",
          "minLength": 5,
          "maxLength": 5,
          "description": "The UN Location code specifying where the place is located. The pattern used must be\n\n- 2 characters for the country code using [ISO 3166-1 alpha-2](https://www.iso.org/obp/ui/#iso:pub:PUB500001:en)\n- 3 characters to code a location within that country. Letters A-Z and numbers from 2-9 can be used\n\nMore info can be found here: [UN/LOCODE](https://unece.org/trade/cefact/UNLOCODE-Download)\n"
        },
        "geoCoordinate": {
          "$ref": "#/$defs/GeoCoordinate"
        }
      }
    },
    "PortOfDischarge": {
      "type": "object",
      "title": "Port of Discharge",
      "description": "An object to capture `Port of Discharge` location specified as: the location where the cargo is discharged from the last sea-going vessel.\n\nThe location can be specified in **any** of the following ways: `UN Location Code` or `City and Country`.\n\n**Condition:** It is expected that if a location is specified in multiple ways (e.g. both as an `UN Location Code` and as a `City and Country`) that both ways point to the same location.\n",
      "properties": {
        "locationName": {
          "type": "string",
          "description": "The name of the location.",
          "pattern": "^\\S(?:.*\\S)?$",
          "maxLength": 100
        },
        "city": {
          "$ref": "#/$defs/City"
        },
        "UNLocationCode": {
          "type": "string",
          "pattern": "^[A-Z]{2}[A-Z2-9]{3}$",
          "minLength": 5,
          "maxLength": 5,
          "description": "The UN Location code specifying where the place is located. The pattern used must be\n\n- 2 characters for the country code using [ISO 3166-1 alpha-2](https://www.iso.org/obp/ui/#iso:pub:PUB500001:en)\n- 3 characters to code a location within that country. Letters A-Z and numbers from 2-9 can be used\n\nMore info can be found here: [UN/LOCODE](https://unece.org/trade/cefact/UNLOCODE-Download)\n"
        }
      }
    },
    "PortOfLoading": {
      "type": "object",
      "title": "Port of Loading",
      "description": "An object to capture `Port of Loading` location specified as: the location where the cargo is loaded onto a first sea-going vessel for water transportation.\n\nThe location can be specified in **any** of the following ways: `UN Location Code` or `City and Country`.\n\n**Condition:** It is expected that if a location is specified in multiple ways (e.g. both as an `UN Location Code` and as a `City and Country`) that both ways point to the same location.\n",
      "properties": {
        "locationName": {
          "type": "string",
          "description": "The name of the location.",
          "pattern": "^\\S(?:.*\\S)?$",
          "maxLength": 100
        },
        "city": {
          "$ref": "#/$defs/City"
        },
        "UNLocationCode": {
          "type": "string",
          "pattern": "^[A-Z]{2}[A-Z2-9]{3}$",
          "minLength": 5,
          "maxLength": 5,
          "description": "The UN Location code specifying where the place is located. The pattern used must be\n\n- 2 characters for the country code using [ISO 3166-1 alpha-2](https://www.iso.org/obp/ui/#iso:pub:PUB500001:en)\n- 3 characters to code a location within that country. Letters A-Z and numbers from 2-9 can be used\n\nMore info can be found here: [UN/LOCODE](https://unece.org/trade/cefact/UNLOCODE-Download)\n"
        }
      }
    },
    "Reference": {
      "type": "object",
      "title": "Reference",
      "description": "References provided by the shipper or freight forwarder at the time of `Booking` or at the time of providing `Shipping Instructions`. Carriers share it back when providing `Track & Trace` event updates, some are also printed on the B/L. Customers can use these references to track shipments in their internal systems.\n",
      "properties": {
        "type": {
          "type": "string",
          "maxLength": 3,
          "description": "The reference type codes defined by DCSA. Possible values are:\n- `CR` (Customer’s Reference)\n- `AKG` (Vehicle Identification Number)\n"
        },
        "value": {
          "type": "string",
          "maxLength": 35,
          "pattern": "^\\S(?:.*\\S)?$",
          "description": "The value of the reference. \n"
        }
      },
      "required": [
        "type",
        "value"
      ]
    },
    "ReferenceConsignmentItem": {
      "type": "object",
      "title": "Reference (Consignment Item)",
      "description": "References provided by the shipper or freight forwarder at the time of `Booking` or at the time of providing `Shipping Instructions`. Carriers share it back when providing `Track & Trace` event updates, some are also printed on the B/L. Customers can use these references to track shipments in their internal systems.\n",
      "properties": {
        "type": {
          "type": "string",
          "maxLength": 3,
          "description": "The reference type codes defined by DCSA. Possible values are:\n- `CR` (Customer’s Reference)\n- `AKG` (Vehicle Identification Number)\n- `SPO` (Shipper's Purchase Order)\n- `CPO` (Consignee's Purchase Order)\n"
        },
        "values": {
          "type": "array",
          "minItems": 1,
          "description": "List of `referenceValues` for a given `referenceType`.\n",
          "items": {
            "type": "string",
            "maxLength": 35,
            "pattern": "^\\S(?:.*\\S)?$",
            "description": "The value of the reference. \n"
          }
        }
      },
      "required": [
        "type",
        "values"
      ]
    },
    "Seal": {
      "type": "object",
      "title": "Seal",
      "description": "Addresses the seal-related information associated with the shipment equipment. A seal is put on a shipment equipment once it is loaded. This `Seal` is meant to stay on until the shipment equipment reaches its final destination.\n",
      "properties": {
        "number": {
          "type": "string",
          "maxLength": 15,
          "description": "Identifies a seal affixed to the container."
        },
        "source": {
          "type": "string",
          "description": "The source of the seal, namely who has affixed the seal.\n- `CAR` (Carrier)\n- `SHI` (Shipper)\n- `VET` (Veterinary)\n- `CUS` (Customs)\n\n**Condition:** Seal source may be required depending on the type of commodity being shipped.\n",
          "enum": [
            "CAR",
            "SHI",
            "VET",
            "CUS"
          ]
        }
      },
      "required": [
        "number"
      ]
    },
    "Shipper": {
      "type": "object",
      "title": "Shipper",
      "description": "The party by whom or in whose name or on whose behalf a contract of carriage of goods by sea has been concluded with a carrier, or the party by whom or in whose name, or on whose behalf, the goods are actually delivered to the carrier in relation to the contract of carriage by sea.\n\n**Condition:** Either the `address` or a party `identifyingCode` must be provided in the `Shipping Instructions`. If a `displayedAddress` is provided, it must be included in the `Transport Document` instead of the `address`.\n",
      "properties": {
        "partyName": {
          "type": "string",
          "pattern": "^\\S(?:.*\\S)?$",
          "maxLength": 70,
          "description": "Name of the party.\n"
        },
        "typeOfPerson": {
          "type": "string",
          "maxLength": 50,
          "pattern": "^\\S(?:.*\\S)?$",
          "description": "Can be one of the following values as per the Union Customs Code art. 5(4):\n- `NATURAL_PERSON` (A person that is an individual living human being)\n- `LEGAL_PERSON` (person (including a human being and public or private organizations) that can perform legal actions, such as own a property, sue and be sued)\n- `ASSOCIATION_OF_PERSONS` (Not a legal person, but recognised under Union or National law as having the capacity to perform legal acts)\n"
        },
        "address": {
          "$ref": "#/$defs/PartyAddress"
        },
        "displayedAddress": {
          "type": "array",
          "maxItems": 6,
          "description": "The address of the party to be displayed on the `Transport Document`. The displayed address may be used to match the address provided in the `Letter of Credit`.\n\n**Conditions:** If provided:\n  - the displayed address must be included in the `Transport Document`.\n  - for physical BL (`isElectronic=false`), it is only allowed to provide max 2 lines of 35 characters\n  - for electronic BL (`isElectronic=true`), the limit is 6 lines of 35 characters\n  - the order of the items in this array **MUST** be preserved as by the provider of the API.\n",
          "items": {
            "type": "string",
            "maxLength": 35,
            "description": "A single address line\n"
          }
        },
        "identifyingCodes": {
          "type": "array",
          "description": "**Condition:** Either the `address` or a party `identifyingCode` must be provided. \n",
          "items": {
            "$ref": "#/$defs/IdentifyingCode"
          }
        },
        "taxLegalReferences": {
          "description": "A list of `Tax References` for a `Party`\n",
          "type": "array",
          "items": {
            "$ref": "#/$defs/TaxLegalReference"
          }
        },
        "partyContactDetails": {
          "type": "array",
          "description": "A list of contact details\n",
          "items": {
            "$ref": "#/$defs/PartyContactDetail"
          }
        },
        "reference": {
          "type": "string",
          "pattern": "^\\S(?:.*\\S)?$",
          "maxLength": 35,
          "description": "A reference linked to the `Shipper`.\n"
        },
        "purchaseOrderReferences": {
          "type": "array",
          "description": "A list of `Purchase Order Reference`s linked to the `Shipper`.\n",
          "items": {
            "type": "string",
            "pattern": "^\\S(?:.*\\S)?$",
            "maxLength": 35,
            "description": "A purchase order reference linked to the `Shipper`.\n"
          }
        }
      },
      "required": [
        "partyName"
      ]
    },
    "TareWeight": {
      "type": "object",
      "title": "Tare Weight",
      "description": "The weight of an empty container (gross container weight).\n",
      "properties": {
        "value": {
          "type": "number",
          "format": "float",
          "minimum": 0,
          "exclusiveMinimum": true,
          "description": "The weight of an empty container (gross container weight).\n"
        },
        "unit": {
          "type": "string",
          "description": "The unit of measure which can be expressed in imperial or metric terms\n- `KGM` (Kilograms)\n- `LBR` (Pounds)\n",
          "enum": [
            "KGM",
            "LBR"
          ]
        }
      },
      "required": [
        "value",
        "unit"
      ]
    },
    "TaxLegalReference": {
      "type": "object",
      "title": "Tax & Legal Reference",
      "description": "Reference that uniquely identifies a party for tax and/or legal purposes in accordance with the relevant jurisdiction.\n\nA small list of **potential** examples:\n\n| Type  | Country | Description |\n|-------|:-------:|-------------|\n|EORI|NL|Economic Operators Registration and Identification|\n|PAN|IN|Goods and Services Tax Identification Number in India|\n|GSTIN|IN|Goods and Services Tax Identification Number in India|\n|IEC|IN|Importer-Exported Code in India|\n|RUC|EC|Registro Único del Contribuyente in Ecuador|\n|RUC|PE|Registro Único del Contribuyente in Peru|\n|NIF|MG|Numéro d'Identification Fiscal in Madagascar|\n|NIF|DZ|Numéro d'Identification Fiscal in Algeria|\n",
      "properties": {
        "type": {
          "type": "string",
          "pattern": "^\\S(?:.*\\S)?$",
          "maxLength": 50,
          "description": "The reference type code as defined by the relevant tax and/or legal authority.\n"
        },
        "countryCode": {
          "type": "string",
          "pattern": "^[A-Z]{2}$",
          "minLength": 2,
          "maxLength": 2,
          "description": "The 2 characters for the country code using [ISO 3166-1 alpha-2](https://www.iso.org/obp/ui/#iso:pub:PUB500001:en)\n"
        },
        "value": {
          "type": "string",
          "pattern": "^\\S(?:.*\\S)?$",
          "maxLength": 35,
          "description": "The value of the `taxLegalReference`\n"
        }
      },
      "required": [
        "type",
        "countryCode",
        "value"
      ]
    },
    "Transports": {
      "type": "object",
      "title": "Transports",
      "properties": {
        "plannedArrivalDate": {
          "type": "string",
          "format": "date",
          "description": "The planned date of arrival.\n"
        },
        "plannedDepartureDate": {
          "type": "string",
          "format": "date",
          "description": "The planned date of departure.\n"
        },
        "preCarriageBy": {
          "type": "string",
          "maxLength": 50,
          "description": "Mode of transportation for pre-carriage when transport to the port of loading is organized by the carrier. If this attributes is populated, then a Place of Receipt must also be defined. The currently supported values include:\n- `VESSEL` (Vessel)\n- `RAIL` (Rail)\n- `TRUCK` (Truck)\n- `BARGE` (Barge)\n- `MULTIMODAL` (if multiple modes are used)\n"
        },
        "onCarriageBy": {
          "type": "string",
          "maxLength": 50,
          "description": "Mode of transportation for on-carriage when transport from the port of discharge is organized by the carrier. If this attributes is populated, then a Place of Delivery must also be defined. The currently supported values include:\n- `VESSEL` (Vessel)\n- `RAIL` (Rail)\n- `TRUCK` (Truck)\n- `BARGE` (Barge)\n- `MULTIMODAL` (if multiple modes are used)\n"
        },
        "placeOfReceipt": {
          "$ref": "#/$defs/PlaceOfReceipt"
        },
        "portOfLoading": {
          "$ref": "#/$defs/PortOfLoading"
        },
        "portOfDischarge": {
          "$ref": "#/$defs/PortOfDischarge"
        },
        "placeOfDelivery": {
          "$ref": "#/$defs/PlaceOfDelivery"
        },
        "onwardInlandRouting": {
          "$ref": "#/$defs/OnwardInlandRouting"
        },
        "vesselVoyages": {
          "type": "array",
          "minItems": 1,
          "description": "Allow the possibility to include multiple vessels/voyages in the `Transport Document` (e.g. the first sea going vessel and the mother vessel). At least one is mandatory to provide.\n",
          "items": {
            "$ref": "#/$defs/VesselVoyage"
          }
        }
      },
      "required": [
        "plannedArrivalDate",
        "plannedDepartureDate",
        "portOfLoading",
        "portOfDischarge",
        "vesselVoyages"
      ]
    },
    "UtilizedTransportEquipment": {
      "type": "object",
      "title": "Utilized Transport Equipment",
      "description": "Specifies the container (`equipment`), the total `weight`, total `volume`, possible `ActiveReeferSettings`, `seals` and `references`\n",
      "properties": {
        "equipment": {
          "$ref": "#/$defs/Equipment"
        },
        "isShipperOwned": {
          "type": "boolean",
          "description": "Indicates whether the container is shipper owned (SOC).\n"
        },
        "isNonOperatingReefer": {
          "type": "boolean",
          "description": "If the equipment is a Reefer Container then setting this attribute will indicate that the container should be treated as a `DRY` container.\n\n**Condition:** Only applicable if `ISOEquipmentCode` shows a Reefer type.\n"
        },
        "activeReeferSettings": {
          "$ref": "#/$defs/ActiveReeferSettings"
        },
        "shippingMarks": {
          "type": "array",
          "maxItems": 50,
          "description": "A list of the `ShippingMarks` applicable to this `UtilizedTransportEquipment`\n\n**Condition:** The order of the items in this array **MUST** be preserved as by the provider of the API.\n",
          "items": {
            "type": "string",
            "maxLength": 35,
            "description": "The identifying details of a package or the actual markings that appear on the package(s). This information is provided by the customer.\n"
          }
        },
        "seals": {
          "type": "array",
          "minItems": 1,
          "description": "A list of `Seals`\n",
          "items": {
            "$ref": "#/$defs/Seal"
          }
        },
        "references": {
          "type": "array",
          "description": "A list of `References`\n",
          "items": {
            "$ref": "#/$defs/Reference"
          }
        },
        "customsReferences": {
          "type": "array",
          "description": "A list of `Customs references`\n",
          "items": {
            "$ref": "#/$defs/CustomsReference"
          }
        }
      },
      "required": [
        "equipment",
        "isShipperOwned",
        "seals"
      ]
    },
    "VesselVoyage": {
      "type": "object",
      "title": "Vessel/Voyage",
      "description": "Vessel and export voyage",
      "properties": {
        "vesselName": {
          "type": "string",
          "pattern": "^\\S(?:.*\\S)?$",
          "maxLength": 50,
          "description": "The name of the first sea going Vessel on board which the cargo is loaded or intended to be loaded\n"
        },
        "carrierExportVoyageNumber": {
          "type": "string",
          "pattern": "^\\S(?:.*\\S)?$",
          "maxLength": 50,
          "description": "The identifier of an export voyage. The carrier-specific identifier of the export Voyage.\n"
        },
        "universalExportVoyageReference": {
          "type": "string",
          "pattern": "^\\d{2}[0-9A-Z]{2}[NEWSR]$",
          "minLength": 5,
          "maxLength": 5,
          "description": "A global unique voyage reference for the export Voyage, as per DCSA standard, agreed by VSA partners for the voyage. The voyage reference must match the regular expression pattern: `\\d{2}[0-9A-Z]{2}[NEWSR]`\n- `2 digits` for the year\n- `2 alphanumeric characters` for the sequence number of the voyage\n- `1 character` for the direction/haul (`N`orth, `E`ast, `W`est, `S`outh or `R`oundtrip).\n"
        }
      },
      "required": [
        "vesselName",
        "carrierExportVoyageNumber"
      ]
    }
  }
}