{
  "$schema": "http://json-schema.org/draft-07/schema#",
  "$id": "https://raw.githubusercontent.com/api-evangelist/echo-global/main/json-schema/load.json",
  "title": "Load",
  "description": "Schema for an Echo Global Logistics available load (used in Carrier API)",
  "type": "object",
  "required": ["loadId", "equipment", "mode", "stops", "distance", "weight", "specialServices", "rate", "commodity"],
  "properties": {
    "loadId": {
      "type": "string",
      "description": "Echo load identifier",
      "example": "6239230"
    },
    "equipment": {
      "type": "array",
      "description": "Expected equipment types",
      "items": {
        "type": "string"
      }
    },
    "mode": {
      "type": "string",
      "enum": ["tl"],
      "description": "Shipment mode (currently truckload only)"
    },
    "stops": {
      "type": "array",
      "minItems": 2,
      "items": {
        "$ref": "#/definitions/Stop"
      }
    },
    "distance": {
      "type": "object",
      "required": ["value", "units"],
      "properties": {
        "value": {
          "type": "integer",
          "format": "int32",
          "example": 400
        },
        "units": {
          "type": "string",
          "enum": ["mi", "km"],
          "default": "mi"
        }
      }
    },
    "weight": {
      "type": "object",
      "required": ["value", "units"],
      "properties": {
        "value": {
          "type": "integer",
          "format": "int32",
          "example": 4000
        },
        "units": {
          "type": "string",
          "enum": ["lb", "kg"],
          "default": "lb"
        }
      }
    },
    "specialServices": {
      "type": "object",
      "properties": {
        "hazmat": {"type": "boolean", "default": false},
        "dropReceiver": {"type": "boolean", "default": false},
        "dropShipper": {"type": "boolean", "default": false},
        "temp": {"type": "boolean", "default": false},
        "straps": {"type": "boolean", "default": false},
        "loadBar": {"type": "boolean", "default": false},
        "freeze": {"type": "boolean", "default": false},
        "tanker": {"type": "boolean", "default": false},
        "tarps": {"type": "boolean", "default": false},
        "od": {"type": "boolean", "default": false},
        "assist": {"type": "boolean", "default": false},
        "twic": {"type": "boolean", "default": false},
        "team": {"type": "boolean", "default": false}
      }
    },
    "rate": {
      "type": "object",
      "nullable": true,
      "required": ["value", "currency"],
      "properties": {
        "value": {
          "type": "integer",
          "format": "int32",
          "minimum": 0,
          "example": 1000
        },
        "currency": {
          "type": "string",
          "enum": ["USD"],
          "default": "USD"
        }
      }
    },
    "commodity": {
      "type": "array",
      "items": {
        "type": "string"
      },
      "example": ["boxes"]
    }
  },
  "definitions": {
    "Stop": {
      "type": "object",
      "required": ["stopNumber", "stopType", "location", "serviceWindow"],
      "properties": {
        "stopNumber": {
          "type": "integer",
          "format": "int32",
          "example": 1
        },
        "stopType": {
          "type": "string",
          "enum": ["pick", "drop"]
        },
        "location": {
          "type": "object",
          "properties": {
            "city": {"type": "string", "minLength": 2, "example": "Chicago"},
            "stateOrProvince": {"type": "string", "minLength": 2, "example": "IL"},
            "postalCode": {"type": "string", "minLength": 5},
            "country": {"type": "string", "enum": ["USA", "CAN", "MEX"]},
            "zone": {"type": "string", "enum": ["z0","z1","z2","z3","z4","z5","z6","z7","z8","z9","ze","zc","zw","zm"]},
            "coordinate": {
              "type": "object",
              "properties": {
                "lat": {"type": "number", "format": "float"},
                "lon": {"type": "number", "format": "float"}
              }
            }
          }
        },
        "serviceWindow": {
          "type": "object",
          "required": ["start", "end", "timezone"],
          "properties": {
            "start": {"type": "string", "format": "date-time"},
            "end": {"type": "string", "format": "date-time"},
            "timezone": {"type": "string", "nullable": true, "example": "CT"}
          }
        }
      }
    }
  }
}
