{ "$schema": "http://json-schema.org/draft-07/schema#", "$id": "https://raw.githubusercontent.com/api-evangelist/echo-global/main/json-schema/shipment.json", "title": "Shipment", "description": "Schema for an Echo Global Logistics shipment (LTL, TL, or PL)", "type": "object", "required": ["origin", "destination", "pickupDate", "mode"], "properties": { "shipmentId": { "type": "string", "description": "Echo-assigned shipment identifier" }, "proNumber": { "type": "string", "description": "PRO number assigned to the shipment" }, "mode": { "type": "string", "description": "Shipment mode", "enum": ["LTL", "TL", "PL"] }, "status": { "type": "string", "description": "Current shipment status" }, "pickupDate": { "type": "string", "format": "date", "description": "Requested or confirmed pickup date (YYYY-MM-DD)" }, "origin": { "$ref": "#/definitions/Location" }, "destination": { "$ref": "#/definitions/Location" }, "commodities": { "type": "array", "minItems": 1, "items": { "$ref": "#/definitions/Commodity" } }, "accessorials": { "type": "array", "description": "List of accessorial service codes", "items": { "type": "string" } }, "referenceNumbers": { "type": "array", "items": { "$ref": "#/definitions/ReferenceNumber" } } }, "definitions": { "Location": { "type": "object", "description": "Shipment location (origin or destination)", "required": ["companyName", "address1", "city", "stateOrProvince", "postalCode", "country", "locationType"], "properties": { "companyName": { "type": "string", "maxLength": 60 }, "address1": { "type": "string", "maxLength": 60 }, "address2": { "type": "string", "maxLength": 60 }, "city": { "type": "string", "minLength": 2, "maxLength": 60 }, "stateOrProvince": { "type": "string", "minLength": 2, "maxLength": 2, "description": "Two-letter state or province code" }, "postalCode": { "type": "string", "minLength": 5 }, "country": { "type": "string", "enum": ["US", "CA", "MX"] }, "locationType": { "type": "string", "enum": ["BUSINESS", "CONSTRUCTIONSITE", "RESIDENTIAL", "TRADESHOW"], "description": "Type of location for accessorial assessment" }, "contact": { "$ref": "#/definitions/Contact" } } }, "Contact": { "type": "object", "properties": { "name": { "type": "string" }, "phone": { "type": "string" }, "email": { "type": "string", "format": "email" } } }, "Commodity": { "type": "object", "description": "Freight commodity line item", "required": ["description", "pieces", "weight"], "properties": { "description": { "type": "string", "maxLength": 100 }, "pieces": { "type": "integer", "minimum": 1 }, "packageType": { "type": "string", "description": "Type of packaging (e.g., PLT, BOX, CRT)" }, "weight": { "type": "number", "minimum": 0.1 }, "weightUnit": { "type": "string", "enum": ["LB", "KG"], "default": "LB" }, "length": { "type": "number", "description": "Length in inches" }, "width": { "type": "number", "description": "Width in inches" }, "height": { "type": "number", "description": "Height in inches" }, "freightClass": { "type": "string", "description": "NMFC freight class", "enum": ["50", "55", "60", "65", "70", "77.5", "85", "92.5", "100", "110", "125", "150", "175", "200", "250", "300", "400", "500"] }, "nmfcNumber": { "type": "string", "description": "NMFC item number" }, "isHazmat": { "type": "boolean", "default": false } } }, "ReferenceNumber": { "type": "object", "required": ["type", "value"], "properties": { "type": { "type": "string", "enum": ["purchase_order", "bill_of_lading", "order", "customer_reference", "pro_number"] }, "value": { "type": "string" } } } } }