Purolator · Schema

CourierEstimateRequest

CompanyShippingLogisticsCouriersFreight

Properties

Name Type Description
lineOfBusiness object
shipmentDate object
outboundShipment object
returnShipment object
trackingReferenceInformation object
View JSON Schema on GitHub

JSON Schema

purolator-courier-estimate-request-schema.json Raw ↑
{
  "$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."
        }
      }
    }
  }
}

Work with this as data

Every JSON Schema here is available over the APIs.io API and to AI agents over MCP.

MCP server

One button, every client — Claude, Cursor, VS Code and the rest.

https://apis.io/mcp

Tools for schemas

4 MCP tools reach this
  • find_json_schemasBrowse and filter every JSON Schema in the catalog.
  • apis_io_searchSTART HERE — APIs, providers and tags for one query, each with its total.
  • resolveTurn a domain, URL or GitHub org into the provider it belongs to.
  • find_cohortsEvery scored population of providers in the catalog.
All 92 tools →

Call it yourself

curl for this page
This JSON Schema
curl "https://apis.io/api/v1/json-schemas/purolator-courier-estimate-request"
All schemas
curl "https://apis.io/api/v1/json-schemas?limit=25"

Calls without X-API-Key need no key. Calls with it need a paid plan — get a key.

Get an API key

Free tier, no form to fill in. Signing in shares your email address with us — we store it to create your key and to recognise you if you sign in with another provider. See our Privacy Policy and Terms.

A second provider on the same verified email joins the account you already have.