{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "$id": "https://raw.githubusercontent.com/api-evangelist/purolator/main/json-schema/purolator-courier-estimate-request-schema.json",
  "title": "CourierEstimateRequest",
  "x-generated": "2026-10-13",
  "x-method": "derived",
  "x-generator": "derive-json-schema.py",
  "x-source": "openapi/purolator-estimate-openapi.yml#/components/schemas/CourierEstimateRequest",
  "allOf": [
    {
      "$ref": "#/$defs/EstimateRequest"
    },
    {
      "type": "object",
      "required": [
        "outboundShipment"
      ],
      "properties": {
        "outboundShipment": {
          "$ref": "#/$defs/OutboundShipmentCourier"
        },
        "returnShipment": {
          "$ref": "#/$defs/ReturnShipment"
        },
        "trackingReferenceInformation": {
          "$ref": "#/$defs/TrackingReferenceInformation"
        }
      }
    }
  ],
  "$defs": {
    "AddressLine": {
      "type": "object",
      "required": [
        "Address"
      ],
      "properties": {
        "Address": {
          "type": "string",
          "maximum": 40,
          "description": "Street address line."
        }
      }
    },
    "BillingInformation": {
      "type": "object",
      "required": [
        "billingAccountNumber"
      ],
      "properties": {
        "billingAccountNumber": {
          "type": "string",
          "maximum": 10,
          "description": "The account number that would be billed for this shipment. Used to associate user-level discounts and other info that contributes to the rate estimate."
        },
        "displayPublishedRates": {
          "type": "boolean",
          "description": "Whether to non-discounted (published) rates. If not present or false, defaults to display account rates",
          "default": false
        }
      }
    },
    "CourierPackageInformation": {
      "allOf": [
        {
          "$ref": "#/$defs/CourierServiceId"
        },
        {
          "$ref": "#/$defs/PackageInformationDateUOMBase"
        },
        {
          "type": "object",
          "required": [
            "totalWeight",
            "totalPackages"
          ],
          "properties": {
            "showAlternativeServicesIndicator": {
              "type": "boolean",
              "default": true,
              "description": "Whether or not to show estimates for alternative services. If not provided, defaults to true"
            },
            "totalWeight": {
              "type": "number",
              "format": "double",
              "multipleOf": 0.01,
              "maximum": 100000,
              "minimum": 0,
              "exclusiveMaximum": true,
              "exclusiveMinimum": true,
              "description": "Total weight of the package in your selected unit of measure (kg or lbs). Total weight is the sum of all piece weights in the shipment. Weight must be greater than 0."
            },
            "totalPackages": {
              "type": "integer",
              "maximum": 100,
              "minimum": 1,
              "description": "Total number of pieces."
            },
            "shipmentOptionsInformation": {
              "type": "array",
              "items": {
                "$ref": "#/$defs/OptionIdValuePair"
              }
            },
            "packageInformation": {
              "type": "array",
              "items": {
                "$ref": "#/$defs/Piece"
              }
            }
          }
        }
      ]
    },
    "CourierServiceId": {
      "type": "object",
      "required": [
        "serviceId"
      ],
      "properties": {
        "serviceId": {
          "type": "string",
          "maximum": 128,
          "description": "The service name being used. Case-insensitive",
          "enum": [
            "PurolatorExpress",
            "PurolatorExpress10:30AM",
            "PurolatorExpress12PM",
            "PurolatorExpress9AM",
            "PurolatorExpressEvening",
            "PurolatorExpressInternational",
            "PurolatorExpressInternational10:30AM",
            "PurolatorExpressInternational12:00",
            "PurolatorExpressInternational9AM",
            "PurolatorExpressU.S.",
            "PurolatorExpressU.S.10:30AM",
            "PurolatorExpressU.S.12:00",
            "PurolatorExpressU.S.9AM",
            "PurolatorExpressBox",
            "PurolatorExpressBox10:30AM",
            "PurolatorExpressBox12PM",
            "PurolatorExpressBox9AM",
            "PurolatorExpressBoxEvening",
            "PurolatorExpressBoxInternational",
            "PurolatorExpressBoxU.S.",
            "PurolatorExpressInternationalBox10:30AM",
            "PurolatorExpressInternationalBox12:00",
            "PurolatorExpressInternationalBox9AM",
            "PurolatorExpressU.S.Box10:30AM",
            "PurolatorExpressU.S.Box12:00",
            "PurolatorExpressU.S.Box9AM",
            "PurolatorExpressEnvelope",
            "PurolatorExpressEnvelope10:30AM",
            "PurolatorExpressEnvelope12PM",
            "PurolatorExpressEnvelope9AM",
            "PurolatorExpressEnvelopeEvening",
            "PurolatorExpressEnvelopeInternational",
            "PurolatorExpressEnvelopeU.S.",
            "PurolatorExpressInternationalEnvelope10:30AM",
            "PurolatorExpressInternationalEnvelope12:00",
            "PurolatorExpressInternationalEnvelope9AM",
            "PurolatorExpressU.S.Envelope10:30AM",
            "PurolatorExpressU.S.Envelope12:00",
            "PurolatorExpressU.S.Envelope9AM",
            "PurolatorExpressInternationalPack10:30AM",
            "PurolatorExpressInternationalPack12:00",
            "PurolatorExpressInternationalPack9AM",
            "PurolatorExpressPack",
            "PurolatorExpressPack10:30AM",
            "PurolatorExpressPack12PM",
            "PurolatorExpressPack9AM",
            "PurolatorExpressPackEvening",
            "PurolatorExpressPackInternational",
            "PurolatorExpressPackU.S.",
            "PurolatorExpressU.S.Pack10:30AM",
            "PurolatorExpressU.S.Pack12:00",
            "PurolatorExpressU.S.Pack9AM",
            "PurolatorGround",
            "PurolatorGround10:30AM",
            "PurolatorGround9AM",
            "PurolatorGroundEvening",
            "PurolatorGroundU.S.",
            "PurolatorQuickShip"
          ]
        }
      }
    },
    "EstimateRequest": {
      "type": "object",
      "required": [
        "lineOfBusiness"
      ],
      "properties": {
        "lineOfBusiness": {
          "$ref": "#/$defs/LineOfBusiness"
        },
        "shipmentDate": {
          "$ref": "#/$defs/ShipmentDate"
        }
      }
    },
    "LineOfBusiness": {
      "type": "string",
      "enum": [
        "Freight",
        "Courier"
      ],
      "description": "Line of business which the estimate is for. Case-insensitive."
    },
    "OptionIdValuePair": {
      "type": "object",
      "properties": {
        "optionId": {
          "type": "string",
          "enum": [
            "AdultSignatureRequired",
            "ChainOfSignature",
            "DangerousGoods",
            "DangerousGoodsClass",
            "DangerousGoodsMode",
            "DeclaredValue",
            "ExpressCheque",
            "HealthCare",
            "HoldForPickup",
            "OriginSignatureNotRequired",
            "ResidentialSignatureDomestic",
            "ResidentialSignatureIntl",
            "SaturdayDelivery",
            "SaturdayPickup"
          ],
          "description": "",
          "maximum": 30
        },
        "optionIdValue": {
          "type": "string",
          "enum": [
            "true",
            "false",
            "Air",
            "Ground",
            "FullyRegulated",
            "UN3373",
            "UN1845",
            "LessThan500kgExempt",
            "LimitedQuantities"
          ],
          "description": "Conditionally required, depending on the value of optionId.",
          "maximum": 30
        }
      }
    },
    "OutboundShipmentBase": {
      "type": "object",
      "required": [
        "senderInformation",
        "receiverInformation",
        "billingInformation"
      ],
      "properties": {
        "billingInformation": {
          "$ref": "#/$defs/BillingInformation"
        },
        "senderInformation": {
          "$ref": "#/$defs/SenderAddress"
        },
        "receiverInformation": {
          "$ref": "#/$defs/ReceiverAddress"
        }
      }
    },
    "OutboundShipmentCourier": {
      "allOf": [
        {
          "$ref": "#/$defs/OutboundShipmentBase"
        },
        {
          "type": "object",
          "required": [
            "shipmentInformation"
          ],
          "properties": {
            "shipmentInformation": {
              "$ref": "#/$defs/CourierPackageInformation"
            },
            "usOriginInformation": {
              "$ref": "#/$defs/USOriginInformation"
            }
          }
        }
      ]
    },
    "PackageInformationDateUOMBase": {
      "type": "object",
      "properties": {
        "unitOfMeasurement": {
          "type": "string",
          "enum": [
            "Metric",
            "Imperial"
          ],
          "default": "Imperial",
          "description": "The unit of measurement used for package weight and lengths. Imperial uses pounds and inches, while metric uses kilograms and centimeters. If not provided, defaults to imperial."
        }
      }
    },
    "Piece": {
      "type": "object",
      "required": [
        "packageWeight"
      ],
      "properties": {
        "packageWeight": {
          "type": "number",
          "format": "double",
          "multipleOf": 0.01,
          "maximum": 100000,
          "minimum": 0,
          "exclusiveMaximum": true,
          "exclusiveMinimum": true,
          "description": "Weight of the piece in your selected unit of measure (kg or lbs). Piece weight maximum varies by selected service. Weight must be greater than 0."
        },
        "packageLength": {
          "type": "number",
          "format": "double",
          "multipleOf": 0.01,
          "maximum": 10000,
          "minimum": 0,
          "exclusiveMaximum": true,
          "exclusiveMinimum": true,
          "description": "Length of the piece in your selected unit of measure (in or cm). Width and height must be provided if this field is provided. Length must be greater than 0."
        },
        "packageWidth": {
          "type": "number",
          "format": "double",
          "multipleOf": 0.01,
          "maximum": 10000,
          "minimum": 0,
          "exclusiveMaximum": true,
          "exclusiveMinimum": true,
          "description": "Width of the piece in your selected unit of measure (in or cm). Length and height must be provided if this field is provided. Width must be greater than 0."
        },
        "packageHeight": {
          "type": "number",
          "format": "double",
          "multipleOf": 0.01,
          "maximum": 10000,
          "minimum": 0,
          "exclusiveMaximum": true,
          "exclusiveMinimum": true,
          "description": "Height of the piece in your selected unit of measure (in or cm). Width and length must be provided if this field is provided. Height must be greater than 0."
        },
        "packageOptionsInformation": {
          "type": "array",
          "items": {
            "$ref": "#/$defs/PieceOptionIdValuePair"
          }
        }
      }
    },
    "PieceOptionIdValuePair": {
      "type": "object",
      "properties": {
        "optionId": {
          "type": "string",
          "enum": [
            "SpecialHandling",
            "SpecialHandlingType"
          ],
          "description": "",
          "maximum": 30
        },
        "optionIdValue": {
          "type": "string",
          "enum": [
            "true",
            "false",
            "ResidentialAreaHeavyweight",
            "FlatPackage",
            "AdditionalHandling",
            "LargePackage",
            "Oversized"
          ],
          "description": "Conditionally required, depending on the value of optionId.",
          "maximum": 30
        }
      }
    },
    "ReceiverAddress": {
      "type": "object",
      "required": [
        "city",
        "country",
        "postalZipCode"
      ],
      "properties": {
        "companyName": {
          "type": "string",
          "maximum": 30,
          "description": "Company Name information."
        },
        "streetAddress": {
          "type": "array",
          "maximum": 3,
          "items": {
            "$ref": "#/$defs/AddressLine"
          },
          "description": "Maximum 3 addresses allowed. Each address has a max length of 40 characters"
        },
        "city": {
          "type": "string",
          "maximum": 40,
          "description": "City"
        },
        "provinceStateCode": {
          "type": "string",
          "maximum": 40,
          "description": "2 character code for the Province/State, required for Canadian and US addresses. Note that currently only Canadian addresses are accepted for the sender. Valid Province Codes for Canada: AB, BC, MB, NB, NL, NS, NT, NU, ON, PE, QC, SK, YT. Valid State Codes for US: AK, AL, AR, AZ, CA, CO, CT, DC, DE, FL, GA, HI, IA, ID, IL, IN, KS, KY, LA, MA, MD, ME, MI, MN, MO, MS, MT, NC, ND, NE, NH, NJ, NM, NV, NY, OH, OK, OR, PA, RI, SC, SD, TN, TX, UT, VA, VT, WA, WI, WV, WY."
        },
        "country": {
          "type": "string",
          "maximum": 2,
          "enum": [
            "AD",
            "AE",
            "AF",
            "AG",
            "AI",
            "AL",
            "AM",
            "AN",
            "AO",
            "AQ",
            "AR",
            "AS",
            "AT",
            "AU",
            "AW",
            "AX",
            "AZ",
            "BA",
            "BB",
            "BD",
            "BE",
            "BF",
            "BG",
            "BH",
            "BI",
            "BJ",
            "BL",
            "BM",
            "BN",
            "BO",
            "BR",
            "BS",
            "BT",
            "BV",
            "BW",
            "BY",
            "BZ",
            "CA",
            "CC",
            "CD",
            "CF",
            "CG",
            "CH",
            "CI",
            "CK",
            "CL",
            "CM",
            "CN",
            "CO",
            "CR",
            "CU",
            "CV",
            "CX",
            "CY",
            "CZ",
            "DE",
            "DJ",
            "DK",
            "DM",
            "DO",
            "DZ",
            "EC",
            "EE",
            "EG",
            "EH",
            "ER",
            "ES",
            "ET",
            "EU",
            "FI",
            "FJ",
            "FK",
            "FM",
            "FO",
            "FR",
            "GA",
            "GB",
            "GD",
            "GE",
            "GF",
            "GG",
            "GH",
            "GI",
            "GL",
            "GM",
            "GN",
            "GP",
            "GQ",
            "GR",
            "GS",
            "GT",
            "GU",
            "GW",
            "GY",
            "HK",
            "HM",
            "HN",
            "HR",
            "HT",
            "HU",
            "IC",
            "ID",
            "IE",
            "IL",
            "IM",
            "IN",
            "IO",
            "IQ",
            "IR",
            "IS",
            "IT",
            "JE",
            "JM",
            "JO",
            "JP",
            "KE",
            "KG",
            "KH",
            "KI",
            "KM",
            "KN",
            "KP",
            "KR",
            "KW",
            "KY",
            "KZ",
            "LA",
            "LB",
            "LC",
            "LI",
            "LK",
            "LR",
            "LS",
            "LT",
            "LU",
            "LV",
            "LY",
            "MA",
            "MC",
            "MD",
            "ME",
            "MG",
            "MH",
            "MK",
            "ML",
            "MM",
            "MN",
            "MO",
            "MP",
            "MQ",
            "MR",
            "MS",
            "MT",
            "MU",
            "MV",
            "MW",
            "MX",
            "MY",
            "MZ",
            "NA",
            "NC",
            "NE",
            "NF",
            "NG",
            "NI",
            "NL",
            false,
            "NP",
            "NR",
            "NT",
            "NU",
            "NZ",
            "OM",
            "OR",
            "PA",
            "PE",
            "PF",
            "PG",
            "PH",
            "PK",
            "PL",
            "PM",
            "PN",
            "PR",
            "PS",
            "PT",
            "PW",
            "PY",
            "QA",
            "RE",
            "RO",
            "RS",
            "RU",
            "RW",
            "SA",
            "SB",
            "SC",
            "SD",
            "SE",
            "SG",
            "SH",
            "SI",
            "SJ",
            "SK",
            "SL",
            "SM",
            "SN",
            "SO",
            "SR",
            "ST",
            "SV",
            "SY",
            "SZ",
            "TC",
            "TD",
            "TF",
            "TG",
            "TH",
            "TJ",
            "TK",
            "TL",
            "TM",
            "TN",
            "TO",
            "TP",
            "TR",
            "TT",
            "TV",
            "TW",
            "TZ",
            "UA",
            "UG",
            "UM",
            "UN",
            "US",
            "UY",
            "UZ",
            "VA",
            "VC",
            "VE",
            "VG",
            "VI",
            "VN",
            "VU",
            "WF",
            "WS",
            "XB",
            "XC",
            "XE",
            "XM",
            "XN",
            "XS",
            "XY",
            "YE",
            "YT",
            "ZA",
            "ZM",
            "ZW",
            "ZZ"
          ],
          "description": "2-character CountryCode. Valid codes are: AD, AE, AF, AG, AI, AL, AM, AN, AO, AQ, AR, AS, AT, AU, AW, AX, AZ, BA, BB, BD, BE, BF, BG, BH, BI, BJ, BL, BM, BN, BO, BR, BS, BT, BV, BW, BY, BZ, CA, CC, CD, CF, CG, CH, CI, CK, CL, CM, CN, CO, CR, CU, CV, CX, CY, CZ, DE, DJ, DK, DM, DO, DZ, EC, EE, EG, EH, ER, ES, ET, EU, FI, FJ, FK, FM, FO, FR, GA, GB, GD, GE, GF, GG, GH, GI, GL, GM, GN, GP, GQ, GR, GS, GT, GU, GW, GY, HK, HM, HN, HR, HT, HU, IC, ID, IE, IL, IM, IN, IO, IQ, IR, IS, IT, JE, JM, JO, JP, KE, KG, KH, KI, KM, KN, KP, KR, KW, KY, KZ, LA, LB, LC, LI, LK, LR, LS, LT, LU, LV, LY, MA, MC, MD, ME, MG, MH, MK, ML, MM, MN, MO, MP, MQ, MR, MS, MT, MU, MV, MW, MX, MY, MZ, NA, NC, NE, NF, NG, NI, NL, NO, NP, NR, NT, NU, NZ, OM, OR, PA, PE, PF, PG, PH, PK, PL, PM, PN, PR, PS, PT, PW, PY, QA, RE, RO, RS, RU, RW, SA, SB, SC, SD, SE, SG, SH, SI, SJ, SK, SL, SM, SN, SO, SR, ST, SV, SY, SZ, TC, TD, TF, TG, TH, TJ, TK, TL, TM, TN, TO, TP, TR, TT, TV, TW, TZ, UA, UG, UM, UN, US, UY, UZ, VA, VC, VE, VG, VI, VN, VU, WF, WS, XB, XC, XE, XM, XN, XS, XY, YE, YT, ZA, ZM, ZW, ZZ."
        },
        "postalZipCode": {
          "type": "string",
          "maximum": 10,
          "description": "Canadian Postal Code or USA Zip Code or Intl Postal Code. Only Canadian and US postal codes are required."
        }
      }
    },
    "ReturnCourierPackageInformation": {
      "allOf": [
        {
          "$ref": "#/$defs/ReturnCourierServiceId"
        },
        {
          "$ref": "#/$defs/PackageInformationDateUOMBase"
        },
        {
          "type": "object",
          "required": [
            "totalWeight",
            "totalPackages"
          ],
          "properties": {
            "showAlternativeServicesIndicator": {
              "type": "boolean",
              "default": true,
              "description": "Whether or not to show estimates for alternative services. If not provided, defaults to true"
            },
            "totalWeight": {
              "type": "number",
              "format": "double",
              "multipleOf": 0.01,
              "maximum": 100000,
              "minimum": 0,
              "exclusiveMaximum": true,
              "exclusiveMinimum": true,
              "description": "Total weight of the package in your selected unit of measure (kg or lbs). Total weight is the sum of all piece weights in the shipment. Weight must be greater than 0."
            },
            "totalPackages": {
              "type": "integer",
              "description": "Total number of pieces. Must be 1 for outbound return shipments."
            },
            "shipmentOptionsInformation": {
              "type": "array",
              "items": {
                "$ref": "#/$defs/ReturnOptionIdValuePair"
              }
            },
            "packageInformation": {
              "type": "array",
              "items": {
                "$ref": "#/$defs/Piece"
              }
            }
          }
        }
      ]
    },
    "ReturnCourierServiceId": {
      "type": "object",
      "required": [
        "serviceId"
      ],
      "properties": {
        "serviceId": {
          "type": "string",
          "maximum": 128,
          "description": "The service name being used. Case-insensitive",
          "enum": [
            "PurolatorExpress",
            "PurolatorExpress10:30AM",
            "PurolatorExpress12PM",
            "PurolatorExpress9AM",
            "PurolatorExpressEvening",
            "PurolatorExpressInternational",
            "PurolatorExpressInternational10:30AM",
            "PurolatorExpressInternational12:00",
            "PurolatorExpressInternational9AM",
            "PurolatorExpressU.S.",
            "PurolatorExpressU.S.10:30AM",
            "PurolatorExpressU.S.12:00",
            "PurolatorExpressU.S.9AM",
            "PurolatorExpressBox",
            "PurolatorExpressBox10:30AM",
            "PurolatorExpressBox12PM",
            "PurolatorExpressBox9AM",
            "PurolatorExpressBoxEvening",
            "PurolatorExpressBoxInternational",
            "PurolatorExpressBoxU.S.",
            "PurolatorExpressInternationalBox10:30AM",
            "PurolatorExpressInternationalBox12:00",
            "PurolatorExpressInternationalBox9AM",
            "PurolatorExpressU.S.Box10:30AM",
            "PurolatorExpressU.S.Box12:00",
            "PurolatorExpressU.S.Box9AM",
            "PurolatorExpressEnvelope",
            "PurolatorExpressEnvelope10:30AM",
            "PurolatorExpressEnvelope12PM",
            "PurolatorExpressEnvelope9AM",
            "PurolatorExpressEnvelopeEvening",
            "PurolatorExpressEnvelopeInternational",
            "PurolatorExpressEnvelopeU.S.",
            "PurolatorExpressInternationalEnvelope10:30AM",
            "PurolatorExpressInternationalEnvelope12:00",
            "PurolatorExpressInternationalEnvelope9AM",
            "PurolatorExpressU.S.Envelope10:30AM",
            "PurolatorExpressU.S.Envelope12:00",
            "PurolatorExpressU.S.Envelope9AM",
            "PurolatorExpressInternationalPack10:30AM",
            "PurolatorExpressInternationalPack12:00",
            "PurolatorExpressInternationalPack9AM",
            "PurolatorExpressPack",
            "PurolatorExpressPack10:30AM",
            "PurolatorExpressPack12PM",
            "PurolatorExpressPack9AM",
            "PurolatorExpressPackEvening",
            "PurolatorExpressPackInternational",
            "PurolatorExpressPackU.S.",
            "PurolatorExpressU.S.Pack10:30AM",
            "PurolatorExpressU.S.Pack12:00",
            "PurolatorExpressU.S.Pack9AM",
            "PurolatorGround",
            "PurolatorGround10:30AM",
            "PurolatorGround9AM",
            "PurolatorGroundEvening",
            "PurolatorGroundU.S.",
            "PurolatorQuickShip"
          ]
        }
      }
    },
    "ReturnOptionIdValuePair": {
      "type": "object",
      "properties": {
        "optionId": {
          "type": "string",
          "enum": [
            "AdultSignatureRequired",
            "ChainOfSignature",
            "DangerousGoods",
            "DangerousGoodsClass",
            "DangerousGoodsMode",
            "DeclaredValue",
            "ExpressCheque",
            "HealthCare",
            "HoldForPickup",
            "OriginSignatureNotRequired",
            "ResidentialSignatureDomestic",
            "ResidentialSignatureIntl",
            "SaturdayDelivery",
            "SaturdayPickup"
          ],
          "description": "",
          "maximum": 30
        },
        "optionIdValue": {
          "type": "string",
          "enum": [
            "true",
            "false",
            "Air",
            "Ground",
            "FullyRegulated",
            "UN3373",
            "UN1845",
            "LessThan500kgExempt",
            "LimitedQuantities"
          ],
          "description": "Conditionally required, depending on the value of optionId.",
          "maximum": 30
        }
      }
    },
    "ReturnShipment": {
      "type": "object",
      "required": [
        "numberOfReturnShipments",
        "billingInformation",
        "senderInformation",
        "receiverInformation",
        "shipmentInformation"
      ],
      "properties": {
        "numberOfReturnShipments": {
          "type": "integer",
          "minimum": 1,
          "maximum": 100,
          "description": "Number of Return Shipments to generate for current Shipment. Min Value is 1 and Max value is 100. Mandatory if Shipment Type is Return"
        },
        "billingInformation": {
          "$ref": "#/$defs/BillingInformation"
        },
        "senderInformation": {
          "$ref": "#/$defs/SenderAddress"
        },
        "receiverInformation": {
          "$ref": "#/$defs/ReceiverAddress"
        },
        "shipmentInformation": {
          "$ref": "#/$defs/ReturnCourierPackageInformation"
        }
      }
    },
    "SenderAddress": {
      "type": "object",
      "required": [
        "city",
        "provinceStateCode",
        "country",
        "postalZipCode"
      ],
      "properties": {
        "companyName": {
          "type": "string",
          "maximum": 30,
          "description": "Company Name information."
        },
        "streetAddress": {
          "type": "array",
          "maximum": 3,
          "minimum": 1,
          "items": {
            "$ref": "#/$defs/AddressLine"
          },
          "description": "Maximum 3 addresses allowed. Each address has a max length of 40 characters"
        },
        "city": {
          "type": "string",
          "maximum": 40,
          "description": "City"
        },
        "provinceStateCode": {
          "type": "string",
          "maximum": 40,
          "enum": [
            "AB",
            "BC",
            "MB",
            "NB",
            "NL",
            "NS",
            "NT",
            "NU",
            true,
            "PE",
            "QC",
            "SK",
            "YT"
          ],
          "description": "2 character code for the Province/State, required for Canadian and US addresses. Note that currently only Canadian addresses are accepted for the sender. Valid Province Codes for Canada: AB, BC, MB, NB, NL, NS, NT, NU, ON, PE, QC, SK, YT."
        },
        "country": {
          "type": "string",
          "maximum": 2,
          "enum": [
            "CA"
          ],
          "description": "2-character CountryCode. Note that currently only Canadian addresses are accepted for the sender."
        },
        "postalZipCode": {
          "type": "string",
          "maximum": 10,
          "description": "Canadian Postal Code or USA Zip Code or Intl Postal Code. Note that currently only Canadian addresses are accepted for the sender."
        }
      }
    },
    "ShipmentDate": {
      "type": "string",
      "format": "date",
      "default": "Today's Date",
      "description": "Date of shipment. Up to 10 days in advance. Date format: YYYY-MM-DD. If not present, default to today's date."
    },
    "TrackingReference": {
      "type": "string",
      "maximum": 35,
      "description": "Tracking reference information"
    },
    "TrackingReferenceInformation": {
      "type": "object",
      "properties": {
        "reference1": {
          "$ref": "#/$defs/TrackingReference"
        },
        "reference2": {
          "$ref": "#/$defs/TrackingReference"
        },
        "reference3": {
          "$ref": "#/$defs/TrackingReference"
        },
        "reference4": {
          "$ref": "#/$defs/TrackingReference"
        },
        "reference5": {
          "$ref": "#/$defs/TrackingReference"
        }
      }
    },
    "USOriginInformation": {
      "type": "object",
      "description": "US origin address information. Required when the shipment originates from the United States. Only US country code is accepted.",
      "required": [
        "city",
        "provinceStateCode",
        "country",
        "postalZipCode"
      ],
      "properties": {
        "companyName": {
          "type": "string",
          "maximum": 30,
          "description": "Company Name information."
        },
        "streetAddress": {
          "type": "array",
          "maximum": 3,
          "minimum": 1,
          "items": {
            "$ref": "#/$defs/AddressLine"
          },
          "description": "Maximum 3 addresses allowed. Each address has a max length of 40 characters."
        },
        "city": {
          "type": "string",
          "maximum": 40,
          "description": "City"
        },
        "provinceStateCode": {
          "type": "string",
          "maximum": 40,
          "enum": [
            "AK",
            "AL",
            "AR",
            "AZ",
            "CA",
            "CO",
            "CT",
            "DC",
            "DE",
            "FL",
            "GA",
            "HI",
            "IA",
            "ID",
            "IL",
            "IN",
            "KS",
            "KY",
            "LA",
            "MA",
            "MD",
            "ME",
            "MI",
            "MN",
            "MO",
            "MS",
            "MT",
            "NC",
            "ND",
            "NE",
            "NH",
            "NJ",
            "NM",
            "NV",
            "NY",
            "OH",
            "OK",
            "OR",
            "PA",
            "RI",
            "SC",
            "SD",
            "TN",
            "TX",
            "UT",
            "VA",
            "VT",
            "WA",
            "WI",
            "WV",
            "WY"
          ],
          "description": "2 character code for the US State. Valid State Codes: AK, AL, AR, AZ, CA, CO, CT, DC, DE, FL, GA, HI, IA, ID, IL, IN, KS, KY, LA, MA, MD, ME, MI, MN, MO, MS, MT, NC, ND, NE, NH, NJ, NM, NV, NY, OH, OK, OR, PA, RI, SC, SD, TN, TX, UT, VA, VT, WA, WI, WV, WY."
        },
        "country": {
          "type": "string",
          "maximum": 2,
          "enum": [
            "US"
          ],
          "description": "2-character CountryCode. Only US is accepted for US origin information."
        },
        "postalZipCode": {
          "type": "string",
          "maximum": 10,
          "description": "USA Zip Code."
        }
      }
    }
  }
}