{
  "openapi": "3.0.3",
  "info": {
    "title": "WARP API Documentation",
    "description": "[Get The Postman Collection](https://api.postman.com/collections/43153707-51d60bdf-d837-474b-a3d4-4e6522ad81a8?access_key=PMAT-01JPH7GR5Y1Q3JAT2J8DHJEK4T) <br/><br/>\n*Please read the Authentication instructions carefully to ensure you can integrate our API with the correct authentication header!*\n\n\n**Authentication** <br/>\n  \n  An API key can be requested from a member of the WARP Engineering team. Once the API key has been delivered to the client, it will need to be included as a **“apikey”** in the  header of each API request. <br/>\n\n  API keys should be safely and securely stored by the client. Please notify a member of the WARP Engineering team immediately if the API key is compromised. The compromised API key will be revoked and a new one will generated in the event that an API key is compromised. <br/><br/>\n  **Headers:** <br/>\n  \n  **apikey** *\\<replace with api key>* <br/><br/>\n  **Endpoint-specific errors** <br/>\n  \n  Example: Status Code: 400 (Bad Request)\n  ```\n  {\n    \"code\": \"required_field_missing\",\n    \"message\": \"pickupDate is required!\"\n  }\n  ```\n  The response body for any API response status code of 4xx/5xx is formatted as follows: \n  | Http Status         | Code    | Description |\n  | --------     | ------- | ----------------|\n  | 500   | internal_server_error  | An unknown error has occurred. |\n  | 400   | required_field_missing  | Required Fields are Missing   | \n  | 400   | invalid_field_data  | Invalid field data |\n  | 401   | request_unauthorized  | The **apikey** header is missing or invalid. Message: \"Invalid authorization. Requires API key.\" |\n  | 403   | *(no code)*  | The customer account is suspended. The response carries `message` only, without `code`: *\"Your account has been suspended, please contact Warp for assistance.\"* |\n  | 429   | rate_limit_exceeded  | More requests sent than the time rate limit defined. Only the quoting endpoints are rate limited (POST /freights/quote, /freights/freight-quote, /freights/quote/multi-stops), per API key, per UTC hour and per UTC day; the `Retry-After` header holds the number of seconds until the window resets. |\n",
    "contact": {
      "email": "api-support@wearewarp.com",
      "name": "WARP API Support",
      "url": "https://developer.wearewarp.com/docs/freight/"
    },
    "version": "1.0.0",
    "license": {
      "name": "Proprietary",
      "url": "https://wearewarp.com/terms"
    },
    "x-logo": {
      "url": "https://i.imgur.com/0tTxUmj.png",
      "altText": "WARP"
    }
  },
  "externalDocs": {
    "description": "Find out more about WARP",
    "url": "https://wearewarp.com"
  },
  "servers": [
    {
      "url": "https://stg.wearewarp.com/api/v1"
    },
    {
      "url": "https://gw.wearewarp.com/api/v1"
    }
  ],
  "tags": [
    {
      "name": "Freight",
      "description": "Everything about your Freight"
    },
    {
      "name": "Multi-Stops",
      "description": "FTL Multi-Stops quote and booking with intermediate transit points"
    }
  ],
  "paths": {
    "/freights/quote": {
      "post": {
        "tags": [
          "Freight"
        ],
        "summary": "Get quote for your shipment",
        "description": "\nReturns the **single cheapest rate** for the shipment. To compare every available option (carriers, service levels, parcel services) use POST /freights/freight-quote instead.\n\n**Rate limit:** this endpoint counts towards the quoting rate limit of your API key (per UTC hour and per UTC day). Above the limit the API answers **429** `rate_limit_exceeded` and the `Retry-After` header tells how many seconds remain until the window resets.\n\n**Request parameters**\n\n| Name                       | Type                                | Required/Optional | Description                                                                                                            |\n|----------------------------|-------------------------------------|-------------------|------------------------------------------------------------------------------------------------------------------------|\n| pickupDate                 | String                              | Required          | The earliest date when a carrier can pickup the shipment, in **YYYY-MM-DD** format. Date is in the timezone of the pickup stop. |\n| pickupInfo                 | Object                              | Required          | The details of the pick up stop.                                                                                       |\n| pickupInfo.zipcode         | String                              | Required          | The postal code of the pick up stop. The pick up stop is where the shipment will be picked up.                         |\n| pickupInfo.country         | String                              | Optional          | The country code (ISO 3166-1 alpha-2) of the pick up stop. Supported: \"US\", \"CA\". Defaults to \"US\" if not provided.   |\n| deliveryInfo               | Object                              | Required          | The details of the delivery stop.                                                                                      |\n| deliveryInfo.zipcode       | String                              | Required          | The postal code of the delivery stop. The delivery stop is where the shipment will be delivered.                       |\n| deliveryInfo.country       | String                              | Optional          | The country code (ISO 3166-1 alpha-2) of the delivery stop. Supported: \"US\", \"CA\". Defaults to \"US\" if not provided.  |\n| pickupServices             | Array<**PickupService**>            | Optional          | Any pickup services required to service the shipment in the pickup location.                                           |\n| deliveryServices           | Array<**DeliveryService**>          | Optional          | Any delivery services required to service the shipment in the delivery location.                                       |\n| additionalServices         | Array<**AdditionalService**>        | Optional          | Any additional services required to service the shipment.                                                              |\n| listItems                  | Array<**Item**>                     | Required          | The list of commodities being shipped.                                                                                 |\n| shipmentType               | String (\"LTL\", \"FTL\" or \"PARCEL\")   | Optional          | The type of shipment. Defaults to \"LTL\" when not provided. PARCEL returns a single FedEx rate (use POST /freights/freight-quote to compare every parcel service level); for PARCEL the items may be sent as `listItems[]` (or `items[]`) and each package must respect the FedEx limits (see **PARCEL limits** below). |\n| vehicleType                | VehicleType                         | Optional          | The vehicle. If not provided, the system will automatically select the best vehicle based on the items. Ignored for PARCEL. |\n| insuranceInfo              | Object                              | Optional          | Provide to receive an insurance quote alongside the freight quote. If either field below is missing or invalid, the insurance block is silently skipped and the freight quote is still returned. |\n| insuranceInfo.commodity    | String                              | Required when insuranceInfo is provided | A description of the commodity being shipped.                                                            |\n| insuranceInfo.insuredValue | Number                              | Required when insuranceInfo is provided | The declared value of the goods to be insured (in USD).                                                  |\n\n\n<br /> \n**Item** schema:\n\n| Name                  | Type            | Required/Optional | Description                                                                           |\n|-----------------------|-----------------|-------------------|---------------------------------------------------------------------------------------|\n| name                  | String          | Optional          | The name of the shipment item.                                                        |\n| height                | Number          | Required          | The height of the shipment item.                                                      |\n| length                | Number          | Required          | The length of the shipment item.                                                      |\n| width                 | Number          | Required          | The width of the shipment item.                                                       |\n| sizeUnit              | String          | Required          | The unit for the length, height, width. One of \"IN\" (inches) or \"FT\" (feets).         |\n| quantity              | Number          | Required          | The quantity of this particular shipment item.                                        |\n| totalWeight           | Number          | Required          | Total weight of all packages composing this line item                                                |\n| weightUnit            | String          | Required          | The unit for the weight. One of \"lbs\" (pounds) or \"kgs\" (kilograms).                  |\n| packaging             | String          | Optional          | Packaging unit of the line item (e.g. \"Pallet\"). Defaults to \"Pallet\".               |\n| temperature_limit     | Object          | Optional          | **Do not send.** Temperature-controlled (reefer) freight is not supported yet: any non-zero min/max is rejected with 400 `Reefer Shipment is not supported yet!`. |\n| temperature_limit.min | Number          | Optional          | The minimum temperature, if applicable (see above).                                   |\n| temperature_limit.max | Number          | Optional          | The maximum temperature, if applicable (see above).                                   |\n| stackable             | Boolean         | Optional          | stackable = True if the shipment item can be stacked on the trailer, False otherwise. |\n| notes                 | String          | Optional          | any notes.                                                                            |\n| freightClass          | String          | Optional          | NMFC freight class of the line item (e.g. \"70\").                                      |\n| barcodes              | Array<*String*> | Optional          | The barcodes of the shipment items.                                                   |\n\n<br /> \n**PARCEL limits** (checked per package, after converting to inches and pounds): weight per package (`totalWeight` / `quantity`) <= 150 lbs, longest side <= 108 in, length + girth (longest side + 2 x (the other two sides)) <= 165 in. Length, width, height, weight and quantity must all be greater than 0, otherwise the request is rejected with 400 `invalid_field_data`.\n\n<br /> \n**Response notes**\n\n- `quote_id` is the value to pass as `quoteId` to POST /freights/booking, before `expiration_time_utc` (epoch seconds). The booking payload must match this request exactly (zipcodes, every item's dimensions/weight/quantity, and the service lists), otherwise the booking is rejected. For PARCEL quotes send the items in `IN` and `lbs` on both the quote and the booking: the quote stores parcel items converted to inches/pounds and the booking compares the raw values.\n- `transit_time` is in **days**. `transit_time_without_team` (days, nullable) is the transit time when the load is driven by a single driver instead of a team.\n- `shipmentType` echoes the type that was priced: LTL, FTL or PARCEL.\n- `charges`: the TOTAL row equals `price.amount`; each SERVICE_OPTION row (the `code` may also be the carrier-specific accessorial code) is an accessorial and the TRANSIT row is the base freight, so the non-TOTAL rows sum to the TOTAL row.\n- `insurance` is only present when `insuranceInfo` was sent. When the insurance quote fails the block is `{ \"insuranceQuoteId\": null, \"errorMessage\": \"...\" }` and the freight quote is still returned.\n",
        "operationId": "quote",
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/QuoteBody"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "successful creation",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/QuoteResult"
                }
              }
            }
          },
          "400": {
            "description": "Bad Request - the request payload is missing fields or contains invalid data.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                },
                "examples": {
                  "required_field_missing": {
                    "summary": "Required fields are missing",
                    "value": {
                      "code": "required_field_missing",
                      "message": "pickupDate is required!"
                    }
                  },
                  "invalid_field_data": {
                    "summary": "Invalid field data",
                    "value": {
                      "code": "invalid_field_data",
                      "message": "weightUnit must be one of lbs, kgs"
                    }
                  }
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized - the apikey header is missing or does not match any active API key.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                },
                "examples": {
                  "request_unauthorized": {
                    "summary": "Missing or invalid API key",
                    "value": {
                      "code": "request_unauthorized",
                      "message": "Invalid authorization. Requires API key."
                    }
                  }
                }
              }
            }
          },
          "403": {
            "description": "Forbidden - the customer account is suspended. The body carries `message` only, without `code`.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                },
                "examples": {
                  "account_suspended": {
                    "summary": "Customer account suspended (no code field)",
                    "value": {
                      "message": "Your account has been suspended, please contact Warp for assistance."
                    }
                  }
                }
              }
            }
          },
          "429": {
            "description": "Too Many Requests - the quoting rate limit of the API key was exceeded (only POST /freights/quote, /freights/freight-quote and /freights/quote/multi-stops are rate limited; limits apply per UTC hour and per UTC day). The `Retry-After` header holds the number of seconds until the window resets.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                },
                "examples": {
                  "rate_limit_exceeded": {
                    "summary": "Rate limit exceeded",
                    "value": {
                      "code": "rate_limit_exceeded",
                      "message": "You have reached your WARP quoting API rate limit of 200 requests per hour (UTC). Your quota resets in 1380 seconds (see the Retry-After response header). If your integration requires a higher limit, please contact your WARP account manager or email support@wearewarp.com with your expected request volume."
                    }
                  }
                }
              }
            }
          },
          "500": {
            "description": "Internal Server Error - an unknown error has occurred.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                },
                "examples": {
                  "internal_server_error": {
                    "summary": "Internal server error",
                    "value": {
                      "code": "internal_server_error",
                      "message": "An unknown error has occurred."
                    }
                  }
                }
              }
            }
          }
        },
        "security": [
          {
            "api_key": []
          }
        ]
      }
    },
    "/freights/booking": {
      "post": {
        "tags": [
          "Freight"
        ],
        "summary": "book a shipment",
        "description": "\n**Request parameters**\n| Name               | Type                                | Required/Optional | Description                                                                                                                                                                                                                          |\n|--------------------|-------------------------------------|-------------------|--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|\n| quoteId            | String                              | Required unless WARP has enabled booking without a quote for your account | The `quote_id` returned by a previous call to POST /freights/quote. The quote must not be expired and must not have been used by an earlier booking. The booking must match the quote **exactly**: pickup/delivery zipcodes, every item's height, length, width, sizeUnit, totalWeight, weightUnit and quantity, and the pickup/delivery/additional service lists - otherwise the request is rejected with 400 `invalid_field_data` (e.g. `Pickup Zipcode 90001 does not match with quoting request 90058.`). For PARCEL quotes send the items in `IN` and `lbs` on both the quote and the booking. |\n| shipmentType       | String (\"LTL\", \"FTL\" or \"PARCEL\")   | Optional          | Default is \"LTL\". Ignored when `quoteId` is provided: the shipment type of the quote is used.                                                                                                                                       |\n| pickupInfo         | Object <**StopInfo**>               | Required          | The details of the pick up stop.                                                                                                                                                                                                     |\n| deliveryInfo       | Object <**StopInfo**>               | Required          | The details of the delivery stop.                                                                                                                                                                                                    |\n| listItems          | Array<**Item**>                     | Required          | The list of commodities being shipped. Same **Item** schema as POST /freights/quote; `height` must be <= 108 and `temperature_limit` is accepted here (stored on the shipment).                                                    |\n| pickupServices     | Array<**PickupService**>            | Optional          | Any pickup services required to service the shipment in the pickup location.                                                                                                                                                         |\n| deliveryServices   | Array<**DeliveryService**>          | Optional          | Any delivery services required to service the shipment in the delivery location.                                                                                                                                                     |\n| additionalServices | Array<**AdditionalService**>        | Optional          | Any additional services required to service the shipment.                                                                                                                                                                            |\n| dedicatedLane      | String                              | Optional          | Only relevant for accounts that WARP has configured for dedicated-lane booking (the value is the lane code provided by WARP). Dedicated lanes are set up by WARP for the account - please contact the Warp team.                                                                                                                                                                                 |\n| vehicleType        | VehicleType                         | Optional          | The vehicle. If not provided, the system will automatically select the best vehicle based on the items.                                                                                                                              |\n| refNum             | String                              | Optional          | An optional external reference assigned by the customer when creating the shipment. This identifier helps link the shipment in this platform with records maintained in other systems such as order management, warehouse, transportation, or accounting systems. |\n| insuranceQuoteId   | String                              | Optional          | The insuranceQuoteId returned in the insurance block of POST /freights/quote. Provide it to purchase insurance for this shipment.                                                                                                    |\n\n<br /> \n**StopInfo** schema:\n| Name                 | Type                | Required/Optional | Description                                                                                                       |\n|----------------------|---------------------|-------------------|-------------------------------------------------------------------------------------------------------------------|\n| locationName         | String              | Optional          | Location Name/Shipper Name/Consignee Name.                                                                        |\n| contactName          | String              | Optional          | The pickup contact name.                                                                                          |\n| contactPhone         | String              | Required          | The pickup contact phone.                                                                                         |\n| phoneExtension       | String              | Optional          | The contact phone extension.                                                                                      |\n| contactEmail         | String              | Optional          | The pickup contact email.                                                                                         |\n| address              | Object<**Address**> | Required          | Pickup Address information                                                                                        |\n| requiresAppointment  | Boolean             | Optional          | **true** if this stop requires appointment,                                                                       |\n| appointmentInfo      | Object              | Optional          | The range of times for which this stop is scheduled. Provide it when requiresAppointment is true.                 |\n| appointmentInfo.from | String              | Optional          | The start time of the appointment window (ISO 8601 format).                                                       |\n| appointmentInfo.to   | String              | Optional          | The end time of the appointment window (ISO 8601 format).                                                         |\n| windowTime           | Object              | Required for pickupInfo, optional for deliveryInfo | The window time. `from` must not be later than `to`.                                         |\n| windowTime.from      | String              | Required when windowTime is provided | Timestamp at which stop window starts (ISO 8601 format).                                               |\n| windowTime.to        | String              | Required when windowTime is provided | Timestamp at which stop window ends (ISO 8601 format).                                                 |\n| instructions         | String              | Optional          | Instructions to follow at stop                                                                                    |\n| refNum               | String              | Optional          | Shipper-defined reference codes to facilitate the stop.                                                           |\n\n<br /> \n**Address** schema:\n| Name    | Type   | Required/Optional | Description            |\n|---------|--------|-------------------|------------------------|\n| street2 | String | Optional          | Line 2 of the address. |\n| street  | String | Required          | Line 1 of the address. |\n| city    | String | Required          | City of the address.   |\n| state   | String | Required          | State of the address.  |\n| zipcode | String | Required          | Postal code.           |\n\n<br /> \n**Response parameters**\n| Name             | Type   | Description                                                                                                                                                  |\n|------------------|--------|--------------------------------------------------------------------------------------------------------------------------------------------------------------|\n| message          | String | \"Success\" when the booking is fully completed, otherwise the payment required message (see **Payment required** below).                                       |\n| trackingNumber   | String | Identifier to track the shipment with POST /freights/tracking. Currently this is the shipment code (e.g. `S-00524-2635`), i.e. the same value as shipmentNumber. |\n| orderNumber      | String | The display number (code) of the order, e.g. `P-01723-2449`.                                                                                                |\n| orderId          | String | The ID of the created order.                                                                                                                                  |\n| shipmentId       | String | The ID of the created shipment.                                                                                                                               |\n| shipmentNumber   | String | The display number (code) of the shipment, e.g. `S-00524-2635`.                                                                                             |\n| refNum           | String | The unique reference numbers of the pickup and delivery stops, comma separated (e.g. `PO-001, DO-001`).                                                     |\n| insuranceStatus  | String | Only present when insuranceQuoteId was provided. \"booked\" if the insurance was booked successfully, \"failed\" if it could not be booked.                        |\n| paymentLink      | String | Only present when the customer balance is not enough to cover this booking. Open this link to add funds and complete the payment.                              |\n| payment          | Object | Only present when the booking was paid with the saved card (see **Pay by saved card** below): `{ method: \"card\", amount_charged, card_fee, last4 }`.          |\n\n<br /> \n**Payment required** <br />\n\nIf the customer balance is not enough to cover this booking, the order is still created but it is put on hold: the shipment is not processed until the payment is completed. In that case the response returns **paymentLink** together with the message *\"Your booking has been created successfully. Please add funds to your balance to complete payment and continue with the shipment.\"*\n\nAlways check for **paymentLink** in the response - when it is present, open the link to add funds and complete the payment.\n\n<br /> \n**Pay by saved card** <br />\n\nIf an admin of your organization turned on *Pay by card for API bookings* in the customer portal (Settings > API Access), a booking that the balance cannot cover is charged to the selected saved card instead: the amount charged is the booking total plus the card processing fee, and the response includes **payment**. If the card cannot be charged, no order is created and the API returns:\n\n| HTTP | code                     | Meaning                                                                 |\n|------|--------------------------|-------------------------------------------------------------------------|\n| 402  | CHARGE_FAILED            | The card was declined. Update the card in the customer portal and retry. |\n| 402  | PAYMENT_ACTION_REQUIRED  | The card requires authentication (3D Secure) and cannot be charged automatically. |\n| 409  | BOOKING_IN_PROGRESS      | Another booking request for the same quote is still being processed.  |\n| 400  | CARD_INSURANCE_NOT_SUPPORTED | insuranceQuoteId cannot be used on a booking paid by saved card.   |\n\n",
        "operationId": "booking",
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/BookingShipment"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "successful operation",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/BookingSuccess"
                }
              }
            }
          },
          "400": {
            "description": "Bad Request - the request payload is missing fields or contains invalid data.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                },
                "examples": {
                  "required_field_missing": {
                    "summary": "Required fields are missing",
                    "value": {
                      "code": "required_field_missing",
                      "message": "pickupDate is required!"
                    }
                  },
                  "invalid_field_data": {
                    "summary": "Invalid field data",
                    "value": {
                      "code": "invalid_field_data",
                      "message": "weightUnit must be one of lbs, kgs"
                    }
                  }
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized - the apikey header is missing or does not match any active API key.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                },
                "examples": {
                  "request_unauthorized": {
                    "summary": "Missing or invalid API key",
                    "value": {
                      "code": "request_unauthorized",
                      "message": "Invalid authorization. Requires API key."
                    }
                  }
                }
              }
            }
          },
          "403": {
            "description": "Forbidden - the customer account is suspended. The body carries `message` only, without `code`.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                },
                "examples": {
                  "account_suspended": {
                    "summary": "Customer account suspended (no code field)",
                    "value": {
                      "message": "Your account has been suspended, please contact Warp for assistance."
                    }
                  }
                }
              }
            }
          },
          "429": {
            "description": "Too Many Requests - the quoting rate limit of the API key was exceeded (only POST /freights/quote, /freights/freight-quote and /freights/quote/multi-stops are rate limited; limits apply per UTC hour and per UTC day). The `Retry-After` header holds the number of seconds until the window resets.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                },
                "examples": {
                  "rate_limit_exceeded": {
                    "summary": "Rate limit exceeded",
                    "value": {
                      "code": "rate_limit_exceeded",
                      "message": "You have reached your WARP quoting API rate limit of 200 requests per hour (UTC). Your quota resets in 1380 seconds (see the Retry-After response header). If your integration requires a higher limit, please contact your WARP account manager or email support@wearewarp.com with your expected request volume."
                    }
                  }
                }
              }
            }
          },
          "500": {
            "description": "Internal Server Error - an unknown error has occurred.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                },
                "examples": {
                  "internal_server_error": {
                    "summary": "Internal server error",
                    "value": {
                      "code": "internal_server_error",
                      "message": "An unknown error has occurred."
                    }
                  }
                }
              }
            }
          }
        },
        "security": [
          {
            "api_key": []
          }
        ]
      }
    },
    "/freights/tracking": {
      "post": {
        "tags": [
          "Freight"
        ],
        "summary": "tracking shipments",
        "description": "\nReturns the latest status and the last known driver location of one or more shipments.\n\n**Request parameters**\n| Name            | Type          | Required/Optional | Description                                                                                                                                  |\n|-----------------|---------------|-------------------|----------------------------------------------------------------------------------------------------------------------------------------------|\n| trackingNumbers | Array<String> | Required          | The identifiers to look up. Each value can be a shipment tracking number, a shipment number (code, e.g. `S-00524-2635`) or an order number (code, e.g. `P-01723-2449`). Unknown values are simply omitted from the response. At most 50 values per request. |\n\n<br /> \n**Response parameters** (one element per matched shipment)\n| Name                  | Type   | Description                                                                                       |\n|-----------------------|--------|---------------------------------------------------------------------------------------------------|\n| trackingNumber        | String | The value from the request that matched this shipment.                                            |\n| orderId               | String | The ID of the order.                                                                              |\n| orderNumber           | String | The display number (code) of the order.                                                           |\n| shipmentId            | String | The ID of the shipment.                                                                           |\n| shipmentNumber        | String | The display number (code) of the shipment.                                                        |\n| statusInfo.status     | String | Current shipment status (see the table below).                                                    |\n| statusInfo.lastUpdated| String | ISO 8601 timestamp of the last status change (`null` when unknown).                              |\n| location              | Object | Last known driver location - `null` when the shipment is not on a route yet or no GPS ping exists. |\n| location.latitude     | Number |                                                                                                   |\n| location.longitude    | Number |                                                                                                   |\n| location.lastUpdated  | String | ISO 8601 timestamp of the GPS ping (`null` when unknown).                                         |\n\n<br /> \n **Shipment status**\n| Value                 | Description                                                                        |\n|-----------------------|------------------------------------------------------------------------------------|\n| needCarrier           | First status when creating a shipment - Need to assign carrier.                    |\n| booked                | When the carrier is assigned to the shipment.                                      |\n| dispatched            | When the driver/vehicle has started for pickup location.                           |\n| arrivedAtPickup       | When the driver/vehicle has arrived at pickup location.                            |\n| pickupSuccessful      | When the order is loaded in vehicle.                                               |\n| pickupFailed          | When Pickup task is Failed.                                                        |\n| inRouteToDropoff      | When the driver/vehicle has started for dropoff location.                          |\n| arrivedAtDropoff      | When the driver/vehicle has arrived at dropoff location.                           |\n| dropoffSuccessful     | When the driver/vehicle has delivered the order successfully.                      |\n| dropoffFailed         | When Dropoff task is “Failed”.                                                     |\n| complete              | When the order is completed.                                                       |\n| returnInitiated       | when return task is created.                                                       |\n| inRouteToReturn       | When the driver/vehicle has started for return location.                           |\n| arrivedAtReturn       | When the driver/vehicle has arrived at return location.                            |\n| returned              | When the driver/vehicle has returned the order successfully.                       |\n| canceled              | When the order is canceled.                                                        |\n| inRouteToWareHouse    | When order is in route to the warehouse (In the case of using crossdock warehouse) |\n| arrivedAtWareHouse    | When order is arrived at the warehouse (In the case of using crossdock warehouse)  |\n| departedFromWarehouse | When order has left the warehouse (In the case of using crossdock warehouse)       |\n| lost                  | When the shipment was reported lost.                                               |\n| issue                 | When an issue was raised on the shipment and it is under review.                   |\n| removed               | When the shipment was removed from its order.                                      |\n| disposed              | When the shipment was disposed of.                                                 |\n",
        "operationId": "tracking",
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/TrackingShipmentQuery"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "successful operation",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/TrackingShipmentSuccess"
                }
              }
            }
          },
          "400": {
            "description": "Bad Request - the request payload is missing fields or contains invalid data.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                },
                "examples": {
                  "required_field_missing": {
                    "summary": "Required fields are missing",
                    "value": {
                      "code": "required_field_missing",
                      "message": "pickupDate is required!"
                    }
                  },
                  "invalid_field_data": {
                    "summary": "Invalid field data",
                    "value": {
                      "code": "invalid_field_data",
                      "message": "weightUnit must be one of lbs, kgs"
                    }
                  }
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized - the apikey header is missing or does not match any active API key.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                },
                "examples": {
                  "request_unauthorized": {
                    "summary": "Missing or invalid API key",
                    "value": {
                      "code": "request_unauthorized",
                      "message": "Invalid authorization. Requires API key."
                    }
                  }
                }
              }
            }
          },
          "403": {
            "description": "Forbidden - the customer account is suspended. The body carries `message` only, without `code`.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                },
                "examples": {
                  "account_suspended": {
                    "summary": "Customer account suspended (no code field)",
                    "value": {
                      "message": "Your account has been suspended, please contact Warp for assistance."
                    }
                  }
                }
              }
            }
          },
          "429": {
            "description": "Too Many Requests - the quoting rate limit of the API key was exceeded (only POST /freights/quote, /freights/freight-quote and /freights/quote/multi-stops are rate limited; limits apply per UTC hour and per UTC day). The `Retry-After` header holds the number of seconds until the window resets.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                },
                "examples": {
                  "rate_limit_exceeded": {
                    "summary": "Rate limit exceeded",
                    "value": {
                      "code": "rate_limit_exceeded",
                      "message": "You have reached your WARP quoting API rate limit of 200 requests per hour (UTC). Your quota resets in 1380 seconds (see the Retry-After response header). If your integration requires a higher limit, please contact your WARP account manager or email support@wearewarp.com with your expected request volume."
                    }
                  }
                }
              }
            }
          },
          "500": {
            "description": "Internal Server Error - an unknown error has occurred.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                },
                "examples": {
                  "internal_server_error": {
                    "summary": "Internal server error",
                    "value": {
                      "code": "internal_server_error",
                      "message": "An unknown error has occurred."
                    }
                  }
                }
              }
            }
          }
        },
        "security": [
          {
            "api_key": []
          }
        ]
      }
    },
    "/freights/shipments": {
      "get": {
        "tags": [
          "Freight"
        ],
        "summary": "get shipments",
        "description": "",
        "operationId": "get-shipments",
        "parameters": [
          {
            "name": "page",
            "in": "query",
            "description": "(Optional) Page number, starting from 1. Default 1.",
            "required": false,
            "explode": true,
            "schema": {
              "type": "number",
              "default": 1
            }
          },
          {
            "name": "pageSize",
            "in": "query",
            "description": "(Optional) Page size (minimum 1). Default 10. Values below 1 are rejected with 400 invalid_field_data.",
            "required": false,
            "explode": true,
            "schema": {
              "type": "number",
              "default": 10
            }
          },
          {
            "name": "orderNumber",
            "in": "query",
            "description": "(Optional) Order number - accepts the numeric Warp Id or the order code (e.g. P-01723-2449).",
            "required": false,
            "explode": true,
            "schema": {
              "type": "string",
              "example": "123456"
            }
          },
          {
            "name": "orderId",
            "in": "query",
            "description": "(Optional) Id of the order. The order code (e.g. P-01723-2449) is accepted as well.",
            "required": false,
            "explode": true,
            "schema": {
              "type": "string",
              "example": "01H3W439G5J5Y282KQFQTAQGTD"
            }
          },
          {
            "name": "shipmentNumber",
            "in": "query",
            "description": "(Optional) Shipment number - accepts the numeric Warp Id or the shipment code (e.g. S-00524-2635).",
            "required": false,
            "explode": true,
            "schema": {
              "type": "string",
              "example": "123457"
            }
          },
          {
            "name": "shipmentId",
            "in": "query",
            "description": "(Optional) Id of the shipment. The shipment code (e.g. S-00524-2635) is accepted as well.",
            "required": false,
            "explode": true,
            "schema": {
              "type": "string",
              "example": "01H3W51F7FEC42MFZAXJQTG4CY"
            }
          },
          {
            "name": "refNumber",
            "in": "query",
            "description": "(Optional) Reference number of a stop (matches the refNums of the pickup/delivery stops).",
            "required": false,
            "explode": true,
            "schema": {
              "type": "string",
              "example": "PO-123456"
            }
          },
          {
            "name": "createDateStart",
            "in": "query",
            "description": "(Optional) Returns shipments created on or after the specified ISO 8601 date-time (inclusive).",
            "required": false,
            "explode": true,
            "schema": {
              "type": "string",
              "example": "2023-06-28T20:47:33.892Z"
            }
          },
          {
            "name": "createDateEnd",
            "in": "query",
            "description": "(Optional) Returns shipments created on or before the specified ISO 8601 date-time (inclusive).",
            "required": false,
            "explode": true,
            "schema": {
              "type": "string",
              "example": "2023-06-28T20:47:33.892Z"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "successful operation",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/GetShipmentsSuccess"
                }
              }
            }
          },
          "400": {
            "description": "Bad Request - the request payload is missing fields or contains invalid data.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                },
                "examples": {
                  "required_field_missing": {
                    "summary": "Required fields are missing",
                    "value": {
                      "code": "required_field_missing",
                      "message": "pickupDate is required!"
                    }
                  },
                  "invalid_field_data": {
                    "summary": "Invalid field data",
                    "value": {
                      "code": "invalid_field_data",
                      "message": "weightUnit must be one of lbs, kgs"
                    }
                  }
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized - the apikey header is missing or does not match any active API key.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                },
                "examples": {
                  "request_unauthorized": {
                    "summary": "Missing or invalid API key",
                    "value": {
                      "code": "request_unauthorized",
                      "message": "Invalid authorization. Requires API key."
                    }
                  }
                }
              }
            }
          },
          "403": {
            "description": "Forbidden - the customer account is suspended. The body carries `message` only, without `code`.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                },
                "examples": {
                  "account_suspended": {
                    "summary": "Customer account suspended (no code field)",
                    "value": {
                      "message": "Your account has been suspended, please contact Warp for assistance."
                    }
                  }
                }
              }
            }
          },
          "429": {
            "description": "Too Many Requests - the quoting rate limit of the API key was exceeded (only POST /freights/quote, /freights/freight-quote and /freights/quote/multi-stops are rate limited; limits apply per UTC hour and per UTC day). The `Retry-After` header holds the number of seconds until the window resets.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                },
                "examples": {
                  "rate_limit_exceeded": {
                    "summary": "Rate limit exceeded",
                    "value": {
                      "code": "rate_limit_exceeded",
                      "message": "You have reached your WARP quoting API rate limit of 200 requests per hour (UTC). Your quota resets in 1380 seconds (see the Retry-After response header). If your integration requires a higher limit, please contact your WARP account manager or email support@wearewarp.com with your expected request volume."
                    }
                  }
                }
              }
            }
          },
          "500": {
            "description": "Internal Server Error - an unknown error has occurred.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                },
                "examples": {
                  "internal_server_error": {
                    "summary": "Internal server error",
                    "value": {
                      "code": "internal_server_error",
                      "message": "An unknown error has occurred."
                    }
                  }
                }
              }
            }
          }
        },
        "security": [
          {
            "api_key": []
          }
        ]
      }
    },
    "/freights/events/{shipmentId}": {
      "get": {
        "tags": [
          "Freight"
        ],
        "summary": "get events",
        "description": "\nThe list mirrors the timeline on the public tracking page of the shipment (same rows and titles), oldest first.\n\n**Event names**\n| Value                                  | Description                                                                              |\n|----------------------------------------|------------------------------------------------------------------------------------------|\n| needCarrier                            | Shipment was created (\"Order received\") - need to assign carrier.                        |\n| booked                                 | Carrier was assigned to the shipment (\"Order proceeded\").                                |\n| dispatched                             | The driver/vehicle has started for pickup location.                                      |\n| arrivedAtPickup                        | The driver/vehicle has arrived at pickup location.                                       |\n| pickupSuccessful                       | The shipment was loaded in the vehicle.                                                  |\n| pickupFailed                           | Pickup task failed.                                                                      |\n| inRouteToDropoff                       | The driver/vehicle has started for dropoff location (out for delivery).                  |\n| arrivedAtDropoff                       | The driver/vehicle has arrived at dropoff location.                                      |\n| dropoffSuccessful                      | The shipment was delivered successfully.                                                 |\n| dropoffFailed                          | Dropoff task failed.                                                                     |\n| complete                               | The shipment is completed (delivered or disposed).                                       |\n| returnInitiated                        | Return task was created.                                                                 |\n| inRouteToReturn                        | The driver/vehicle has started for return location.                                      |\n| arrivedAtReturn                        | The driver/vehicle has arrived at return location.                                       |\n| returned                               | The shipment was returned successfully.                                                  |\n| canceled                               | The shipment was canceled.                                                               |\n| inRouteToWareHouse                     | The shipment is in route to a warehouse (cross-dock).                                    |\n| arrivedAtWareHouse                     | The shipment arrived at a warehouse (cross-dock).                                        |\n| departedFromWarehouse                  | The shipment departed from a warehouse (cross-dock).                                     |\n| inTransit                              | In transit between stops / cross-dock facilities.                                        |\n| receivedAtFacility                     | Received at a cross-dock facility.                                                       |\n| departedFacility                       | Departed a cross-dock facility (titled \"Out for delivery\" when it is the last one before the final dropoff). |\n| failedAtFacility                       | Processing at a cross-dock facility failed.                                              |\n| requireAppointmentAtPickup             | The pickup location requires an appointment.                                             |\n| requireAppointmentAtDelivery           | The delivery location requires an appointment.                                           |\n| updateAppointmentTimeAtPickup          | The pickup appointment info was updated (see details.appointmentInfo).                   |\n| updateAppointmentTimeAtDelivery        | The delivery appointment info was updated (see details.appointmentInfo).                 |\n| appointmentConfirmationSentAtPickup    | Pickup appointment confirmation was sent.                                                |\n| appointmentConfirmationSentAtDelivery  | Delivery appointment confirmation was sent.                                              |\n| appointmentCanceledAtPickup            | Pickup appointment was canceled.                                                         |\n| appointmentCanceledAtDelivery          | Delivery appointment was canceled.                                                       |\n| appointmentCancellationSentAtPickup    | Pickup appointment cancellation notice was sent.                                         |\n| appointmentCancellationSentAtDelivery  | Delivery appointment cancellation notice was sent.                                       |\n| appointmentRequestUnansweredAtPickup   | Pickup appointment request got no answer.                                                |\n| appointmentRequestUnansweredAtDelivery | Delivery appointment request got no answer.                                              |\n| appointmentRequestSendFailedAtPickup   | Pickup appointment request could not be sent.                                            |\n| appointmentRequestSendFailedAtDelivery | Delivery appointment request could not be sent.                                          |\n",
        "operationId": "get-events",
        "parameters": [
          {
            "name": "shipmentId",
            "in": "path",
            "description": "Id of the shipment. The shipment code (e.g. S-00524-2635) is accepted as well.",
            "required": true,
            "explode": true,
            "schema": {
              "type": "string",
              "example": "01H3W51F7FEC42MFZAXJQTG4CY"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "successful operation",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/GetEventsSuccess"
                }
              }
            }
          },
          "400": {
            "description": "Bad Request - the request payload is missing fields or contains invalid data.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                },
                "examples": {
                  "required_field_missing": {
                    "summary": "Required fields are missing",
                    "value": {
                      "code": "required_field_missing",
                      "message": "pickupDate is required!"
                    }
                  },
                  "invalid_field_data": {
                    "summary": "Invalid field data",
                    "value": {
                      "code": "invalid_field_data",
                      "message": "weightUnit must be one of lbs, kgs"
                    }
                  }
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized - the apikey header is missing or does not match any active API key.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                },
                "examples": {
                  "request_unauthorized": {
                    "summary": "Missing or invalid API key",
                    "value": {
                      "code": "request_unauthorized",
                      "message": "Invalid authorization. Requires API key."
                    }
                  }
                }
              }
            }
          },
          "403": {
            "description": "Forbidden - the customer account is suspended. The body carries `message` only, without `code`.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                },
                "examples": {
                  "account_suspended": {
                    "summary": "Customer account suspended (no code field)",
                    "value": {
                      "message": "Your account has been suspended, please contact Warp for assistance."
                    }
                  }
                }
              }
            }
          },
          "429": {
            "description": "Too Many Requests - the quoting rate limit of the API key was exceeded (only POST /freights/quote, /freights/freight-quote and /freights/quote/multi-stops are rate limited; limits apply per UTC hour and per UTC day). The `Retry-After` header holds the number of seconds until the window resets.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                },
                "examples": {
                  "rate_limit_exceeded": {
                    "summary": "Rate limit exceeded",
                    "value": {
                      "code": "rate_limit_exceeded",
                      "message": "You have reached your WARP quoting API rate limit of 200 requests per hour (UTC). Your quota resets in 1380 seconds (see the Retry-After response header). If your integration requires a higher limit, please contact your WARP account manager or email support@wearewarp.com with your expected request volume."
                    }
                  }
                }
              }
            }
          },
          "500": {
            "description": "Internal Server Error - an unknown error has occurred.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                },
                "examples": {
                  "internal_server_error": {
                    "summary": "Internal server error",
                    "value": {
                      "code": "internal_server_error",
                      "message": "An unknown error has occurred."
                    }
                  }
                }
              }
            }
          }
        },
        "security": [
          {
            "api_key": []
          }
        ]
      }
    },
    "/freights/invoices/{orderId}": {
      "get": {
        "tags": [
          "Freight"
        ],
        "summary": "get invoice",
        "description": "Returns the cost breakdown of an order. For LTL/PARCEL orders (and orders priced at shipment level) the amounts are the sum over all shipments of the order. The cost fields (`transitCost`, `volumeDiscount`, `fuelCost`, `serviceOptions`, `grandTotal`) are absent while the order has not been priced yet. `status` is `final` once the invoice has been sent, `pending` before that.",
        "operationId": "get-invoice",
        "parameters": [
          {
            "name": "orderId",
            "in": "path",
            "description": "Id of the order. The order code (e.g. P-01723-2449) is accepted as well.",
            "required": true,
            "explode": true,
            "schema": {
              "type": "string",
              "example": "01H3W439G5J5Y282KQFQTAQGTD"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "successful operation",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/GetInvoiceSuccess"
                }
              }
            }
          },
          "400": {
            "description": "Bad Request - the request payload is missing fields or contains invalid data.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                },
                "examples": {
                  "required_field_missing": {
                    "summary": "Required fields are missing",
                    "value": {
                      "code": "required_field_missing",
                      "message": "pickupDate is required!"
                    }
                  },
                  "invalid_field_data": {
                    "summary": "Invalid field data",
                    "value": {
                      "code": "invalid_field_data",
                      "message": "weightUnit must be one of lbs, kgs"
                    }
                  }
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized - the apikey header is missing or does not match any active API key.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                },
                "examples": {
                  "request_unauthorized": {
                    "summary": "Missing or invalid API key",
                    "value": {
                      "code": "request_unauthorized",
                      "message": "Invalid authorization. Requires API key."
                    }
                  }
                }
              }
            }
          },
          "403": {
            "description": "Forbidden - the customer account is suspended. The body carries `message` only, without `code`.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                },
                "examples": {
                  "account_suspended": {
                    "summary": "Customer account suspended (no code field)",
                    "value": {
                      "message": "Your account has been suspended, please contact Warp for assistance."
                    }
                  }
                }
              }
            }
          },
          "429": {
            "description": "Too Many Requests - the quoting rate limit of the API key was exceeded (only POST /freights/quote, /freights/freight-quote and /freights/quote/multi-stops are rate limited; limits apply per UTC hour and per UTC day). The `Retry-After` header holds the number of seconds until the window resets.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                },
                "examples": {
                  "rate_limit_exceeded": {
                    "summary": "Rate limit exceeded",
                    "value": {
                      "code": "rate_limit_exceeded",
                      "message": "You have reached your WARP quoting API rate limit of 200 requests per hour (UTC). Your quota resets in 1380 seconds (see the Retry-After response header). If your integration requires a higher limit, please contact your WARP account manager or email support@wearewarp.com with your expected request volume."
                    }
                  }
                }
              }
            }
          },
          "500": {
            "description": "Internal Server Error - an unknown error has occurred.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                },
                "examples": {
                  "internal_server_error": {
                    "summary": "Internal server error",
                    "value": {
                      "code": "internal_server_error",
                      "message": "An unknown error has occurred."
                    }
                  }
                }
              }
            }
          }
        },
        "security": [
          {
            "api_key": []
          }
        ]
      }
    },
    "/freights/documents/{orderId}": {
      "get": {
        "tags": [
          "Freight"
        ],
        "summary": "get documents",
        "description": "Returns the documents (BOL, POD, other files) of every shipment of the order. Without `type` all document types are returned. `podType` only applies to POD documents: with `type=pod` (or no `type`) it filters the PODs; combined with `type=bol` or `type=other` the result is empty. PODs are taken from the delivery task of the last active leg of each shipment, and a POD is only returned once it has been confirmed/approved by WARP.",
        "operationId": "get-document",
        "parameters": [
          {
            "name": "orderId",
            "in": "path",
            "description": "Id of the order. The order code (e.g. P-01723-2449) is accepted as well.",
            "required": true,
            "explode": true,
            "schema": {
              "type": "string",
              "example": "01H3W439G5J5Y282KQFQTAQGTD"
            }
          },
          {
            "name": "type",
            "in": "query",
            "description": "(Optional) Document type to return: bol, pod or other. Omit to return all types.",
            "required": false,
            "explode": true,
            "schema": {
              "type": "string",
              "enum": [
                "bol",
                "pod",
                "other"
              ],
              "example": "bol"
            }
          },
          {
            "name": "podType",
            "in": "query",
            "description": "(Optional) POD sub-type filter: Photo, BOL or Signature. Only meaningful for POD documents (type=pod or type omitted).",
            "required": false,
            "explode": true,
            "schema": {
              "type": "string",
              "enum": [
                "Photo",
                "BOL",
                "Signature"
              ],
              "example": "Photo"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "successful operation",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/GetDocumentsSuccess"
                }
              }
            }
          },
          "400": {
            "description": "Bad Request - the request payload is missing fields or contains invalid data.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                },
                "examples": {
                  "required_field_missing": {
                    "summary": "Required fields are missing",
                    "value": {
                      "code": "required_field_missing",
                      "message": "pickupDate is required!"
                    }
                  },
                  "invalid_field_data": {
                    "summary": "Invalid field data",
                    "value": {
                      "code": "invalid_field_data",
                      "message": "weightUnit must be one of lbs, kgs"
                    }
                  }
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized - the apikey header is missing or does not match any active API key.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                },
                "examples": {
                  "request_unauthorized": {
                    "summary": "Missing or invalid API key",
                    "value": {
                      "code": "request_unauthorized",
                      "message": "Invalid authorization. Requires API key."
                    }
                  }
                }
              }
            }
          },
          "403": {
            "description": "Forbidden - the customer account is suspended. The body carries `message` only, without `code`.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                },
                "examples": {
                  "account_suspended": {
                    "summary": "Customer account suspended (no code field)",
                    "value": {
                      "message": "Your account has been suspended, please contact Warp for assistance."
                    }
                  }
                }
              }
            }
          },
          "429": {
            "description": "Too Many Requests - the quoting rate limit of the API key was exceeded (only POST /freights/quote, /freights/freight-quote and /freights/quote/multi-stops are rate limited; limits apply per UTC hour and per UTC day). The `Retry-After` header holds the number of seconds until the window resets.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                },
                "examples": {
                  "rate_limit_exceeded": {
                    "summary": "Rate limit exceeded",
                    "value": {
                      "code": "rate_limit_exceeded",
                      "message": "You have reached your WARP quoting API rate limit of 200 requests per hour (UTC). Your quota resets in 1380 seconds (see the Retry-After response header). If your integration requires a higher limit, please contact your WARP account manager or email support@wearewarp.com with your expected request volume."
                    }
                  }
                }
              }
            }
          },
          "500": {
            "description": "Internal Server Error - an unknown error has occurred.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                },
                "examples": {
                  "internal_server_error": {
                    "summary": "Internal server error",
                    "value": {
                      "code": "internal_server_error",
                      "message": "An unknown error has occurred."
                    }
                  }
                }
              }
            }
          }
        },
        "security": [
          {
            "api_key": []
          }
        ]
      }
    },
    "/freights/freight-quote": {
      "post": {
        "tags": [
          "Freight"
        ],
        "summary": "[Experimental] Get all quote options for your shipment",
        "description": "Pull a list of quote options for a potential delivery shipment - every bookable option from every enabled source is returned in `options[]`, cheapest first.<br/><br/>**Sources** depend on `shipmentType`: FTL - WARP only; LTL (default) - WARP and the partner LTL carriers; PARCEL - FedEx only. The optional `providers` query parameter (comma separated, e.g. `providers=WARP,Priority1`) restricts the sources to a subset of those allowed for your account for that shipment type.<br/><br/>**Rate limit:** this endpoint counts towards the quoting rate limit of your API key (per UTC hour and per UTC day). Above the limit the API answers 429 `rate_limit_exceeded` with a `Retry-After` header.<br/><br/>**Request notes:** `pickupDate` is `YYYY-MM-DD`. This is the only endpoint that returns every parcel service level. For PARCEL every package must respect the FedEx limits: weight per package (`totalWeight` / `quantity`) <= 150 lbs, longest side <= 108 in, length + girth (longest side + 2 x (the other two sides)) <= 165 in, and dimensions, weight and quantity must all be > 0. `items[].height` must be <= 85. Temperature-controlled (reefer) freight is not supported yet: sending `temperature_limit` is rejected with 400 `Reefer Shipment is not supported yet!`.<br/><br/>**Response notes:** `transitTime` is in seconds; `transitTimeWithoutTeam` is the transit time with a single driver instead of a team. `insurance` is only present when `insuranceInfo` was sent; when the insurance quote fails the block is `{ \"insuranceQuoteId\": null, \"errorMessage\": \"...\" }` and the freight options are still returned. Pass the chosen `options[].id` as `quoteId` to POST /freights/book before `expirationTs`.",
        "operationId": "freight-quote",
        "parameters": [
          {
            "name": "providers",
            "in": "query",
            "description": "(Optional) Comma separated list of quote sources to use (e.g. `WARP,Priority1`). Only sources allowed for your account and for the `shipmentType` are used; the others are ignored. Omit to use every allowed source.",
            "required": false,
            "explode": true,
            "schema": {
              "type": "string",
              "example": "WARP,Priority1"
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/FreightQuoteBody"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "successful creation",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/FreightQuoteResult"
                }
              }
            }
          },
          "400": {
            "description": "Bad Request - the request payload is missing fields or contains invalid data.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                },
                "examples": {
                  "required_field_missing": {
                    "summary": "Required fields are missing",
                    "value": {
                      "code": "required_field_missing",
                      "message": "pickupDate is required!"
                    }
                  },
                  "invalid_field_data": {
                    "summary": "Invalid field data",
                    "value": {
                      "code": "invalid_field_data",
                      "message": "weightUnit must be one of lbs, kgs"
                    }
                  }
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized - the apikey header is missing or does not match any active API key.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                },
                "examples": {
                  "request_unauthorized": {
                    "summary": "Missing or invalid API key",
                    "value": {
                      "code": "request_unauthorized",
                      "message": "Invalid authorization. Requires API key."
                    }
                  }
                }
              }
            }
          },
          "403": {
            "description": "Forbidden - the customer account is suspended. The body carries `message` only, without `code`.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                },
                "examples": {
                  "account_suspended": {
                    "summary": "Customer account suspended (no code field)",
                    "value": {
                      "message": "Your account has been suspended, please contact Warp for assistance."
                    }
                  }
                }
              }
            }
          },
          "429": {
            "description": "Too Many Requests - the quoting rate limit of the API key was exceeded (only POST /freights/quote, /freights/freight-quote and /freights/quote/multi-stops are rate limited; limits apply per UTC hour and per UTC day). The `Retry-After` header holds the number of seconds until the window resets.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                },
                "examples": {
                  "rate_limit_exceeded": {
                    "summary": "Rate limit exceeded",
                    "value": {
                      "code": "rate_limit_exceeded",
                      "message": "You have reached your WARP quoting API rate limit of 200 requests per hour (UTC). Your quota resets in 1380 seconds (see the Retry-After response header). If your integration requires a higher limit, please contact your WARP account manager or email support@wearewarp.com with your expected request volume."
                    }
                  }
                }
              }
            }
          },
          "500": {
            "description": "Internal Server Error - an unknown error has occurred.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                },
                "examples": {
                  "internal_server_error": {
                    "summary": "Internal server error",
                    "value": {
                      "code": "internal_server_error",
                      "message": "An unknown error has occurred."
                    }
                  }
                }
              }
            }
          }
        },
        "security": [
          {
            "api_key": []
          }
        ]
      }
    },
    "/freights/book": {
      "post": {
        "tags": [
          "Freight"
        ],
        "summary": "[Experimental] Book a shipment using a previous quote ID",
        "description": "Provide all the details required for delivery, linked with id of selected quote option (`quoteId` = `options[].id` of POST /freights/freight-quote). The quote option must not be expired and must not have been booked already.<br/><br/>**The booking must match the quote exactly**: pickup/delivery zipcodes, every item's height, length, width, sizeUnit, totalWeight, weightUnit and quantity, and the service lists - otherwise the request is rejected with 400 `invalid_field_data` and a message such as `Pickup Zipcode 90001 does not match with quoting request 90058.`, `Drop-off zipcode ... does not match with quoting request ...`, `Number of items 2 does not match with number of items in quoting request 1.`, `List of items do not match with list of Items in quoting request.` or `additionalServices does not match with quoting request.` (also `pickupInfo.serviceOptions` / `deliveryInfo.serviceOptions`).<br/><br/>**PARCEL quotes:** send the items in `IN` and `lbs` on both the quote and the booking. The quote stores parcel items converted to inches/pounds and the booking compares the raw values, so any other unit is reported as a mismatch.<br/><br/>**Validation notes:** `pickupInfo.contactPhone` and `deliveryInfo.contactPhone` are required. `timeWindow.from` / `timeWindow.to` (and `appointmentInfo`) must be ISO 8601 date-times **in the future** and `from` must not be later than `to`. `items[].height` must be <= 85.<br/><br/>If the customer balance is not enough to cover this booking, the order is still created but it is put on hold until the payment is completed. In that case the response also includes **message** and **paymentLink** - open that link to add funds and complete the payment.<br/><br/>If *Pay by card for API bookings* is turned on in the customer portal (Settings > API Access), that booking is charged to the selected saved card instead (total + card processing fee) and the response includes **payment** `{ method, amount_charged, card_fee, last4 }`. A card that cannot be charged returns HTTP 402 with **code** `CHARGE_FAILED` or `PAYMENT_ACTION_REQUIRED` and no order is created; HTTP 409 `BOOKING_IN_PROGRESS` means another request for the same quote is in progress. Insurance (`insuranceQuoteId`) is not available on a booking paid by saved card (HTTP 400 `CARD_INSURANCE_NOT_SUPPORTED`).",
        "operationId": "book",
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/FreightBookingShipment"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "successful creation",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/BookingResult"
                }
              }
            }
          },
          "400": {
            "description": "Bad Request - the request payload is missing fields or contains invalid data.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                },
                "examples": {
                  "required_field_missing": {
                    "summary": "Required fields are missing",
                    "value": {
                      "code": "required_field_missing",
                      "message": "pickupDate is required!"
                    }
                  },
                  "invalid_field_data": {
                    "summary": "Invalid field data",
                    "value": {
                      "code": "invalid_field_data",
                      "message": "weightUnit must be one of lbs, kgs"
                    }
                  }
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized - the apikey header is missing or does not match any active API key.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                },
                "examples": {
                  "request_unauthorized": {
                    "summary": "Missing or invalid API key",
                    "value": {
                      "code": "request_unauthorized",
                      "message": "Invalid authorization. Requires API key."
                    }
                  }
                }
              }
            }
          },
          "403": {
            "description": "Forbidden - the customer account is suspended. The body carries `message` only, without `code`.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                },
                "examples": {
                  "account_suspended": {
                    "summary": "Customer account suspended (no code field)",
                    "value": {
                      "message": "Your account has been suspended, please contact Warp for assistance."
                    }
                  }
                }
              }
            }
          },
          "429": {
            "description": "Too Many Requests - the quoting rate limit of the API key was exceeded (only POST /freights/quote, /freights/freight-quote and /freights/quote/multi-stops are rate limited; limits apply per UTC hour and per UTC day). The `Retry-After` header holds the number of seconds until the window resets.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                },
                "examples": {
                  "rate_limit_exceeded": {
                    "summary": "Rate limit exceeded",
                    "value": {
                      "code": "rate_limit_exceeded",
                      "message": "You have reached your WARP quoting API rate limit of 200 requests per hour (UTC). Your quota resets in 1380 seconds (see the Retry-After response header). If your integration requires a higher limit, please contact your WARP account manager or email support@wearewarp.com with your expected request volume."
                    }
                  }
                }
              }
            }
          },
          "500": {
            "description": "Internal Server Error - an unknown error has occurred.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                },
                "examples": {
                  "internal_server_error": {
                    "summary": "Internal server error",
                    "value": {
                      "code": "internal_server_error",
                      "message": "An unknown error has occurred."
                    }
                  }
                }
              }
            }
          }
        },
        "security": [
          {
            "api_key": []
          }
        ]
      }
    },
    "/freights/quote-history": {
      "get": {
        "tags": [
          "Freight"
        ],
        "summary": "get quote histories",
        "description": "Returns your previous quote requests, newest first. Invalid `limit` / `offset` values are rejected with 400 `invalid_field_data`.",
        "operationId": "get-quote-history",
        "parameters": [
          {
            "name": "limit",
            "in": "query",
            "description": "(Optional) Number of quotes to return. Min=1, Max=100, default 10.",
            "required": false,
            "explode": true,
            "schema": {
              "type": "number",
              "default": 10
            }
          },
          {
            "name": "offset",
            "in": "query",
            "description": "(Optional) Number of quotes to skip. Min=0, default 0.",
            "required": false,
            "explode": true,
            "schema": {
              "type": "number",
              "default": 0
            }
          },
          {
            "name": "pickupDate",
            "in": "query",
            "description": "(Optional) Pickup date in YYYY-MM-DD format - returns the quotes whose pickup date falls on that day.",
            "required": false,
            "explode": true,
            "schema": {
              "type": "string",
              "example": "2024-10-03"
            }
          },
          {
            "name": "pickupZipcode",
            "in": "query",
            "description": "(Optional) Zipcode of pickup location",
            "required": false,
            "explode": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "deliveryZipcode",
            "in": "query",
            "description": "(Optional) Zipcode of delivery location",
            "required": false,
            "explode": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "successful operation",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/GetQuoteHistorySuccess"
                }
              }
            }
          },
          "400": {
            "description": "Bad Request - the request payload is missing fields or contains invalid data.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                },
                "examples": {
                  "required_field_missing": {
                    "summary": "Required fields are missing",
                    "value": {
                      "code": "required_field_missing",
                      "message": "pickupDate is required!"
                    }
                  },
                  "invalid_field_data": {
                    "summary": "Invalid field data",
                    "value": {
                      "code": "invalid_field_data",
                      "message": "weightUnit must be one of lbs, kgs"
                    }
                  }
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized - the apikey header is missing or does not match any active API key.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                },
                "examples": {
                  "request_unauthorized": {
                    "summary": "Missing or invalid API key",
                    "value": {
                      "code": "request_unauthorized",
                      "message": "Invalid authorization. Requires API key."
                    }
                  }
                }
              }
            }
          },
          "403": {
            "description": "Forbidden - the customer account is suspended. The body carries `message` only, without `code`.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                },
                "examples": {
                  "account_suspended": {
                    "summary": "Customer account suspended (no code field)",
                    "value": {
                      "message": "Your account has been suspended, please contact Warp for assistance."
                    }
                  }
                }
              }
            }
          },
          "429": {
            "description": "Too Many Requests - the quoting rate limit of the API key was exceeded (only POST /freights/quote, /freights/freight-quote and /freights/quote/multi-stops are rate limited; limits apply per UTC hour and per UTC day). The `Retry-After` header holds the number of seconds until the window resets.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                },
                "examples": {
                  "rate_limit_exceeded": {
                    "summary": "Rate limit exceeded",
                    "value": {
                      "code": "rate_limit_exceeded",
                      "message": "You have reached your WARP quoting API rate limit of 200 requests per hour (UTC). Your quota resets in 1380 seconds (see the Retry-After response header). If your integration requires a higher limit, please contact your WARP account manager or email support@wearewarp.com with your expected request volume."
                    }
                  }
                }
              }
            }
          },
          "500": {
            "description": "Internal Server Error - an unknown error has occurred.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                },
                "examples": {
                  "internal_server_error": {
                    "summary": "Internal server error",
                    "value": {
                      "code": "internal_server_error",
                      "message": "An unknown error has occurred."
                    }
                  }
                }
              }
            }
          }
        },
        "security": [
          {
            "api_key": []
          }
        ]
      }
    },
    "/freights/quote/multi-stops": {
      "post": {
        "tags": [
          "Multi-Stops"
        ],
        "summary": "Get quote for a multi-stops FTL shipment",
        "description": "\nGet a quote for a Full Truck Load (FTL) shipment with multiple stops (transit points).\n\nThis endpoint allows you to get pricing for routes with intermediate pickup/delivery points between the origin and final destination. The pricing service calculates the total cost for the entire multi-stop route.\n\n**Requirements:**\n- At least 1 transit stop is required (otherwise use the standard `/freights/quote` endpoint)\n- Maximum 18 transit stops (20 total stops including pickup and delivery)\n- Only US ZIP codes are accepted at the moment (5-digit or ZIP+4). `country` \"CA\" passes the country check but Canadian postal codes fail the zipcode validation, so Canada cannot be quoted through multi-stops yet.\n\n**Rate limit:** this endpoint counts towards the FTL quoting rate limit of your API key (per UTC hour and per UTC day). Above the limit the API answers **429** `rate_limit_exceeded` with a `Retry-After` header.\n\n**Validation:** every validation error (including a missing required field) is returned as 400 `invalid_field_data` with the failing field in the message.\n\n**Request parameters**\n\n| Name                    | Type                         | Required/Optional | Description                                                                                     |\n|-------------------------|------------------------------|-------------------|-------------------------------------------------------------------------------------------------|\n| pickupDate              | String                       | Required          | The earliest pickup date in YYYY-MM-DD format, in the timezone of the pickup location.          |\n| pickupInfo              | Object                       | Required          | Pickup stop details.                                                                            |\n| pickupInfo.zipcode      | String                       | Required          | The postal code of the pickup location (US 5-digit or ZIP+4).                                   |\n| pickupInfo.country      | String                       | Optional          | Country code (ISO 3166-1 alpha-2). Defaults to \"US\". See the US-only note above.                |\n| deliveryInfo            | Object                       | Required          | Final delivery stop details.                                                                    |\n| deliveryInfo.zipcode    | String                       | Required          | The postal code of the final delivery location (US 5-digit or ZIP+4).                           |\n| deliveryInfo.country    | String                       | Optional          | Country code (ISO 3166-1 alpha-2). Defaults to \"US\". See the US-only note above.                |\n| transits                | Array<Object>                | Required          | List of intermediate transit stops in route order. Min 1, max 18.                               |\n| transits[].zipcode      | String                       | Required          | The postal code of the transit stop (US 5-digit or ZIP+4).                                      |\n| transits[].country      | String                       | Optional          | Country code (ISO 3166-1 alpha-2). Defaults to \"US\". See the US-only note above.                |\n| listItems               | Array<**Item**>              | Required          | The list of commodities being shipped (used for pricing the entire route). 1 to 100 items.      |\n| pickupServices          | Array<**ServiceOption**>     | Optional          | Pickup services required at the pickup location (max 20).                                       |\n| deliveryServices        | Array<**ServiceOption**>     | Optional          | Delivery services required at the delivery location (max 20).                                   |\n| additionalServices      | Array<**ServiceOption**>     | Optional          | Any additional services for the shipment (max 20).                                              |\n| shipmentType            | String                       | Optional          | Only `FTL` is accepted (default: FTL); any other value is rejected with 400.                    |\n| vehicleType             | Object                       | Optional          | Vehicle type specification.                                                                     |\n| vehicleType.code        | String                       | Required when vehicleType is provided | Vehicle code (e.g. DRY_VAN_53, STRAIGHT_TRUCK_26, CARGO_VAN).                       |\n\n<br />\n**Item limits** (same **Item** schema as POST /freights/quote, with stricter bounds):\n\n| Field       | Constraint                                                    |\n|-------------|---------------------------------------------------------------|\n| height      | 0.1 - 85                                                      |\n| length      | 0.1 - 636                                                     |\n| width       | 0.1 - 102                                                     |\n| quantity    | integer, 1 - 9999                                             |\n| totalWeight | 0.01 - 80000                                                  |\n| name        | max 200 characters; notes max 500; freightClass/packaging max 50 |\n\n<br />\n**Response**\n\n| Name                      | Type   | Description                                                                                  |\n|---------------------------|--------|----------------------------------------------------------------------------------------------|\n| quote_id                  | String | The unique ID for this quote (`WM` + ULID, 28 characters). Legacy `PRICING_MULTI_` ids are still accepted when booking. |\n| total_charge              | Number | Total price for the entire multi-stop route (USD).                                           |\n| transit_time              | Number | Estimated transit time in seconds.                                                           |\n| transit_time_without_team | Number | Estimated transit time in seconds when the load is driven by a single driver instead of a team. |\n| rate_detail               | Object | Detailed rate breakdown.                                                                     |\n",
        "operationId": "multi-stops-quote",
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/MultiStopsQuoteBody"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "successful creation",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/MultiStopsQuoteResult"
                }
              }
            }
          },
          "400": {
            "description": "validation error",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "code": {
                      "type": "string",
                      "example": "invalid_field_data"
                    },
                    "message": {
                      "type": "string",
                      "example": "\"transits\" must contain at least 1 items"
                    }
                  }
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized - the apikey header is missing or does not match any active API key.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                },
                "examples": {
                  "request_unauthorized": {
                    "summary": "Missing or invalid API key",
                    "value": {
                      "code": "request_unauthorized",
                      "message": "Invalid authorization. Requires API key."
                    }
                  }
                }
              }
            }
          },
          "403": {
            "description": "Forbidden - the customer account is suspended. The body carries `message` only, without `code`.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                },
                "examples": {
                  "account_suspended": {
                    "summary": "Customer account suspended (no code field)",
                    "value": {
                      "message": "Your account has been suspended, please contact Warp for assistance."
                    }
                  }
                }
              }
            }
          },
          "429": {
            "description": "Too Many Requests - the quoting rate limit of the API key was exceeded (only POST /freights/quote, /freights/freight-quote and /freights/quote/multi-stops are rate limited; limits apply per UTC hour and per UTC day). The `Retry-After` header holds the number of seconds until the window resets.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                },
                "examples": {
                  "rate_limit_exceeded": {
                    "summary": "Rate limit exceeded",
                    "value": {
                      "code": "rate_limit_exceeded",
                      "message": "You have reached your WARP quoting API rate limit of 200 requests per hour (UTC). Your quota resets in 1380 seconds (see the Retry-After response header). If your integration requires a higher limit, please contact your WARP account manager or email support@wearewarp.com with your expected request volume."
                    }
                  }
                }
              }
            }
          },
          "500": {
            "description": "Internal Server Error - an unknown error has occurred.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                },
                "examples": {
                  "internal_server_error": {
                    "summary": "Internal server error",
                    "value": {
                      "code": "internal_server_error",
                      "message": "An unknown error has occurred."
                    }
                  }
                }
              }
            }
          }
        },
        "security": [
          {
            "api_key": []
          }
        ]
      }
    },
    "/freights/booking/multi-stops": {
      "post": {
        "tags": [
          "Multi-Stops"
        ],
        "summary": "Book a multi-stops FTL shipment",
        "description": "\nBook a multi-stop FTL shipment using a previous multi-stops quote ID.\n\nThis endpoint creates an order with multiple shipments (legs), each representing a pickup-to-delivery segment within the overall route. All stops that were included in the original quote must be used in the booking.\n\n**Requirements:**\n- A valid, unexpired multi-stops `quoteId` from `/freights/quote/multi-stops`\n- At least 2 shipments (otherwise use the standard `/freights/booking` endpoint), at most 19\n- All zipcodes from the original quote must appear in the booking shipments\n- Within each shipment, `pickupInfo.stopIndex` must be less than `deliveryInfo.stopIndex`\n- Addresses must be US: `state` is the 2-letter code and `zipcode` is 5-digit or ZIP+4\n- `windowTime` / `appointmentInfo` `from` and `to` are strings in the format `YYYY-MM-DDTHH:mm:ss` with optional milliseconds (up to 3 digits) and an optional trailing `Z` (e.g. `2026-03-15T08:00:00Z` or `2026-03-15T08:00:00.000Z`); time zone offsets such as `+07:00` are not accepted\n- Items follow the same limits as the multi-stops quote (height <= 85, length <= 636, width <= 102, quantity 1-9999, totalWeight <= 80000, 1-100 items per shipment)\n\n**Validation:** every validation error (including a missing required field) is returned as 400 `invalid_field_data` with the failing field in the message.\n\n**How stopIndex works:**\n- `stopIndex` is a relative sorting key that determines the order the driver visits each stop\n- Values don't need to be contiguous (e.g., 0, 5, 10 is valid)\n- Same `stopIndex` value means the driver visits the same physical location once for multiple tasks\n- Example: A route LA → Dallas → NYC with pickup at Dallas and delivery at Dallas:\n  - Shipment 1: pickup (stopIndex: 0, LA) → delivery (stopIndex: 1, Dallas)\n  - Shipment 2: pickup (stopIndex: 2, Dallas) → delivery (stopIndex: 3, NYC)\n\n**Request parameters**\n\n| Name                                   | Type                     | Required/Optional | Description                                                                |\n|----------------------------------------|--------------------------|-------------------|----------------------------------------------------------------------------|\n| quoteId                                | String                   | Required          | The quote ID from a previous multi-stops quote request.                    |\n| shipments                              | Array<**Shipment**>      | Required          | List of shipment legs (min 2, max 19).                                     |\n| shipments[].pickupInfo                 | **MultiStopsStopInfo**   | Required          | Pickup stop details including stopIndex.                                   |\n| shipments[].deliveryInfo               | **MultiStopsStopInfo**   | Required          | Delivery stop details including stopIndex.                                 |\n| shipments[].listItems                  | Array<**Item**>          | Required          | Commodities for this leg.                                                  |\n| shipments[].pickupServices             | Array<**ServiceOption**> | Optional          | Pickup services for this leg.                                              |\n| shipments[].deliveryServices           | Array<**ServiceOption**> | Optional          | Delivery services for this leg.                                            |\n| shipments[].additionalServices         | Array<**ServiceOption**> | Optional          | Additional services for this leg.                                          |\n| shipmentType                           | String                   | Optional          | Only `FTL` is accepted (default: FTL); any other value is rejected with 400. |\n| vehicleType                            | Object                   | Optional          | Vehicle type specification.                                                |\n\n<br/>\n**MultiStopsStopInfo** extends StopInfo with:\n\n| Name        | Type    | Required/Optional | Description                                                              |\n|-------------|---------|-------------------|--------------------------------------------------------------------------|\n| stopIndex   | Number  | Required          | Integer (0-999). Relative order of this stop in the route.               |\n| All fields from StopInfo (contactName, contactPhone, address, windowTime, instructions, refNum, etc.) |||\n\n<br/>\n**Response**\n\n| Name                          | Type   | Description                                   |\n|-------------------------------|--------|-----------------------------------------------|\n| message                       | String | Result message (e.g. \"Success\").               |\n| trackingNumber                | String | The tracking number of the order (same as orderNumber). |\n| orderId                       | String | The ID of the created order.                   |\n| orderNumber                   | String | The display number of the order.               |\n| shipments                     | Array  | List of created shipments.                     |\n| shipments[].trackingNumber    | String | Tracking number for this shipment (currently the shipment code, same as shipmentNumber). |\n| shipments[].shipmentId        | String | ID of the shipment.                            |\n| shipments[].shipmentNumber    | String | Display number of the shipment.                |\n| shipments[].refNum            | String | Reference numbers.                             |\n",
        "operationId": "multi-stops-booking",
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/MultiStopsBookingBody"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "successful creation",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/MultiStopsBookingResult"
                }
              }
            }
          },
          "400": {
            "description": "validation error",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "code": {
                      "type": "string",
                      "example": "invalid_field_data"
                    },
                    "message": {
                      "type": "string",
                      "example": "quoteId is not valid."
                    }
                  }
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized - the apikey header is missing or does not match any active API key.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                },
                "examples": {
                  "request_unauthorized": {
                    "summary": "Missing or invalid API key",
                    "value": {
                      "code": "request_unauthorized",
                      "message": "Invalid authorization. Requires API key."
                    }
                  }
                }
              }
            }
          },
          "403": {
            "description": "Forbidden - the customer account is suspended. The body carries `message` only, without `code`.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                },
                "examples": {
                  "account_suspended": {
                    "summary": "Customer account suspended (no code field)",
                    "value": {
                      "message": "Your account has been suspended, please contact Warp for assistance."
                    }
                  }
                }
              }
            }
          },
          "429": {
            "description": "Too Many Requests - the quoting rate limit of the API key was exceeded (only POST /freights/quote, /freights/freight-quote and /freights/quote/multi-stops are rate limited; limits apply per UTC hour and per UTC day). The `Retry-After` header holds the number of seconds until the window resets.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                },
                "examples": {
                  "rate_limit_exceeded": {
                    "summary": "Rate limit exceeded",
                    "value": {
                      "code": "rate_limit_exceeded",
                      "message": "You have reached your WARP quoting API rate limit of 200 requests per hour (UTC). Your quota resets in 1380 seconds (see the Retry-After response header). If your integration requires a higher limit, please contact your WARP account manager or email support@wearewarp.com with your expected request volume."
                    }
                  }
                }
              }
            }
          },
          "500": {
            "description": "Internal Server Error - an unknown error has occurred.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                },
                "examples": {
                  "internal_server_error": {
                    "summary": "Internal server error",
                    "value": {
                      "code": "internal_server_error",
                      "message": "An unknown error has occurred."
                    }
                  }
                }
              }
            }
          }
        },
        "security": [
          {
            "api_key": []
          }
        ]
      }
    }
  },
  "components": {
    "schemas": {
      "QuoteBody": {
        "type": "object",
        "required": [
          "pickupDate",
          "pickupInfo",
          "deliveryInfo",
          "listItems"
        ],
        "properties": {
          "pickupDate": {
            "type": "string",
            "format": "date",
            "description": "The earliest pickup date in YYYY-MM-DD format, in the timezone of the pickup stop.",
            "example": "2026-09-20"
          },
          "pickupInfo": {
            "type": "object",
            "required": [
              "zipcode"
            ],
            "properties": {
              "zipcode": {
                "type": "string",
                "example": "90058"
              },
              "country": {
                "type": "string",
                "description": "Country code (ISO 3166-1 alpha-2). Supported: US, CA. Defaults to US.",
                "enum": [
                  "US",
                  "CA"
                ],
                "default": "US",
                "example": "US"
              }
            }
          },
          "deliveryInfo": {
            "type": "object",
            "required": [
              "zipcode"
            ],
            "properties": {
              "zipcode": {
                "type": "string",
                "example": "90028"
              },
              "country": {
                "type": "string",
                "description": "Country code (ISO 3166-1 alpha-2). Supported: US, CA. Defaults to US.",
                "enum": [
                  "US",
                  "CA"
                ],
                "default": "US",
                "example": "US"
              }
            }
          },
          "pickupServices": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/PickupService"
            }
          },
          "deliveryServices": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/DeliveryService"
            }
          },
          "additionalServices": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/AdditionalService"
            }
          },
          "listItems": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/BookShipmentItem"
            }
          },
          "shipmentType": {
            "type": "string",
            "enum": [
              "LTL",
              "FTL",
              "PARCEL"
            ],
            "example": "LTL",
            "description": "The type of shipment (optional, defaults to LTL when omitted). PARCEL returns a single FedEx rate; use /freights/freight-quote to compare every parcel service level. PARCEL items are checked against the FedEx limits per package: weight per package (totalWeight / quantity) <= 150 lbs, longest side <= 108 in, length + girth (longest side + 2 x (the other two sides)) <= 165 in; dimensions, weight and quantity must all be > 0. PARCEL accepts `listItems[]` (or `items[]`).",
            "default": "LTL"
          },
          "vehicleType": {
            "$ref": "#/components/schemas/VehicleType"
          },
          "insuranceInfo": {
            "type": "object",
            "description": "Optional. Provide to receive an insurance quote alongside the freight quote. Both fields are required to get an insurance quote; if omitted or incomplete, the insurance block is skipped.",
            "properties": {
              "commodity": {
                "type": "string",
                "example": "Electronics",
                "description": "A description of the commodity being shipped."
              },
              "insuredValue": {
                "type": "number",
                "example": 20000,
                "description": "The declared value of the goods to be insured (in USD)."
              }
            }
          }
        }
      },
      "VehicleType": {
        "type": "object",
        "properties": {
          "code": {
            "type": "string",
            "enum": [
              "DRY_VAN_53",
              "STRAIGHT_TRUCK_26",
              "CARGO_VAN"
            ],
            "example": "CARGO_VAN",
            "description": "The type of vehicle (optional. If not provided, the system will automatically select the best vehicle type based on the shipment type and the items.)"
          }
        }
      },
      "TrackingShipmentQuery": {
        "type": "object",
        "required": [
          "trackingNumbers"
        ],
        "properties": {
          "trackingNumbers": {
            "type": "array",
            "description": "Shipment tracking numbers, shipment numbers (codes) or order numbers (codes). Unknown values are omitted from the response.",
            "minItems": 1,
            "maxItems": 50,
            "items": {
              "type": "string"
            },
            "example": [
              "2E2EWQATEF8K",
              "S-00524-2635",
              "P-01723-2449"
            ]
          }
        }
      },
      "GetShipmentsSuccess": {
        "type": "object",
        "properties": {
          "data": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/Shipment"
            }
          },
          "total": {
            "type": "number",
            "example": 100
          },
          "page": {
            "type": "number",
            "example": 1
          },
          "pageSize": {
            "type": "number",
            "example": 10
          }
        }
      },
      "BookShipmentItem": {
        "type": "object",
        "required": [
          "height",
          "length",
          "width",
          "sizeUnit",
          "totalWeight",
          "weightUnit",
          "quantity"
        ],
        "example": {
          "name": "Item Name",
          "height": 48,
          "length": 48,
          "width": 40,
          "sizeUnit": "IN",
          "totalWeight": 500,
          "weightUnit": "lbs",
          "quantity": 1,
          "packaging": "Pallet",
          "stackable": false,
          "notes": "Notes here"
        },
        "properties": {
          "name": {
            "type": "string",
            "example": "Item Name"
          },
          "height": {
            "type": "number",
            "description": "Maximum 108 on POST /freights/booking; maximum 85 on POST /freights/freight-quote, /freights/book and the multi-stops endpoints (checked on the raw value, whatever the sizeUnit).",
            "example": 48
          },
          "length": {
            "type": "number",
            "example": 100
          },
          "width": {
            "type": "number",
            "example": 100
          },
          "sizeUnit": {
            "type": "string",
            "example": "IN",
            "enum": [
              "IN",
              "FT"
            ]
          },
          "totalWeight": {
            "type": "number",
            "example": 100
          },
          "weightUnit": {
            "type": "string",
            "example": "lbs",
            "enum": [
              "lbs",
              "kgs"
            ]
          },
          "quantity": {
            "type": "integer",
            "format": "int32",
            "example": 100
          },
          "packaging": {
            "type": "string",
            "description": "Packaging unit of the line item (e.g. Pallet). Defaults to Pallet.",
            "example": "Pallet",
            "default": "Pallet"
          },
          "temperature_limit": {
            "type": "object",
            "description": "Temperature-controlled (reefer) freight is NOT supported yet by the quote endpoints: POST /freights/quote rejects any non-zero min/max and POST /freights/freight-quote rejects the field entirely with 400 `Reefer Shipment is not supported yet!`. Omit this field unless instructed otherwise by WARP.",
            "properties": {
              "min": {
                "type": "number",
                "description": "Minimum temperature."
              },
              "max": {
                "type": "number",
                "description": "Maximum temperature."
              }
            }
          },
          "stackable": {
            "type": "boolean",
            "example": false
          },
          "notes": {
            "type": "string",
            "example": "Notes here"
          },
          "freightClass": {
            "type": "string",
            "description": "NMFC freight class of the line item (e.g. 70).",
            "example": "70"
          },
          "barcodes": {
            "type": "array",
            "items": {
              "type": "string"
            },
            "example": [
              "barcode1"
            ]
          }
        }
      },
      "PickupService": {
        "type": "object",
        "required": [
          "quantity",
          "service"
        ],
        "properties": {
          "quantity": {
            "type": "number",
            "example": 1
          },
          "service": {
            "type": "string",
            "description": "Pickup service options",
            "enum": [
              "photo-required-pickup",
              "liftgate-pickup",
              "convention-trade-show-pickup",
              "inside-pickup",
              "limited-access-pickup",
              "residential-pickup",
              "construction-site-pickup",
              "pickup-appointment",
              "pickup-layover",
              "detention-shipper",
              "drop-empty",
              "driver-assist-pickup",
              "drop-and-hook-pickup",
              "inside-pickup-upstairs-mezzanine-trash-removal",
              "inside-pickup-back-side-of-the-house",
              "inside-pickup-living-space-garage"
            ]
          }
        },
        "example": {
          "quantity": 1,
          "service": "photo-required-pickup"
        }
      },
      "DeliveryService": {
        "type": "object",
        "required": [
          "quantity",
          "service"
        ],
        "properties": {
          "quantity": {
            "type": "number",
            "example": 1
          },
          "service": {
            "type": "string",
            "description": "Delivery service options",
            "enum": [
              "photo-required-delivery",
              "liftgate-delivery",
              "convention-trade-show-delivery",
              "inside-delivery",
              "limited-access-delivery",
              "residential-delivery",
              "construction-site-delivery",
              "delivery-appointment",
              "delivery-layover",
              "lumper",
              "detention-receiver",
              "redelivery",
              "drop-loaded",
              "driver-assist-delivery",
              "drop-and-hook-delivery",
              "inside-delivery-upstairs-mezzanine-trash-removal",
              "inside-delivery-back-side-of-the-house",
              "inside-delivery-living-space-garage"
            ]
          }
        },
        "example": {
          "quantity": 1,
          "service": "photo-required-delivery"
        }
      },
      "AdditionalService": {
        "type": "object",
        "required": [
          "quantity",
          "service"
        ],
        "properties": {
          "quantity": {
            "type": "number",
            "example": 1
          },
          "service": {
            "type": "string",
            "description": "Addtional service options",
            "enum": [
              "photo-required",
              "sort-n-seg",
              "extra-stop",
              "extra-miles",
              "driver-assist",
              "notify",
              "check_calls",
              "otp_late_fee",
              "otd_late_fee",
              "carrier_otp",
              "carrier_otd",
              "tonu",
              "miscellaneous",
              "deduction",
              "racket_straps",
              "trailer_rental",
              "storage",
              "cross_dock_charge",
              "drop_loaded_equipment",
              "drop_and_hook",
              "drop_equipment",
              "reweigh_reclass",
              "insurance",
              "chassis_rental"
            ]
          }
        },
        "example": {
          "quantity": 1,
          "service": "photo-required"
        }
      },
      "BookingSuccess": {
        "type": "object",
        "properties": {
          "message": {
            "type": "string",
            "description": "Result message. \"Success\" when the booking is fully completed. When the customer balance is not enough to cover this booking, it returns a payment required message and paymentLink is also included.",
            "example": "Success"
          },
          "trackingNumber": {
            "type": "string",
            "description": "Identifier to track the shipment with POST /freights/tracking. Currently the shipment code, i.e. the same value as shipmentNumber.",
            "example": "S-00524-2635"
          },
          "orderNumber": {
            "type": "string",
            "description": "The display number (code) of the order.",
            "example": "P-01723-2449"
          },
          "orderId": {
            "type": "string",
            "example": "01H3W439G5J5Y282KQFQTAQGTD"
          },
          "shipmentId": {
            "type": "string",
            "example": "01H4YJBE0NP5NGEN3W07Z6YPM4"
          },
          "shipmentNumber": {
            "type": "string",
            "description": "The display number (code) of the shipment.",
            "example": "S-00524-2635"
          },
          "refNum": {
            "type": "string",
            "description": "Unique reference numbers of the pickup and delivery stops, comma separated.",
            "example": "PO-123456, DO-123456"
          },
          "insuranceStatus": {
            "type": "string",
            "enum": [
              "booked",
              "failed"
            ],
            "example": "booked",
            "description": "Only present when insuranceQuoteId was provided. \"booked\" if insurance was booked insurance successfully, \"failed\" if it could not be booked insurance"
          },
          "paymentLink": {
            "type": "string",
            "format": "uri",
            "description": "Only present when the customer balance is not enough to cover this booking. The order is still created, but it is on hold until the payment is completed. Open this link to add funds and complete the payment.",
            "example": "https://customer.wearewarp.com/dashboard/pay-orders"
          }
        }
      },
      "BookingShipment": {
        "type": "object",
        "required": [
          "pickupInfo",
          "deliveryInfo",
          "listItems"
        ],
        "properties": {
          "quoteId": {
            "type": "string",
            "description": "The quote_id returned by POST /freights/quote. Required unless WARP has enabled booking without a quote for your account. Must not be expired or already booked; the booking payload must match the quote exactly.",
            "example": "W01KH5PB2V9QJ6Z8M4T3R7X1C0D"
          },
          "pickupInfo": {
            "$ref": "#/components/schemas/StopInfo"
          },
          "deliveryInfo": {
            "$ref": "#/components/schemas/StopInfo"
          },
          "listItems": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/BookShipmentItem"
            }
          },
          "pickupServices": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/PickupService"
            }
          },
          "deliveryServices": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/DeliveryService"
            }
          },
          "additionalServices": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/AdditionalService"
            }
          },
          "insuranceQuoteId": {
            "type": "string",
            "example": "01J8ZQ7X8N2R6V5F3C4B9D0E1F",
            "description": "Optional. The insuranceQuoteId returned by the quote endpoint. Provide it to purchase insurance for this shipment."
          },
          "shipmentType": {
            "type": "string",
            "enum": [
              "LTL",
              "FTL",
              "PARCEL"
            ],
            "default": "LTL",
            "description": "Optional. Ignored when quoteId is provided - the shipment type of the quote is used."
          },
          "vehicleType": {
            "$ref": "#/components/schemas/VehicleType"
          },
          "dedicatedLane": {
            "type": "string",
            "description": "Optional. Only relevant for accounts that WARP has configured for dedicated-lane booking: the value is the lane code provided by WARP. Dedicated lanes are set up by WARP for the account - please contact the WARP team."
          },
          "refNum": {
            "type": "string",
            "description": "Optional external reference assigned by the customer to the shipment.",
            "example": "PO-123456"
          }
        }
      },
      "Address": {
        "type": "object",
        "required": [
          "street",
          "city",
          "state",
          "zipcode"
        ],
        "properties": {
          "street2": {
            "type": "string",
            "example": ""
          },
          "street": {
            "type": "string",
            "example": "1220 Satterwhite Rd"
          },
          "city": {
            "type": "string",
            "example": "Buda"
          },
          "state": {
            "type": "string",
            "example": "TX"
          },
          "zipcode": {
            "type": "string",
            "example": "12345"
          }
        }
      },
      "QuoteResult": {
        "type": "object",
        "properties": {
          "quote_id": {
            "type": "string",
            "description": "Unique quote ID (prefixed with W, 27 characters). Use this ID when booking.",
            "example": "W01KH5PB2V9QJ6Z8M4T3R7X1C0D"
          },
          "price": {
            "type": "object",
            "properties": {
              "amount": {
                "type": "number",
                "example": 1000
              },
              "currency_code": {
                "type": "string",
                "example": "USD"
              }
            }
          },
          "charges": {
            "type": "array",
            "description": "Rate lines. The TOTAL row is price.amount. Every other row is a component: the TRANSIT row is the base freight charge and each SERVICE_OPTION row is an accessorial (its code may also be the carrier-specific accessorial code), so the non-TOTAL rows sum to the TOTAL row. The TRANSIT row is omitted when it cannot be derived so that the rows always reconcile.",
            "items": {
              "type": "object",
              "properties": {
                "code": {
                  "type": "string",
                  "example": "TOTAL"
                },
                "description": {
                  "type": "string",
                  "example": "Total rate"
                },
                "amount": {
                  "type": "number",
                  "example": 1000
                }
              }
            },
            "example": [
              {
                "code": "TOTAL",
                "description": "Total rate",
                "amount": 1000
              },
              {
                "code": "SERVICE_OPTION",
                "description": "liftgate-delivery",
                "amount": 100
              },
              {
                "code": "TRANSIT",
                "description": "Transit Cost",
                "amount": 900
              }
            ]
          },
          "transit_time": {
            "type": "number",
            "nullable": true,
            "description": "Predicted transit time in DAYS. `null` when the carrier does not publish a transit duration - FedEx only publishes one for Ground; its Express services (Overnight, 2Day, Express Saver) commit to an absolute date instead, exposed as `estimated_delivery_date`.",
            "example": 2
          },
          "transit_time_without_team": {
            "type": "number",
            "nullable": true,
            "description": "Transit time in DAYS when the load is driven by a single driver instead of a team. `null` when not applicable.",
            "example": 3
          },
          "estimated_delivery_date": {
            "type": "string",
            "format": "date",
            "nullable": true,
            "description": "Carrier-committed delivery date (`YYYY-MM-DD`). `null` when the carrier does not commit to a date. For FedEx Express services this is the only delivery estimate available, since `transit_time` is not published for them.",
            "example": "2026-09-03"
          },
          "expiration_time_utc": {
            "type": "number",
            "example": 1529107809
          },
          "status": {
            "type": "string",
            "example": "ACCEPT"
          },
          "notes": {
            "type": "string",
            "example": "Expiration time: Jan 1 2019"
          },
          "shipmentType": {
            "type": "string",
            "enum": [
              "LTL",
              "FTL",
              "PARCEL"
            ],
            "description": "The shipment type that was priced.",
            "example": "LTL"
          },
          "insurance": {
            "type": "object",
            "description": "Insurance quote block. Only present when insuranceInfo is provided in the request. Kept separate from price/charges (the freight rate) - it is an independent, optional quote. If the customer opts in, the total payable = price.amount + insurance.total. When the insurance quote fails the block is `{ \"insuranceQuoteId\": null, \"errorMessage\": \"...\" }` and the freight quote is still returned.",
            "properties": {
              "insuranceQuoteId": {
                "type": "string",
                "nullable": true,
                "example": "01J8ZQ7X8N2R6V5F3C4B9D0E1F",
                "description": "The insurance quote id. Pass this as insuranceQuoteId when booking to purchase the insurance. `null` when the insurance quote failed (see errorMessage)."
              },
              "premium": {
                "type": "number",
                "example": 60,
                "description": "The insurance premium."
              },
              "processingFee": {
                "type": "number",
                "example": 6,
                "description": "The WARP processing fee for insurance."
              },
              "total": {
                "type": "number",
                "example": 66,
                "description": "Total insurance charge (premium + processingFee)."
              },
              "currency_code": {
                "type": "string",
                "example": "USD"
              },
              "errorMessage": {
                "type": "string",
                "description": "Only present when the insurance quote failed. Explains why (e.g. commodity excluded, insurer unavailable).",
                "example": "Cannot quote insurance at this time."
              }
            }
          }
        }
      },
      "StopInfo": {
        "type": "object",
        "required": [
          "contactPhone",
          "address"
        ],
        "properties": {
          "locationName": {
            "type": "string",
            "example": "Location Name/ Shipper Name / Consignee Name"
          },
          "contactName": {
            "type": "string",
            "example": "Poppy"
          },
          "contactPhone": {
            "type": "string",
            "example": "234566533"
          },
          "phoneExtension": {
            "type": "string",
            "example": "123"
          },
          "contactEmail": {
            "type": "string",
            "example": "test@testmail.com"
          },
          "address": {
            "$ref": "#/components/schemas/Address"
          },
          "requiresAppointment": {
            "type": "boolean",
            "example": true
          },
          "appointmentInfo": {
            "type": "object",
            "description": "Appointment window of the stop (ISO 8601). Provide it when requiresAppointment is true.",
            "properties": {
              "from": {
                "type": "string",
                "example": "2023-01-04T16:04:40.000Z"
              },
              "to": {
                "type": "string",
                "example": "2023-01-04T16:06:42.000Z"
              }
            }
          },
          "windowTime": {
            "type": "object",
            "description": "Time window of the stop (ISO 8601). Required for pickupInfo, optional for deliveryInfo. `from` must not be later than `to`.",
            "required": [
              "from",
              "to"
            ],
            "properties": {
              "from": {
                "type": "string",
                "format": "date-time",
                "example": "2023-01-13T15:03:07.000Z"
              },
              "to": {
                "type": "string",
                "format": "date-time",
                "example": "2023-01-13T15:07:07.000Z"
              }
            },
            "example": {
              "from": "2023-01-13T15:03:07.000Z",
              "to": "2023-01-13T15:07:07.000Z"
            }
          },
          "instructions": {
            "type": "string",
            "example": "Driver needs to pull up to the back door and ring the bell 4 times."
          },
          "refNum": {
            "type": "string",
            "example": "reference number"
          }
        }
      },
      "TrackingShipmentSuccess": {
        "type": "array",
        "items": {
          "$ref": "#/components/schemas/TrackInfo"
        }
      },
      "TrackInfo": {
        "type": "object",
        "properties": {
          "trackingNumber": {
            "type": "string",
            "description": "The value from the request that matched this shipment.",
            "example": "2E2EWQATEF8K"
          },
          "orderId": {
            "type": "string",
            "example": "01H3W439G5J5Y282KQFQTAQGTD"
          },
          "orderNumber": {
            "type": "string",
            "description": "The display number (code) of the order.",
            "example": "P-01723-2449"
          },
          "shipmentId": {
            "type": "string",
            "example": "01H3W51F7FEC42MFZAXJQTG4CY"
          },
          "shipmentNumber": {
            "type": "string",
            "description": "The display number (code) of the shipment.",
            "example": "S-00524-2635"
          },
          "statusInfo": {
            "type": "object",
            "properties": {
              "status": {
                "type": "string",
                "description": "Current shipment status - see the Shipment status table above.",
                "enum": [
                  "needCarrier",
                  "booked",
                  "dispatched",
                  "arrivedAtPickup",
                  "pickupSuccessful",
                  "pickupFailed",
                  "inRouteToDropoff",
                  "arrivedAtDropoff",
                  "dropoffSuccessful",
                  "dropoffFailed",
                  "complete",
                  "returnInitiated",
                  "inRouteToReturn",
                  "arrivedAtReturn",
                  "returned",
                  "canceled",
                  "inRouteToWareHouse",
                  "arrivedAtWareHouse",
                  "departedFromWarehouse",
                  "lost",
                  "issue",
                  "removed",
                  "disposed"
                ],
                "example": "complete"
              },
              "lastUpdated": {
                "type": "string",
                "format": "date-time",
                "nullable": true,
                "description": "Time of the last status change. `null` when unknown."
              }
            }
          },
          "location": {
            "type": "object",
            "nullable": true,
            "description": "Last known driver location. `null` when the shipment is not on a route yet or no GPS ping exists.",
            "properties": {
              "latitude": {
                "type": "number",
                "example": 37.382544
              },
              "longitude": {
                "type": "number",
                "example": -122.035183
              },
              "lastUpdated": {
                "type": "string",
                "format": "date-time",
                "nullable": true,
                "description": "Time of the GPS ping. `null` when unknown."
              }
            }
          }
        }
      },
      "Shipment": {
        "type": "object",
        "properties": {
          "shipmentId": {
            "type": "string",
            "example": "01H3W51F7FEC42MFZAXJQTG4CY"
          },
          "shipmentNumber": {
            "type": "string",
            "description": "The display number (code) of the shipment.",
            "example": "S-00524-2635"
          },
          "orderId": {
            "type": "string",
            "example": "01H3W439G5J5Y282KQFQTAQGTD"
          },
          "orderNumber": {
            "type": "string",
            "description": "The display number (code) of the order.",
            "example": "P-01723-2449"
          },
          "createDate": {
            "type": "string",
            "example": "2023-06-26T15:10:32.393Z"
          },
          "shipmentType": {
            "type": "string",
            "example": "LTL",
            "enum": [
              "LTL",
              "FTL",
              "PARCEL"
            ]
          },
          "trackingNumber": {
            "type": "string",
            "description": "Identifier accepted by POST /freights/tracking. Usually the shipment code (e.g. S-00524-2635).",
            "example": "S-00524-2635"
          },
          "listItems": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/ShipmentItem"
            }
          },
          "pickupInfo": {
            "$ref": "#/components/schemas/DeliveryInfo"
          },
          "deliveryInfo": {
            "$ref": "#/components/schemas/DeliveryInfo"
          }
        }
      },
      "DeliveryInfo": {
        "type": "object",
        "properties": {
          "contacts": {
            "type": "array",
            "example": [
              {
                "type": "primary",
                "fullName": "Kevin Phung",
                "phone": "0123456789"
              }
            ]
          },
          "address": {
            "$ref": "#/components/schemas/Address"
          },
          "locationName": {
            "type": "string",
            "example": "Location Name"
          },
          "instructions": {
            "type": "string",
            "example": "instructions"
          },
          "refNums": {
            "type": "array",
            "example": [
              "PO-123456"
            ]
          },
          "windows": {
            "type": "array",
            "example": [
              {
                "from": "2023-07-21T23:00:00.000Z",
                "to": "2023-07-21T23:00:00.000Z"
              }
            ]
          },
          "appointmentInfo": {
            "type": "object",
            "example": {
              "from": "2023-07-21T23:00:00.000Z",
              "to": "2023-07-21T23:00:00.000Z"
            }
          },
          "accessCode": {
            "type": "string",
            "example": "accessCode"
          },
          "requiresAppointment": {
            "type": "boolean",
            "example": true
          }
        }
      },
      "ShipmentItem": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string",
            "example": "01H3W439P2X0CSSVG171KT44Q6"
          },
          "itemNumber": {
            "type": "string",
            "example": "29357"
          },
          "name": {
            "type": "string",
            "example": "Item Name"
          },
          "itemId": {
            "type": "string",
            "example": "Id customer defined"
          },
          "qty": {
            "type": "number",
            "example": 1
          },
          "qtyUnit": {
            "type": "string",
            "example": "Pallet"
          },
          "weightUnit": {
            "type": "string",
            "example": "lbs",
            "enum": [
              "lbs",
              "kgs"
            ]
          },
          "weightPerUnit": {
            "type": "number",
            "example": 1
          },
          "sizeUnit": {
            "type": "string",
            "example": "IN",
            "enum": [
              "IN",
              "FT"
            ]
          },
          "length": {
            "type": "number",
            "example": 1
          },
          "width": {
            "type": "number",
            "example": 1
          },
          "height": {
            "type": "number",
            "example": 1
          },
          "temperature_limit": {
            "type": "object",
            "description": "min/max are absent when the item is not temperature controlled.",
            "properties": {
              "min": {
                "type": "number"
              },
              "max": {
                "type": "number"
              }
            },
            "example": {
              "min": 50,
              "max": 100
            }
          },
          "stackable": {
            "type": "boolean",
            "example": false
          },
          "isHazardous": {
            "type": "boolean",
            "example": false
          },
          "barcode": {
            "type": "array",
            "description": "The barcodes of the item (note the singular key in this response).",
            "items": {
              "type": "string"
            },
            "example": [
              "barcode1"
            ]
          }
        }
      },
      "FreightQuoteBody": {
        "type": "object",
        "required": [
          "pickupDate",
          "pickupInfo",
          "deliveryInfo",
          "items"
        ],
        "properties": {
          "pickupDate": {
            "type": "string",
            "format": "date",
            "description": "The earliest pickup date in YYYY-MM-DD format, in the timezone of the pickup stop.",
            "example": "2026-09-20"
          },
          "pickupInfo": {
            "type": "object",
            "required": [
              "zipcode"
            ],
            "properties": {
              "zipcode": {
                "type": "string",
                "example": "90058"
              },
              "country": {
                "type": "string",
                "description": "Country code (ISO 3166-1 alpha-2). Supported: US, CA. Defaults to US.",
                "enum": [
                  "US",
                  "CA"
                ],
                "default": "US",
                "example": "US"
              },
              "serviceOptions": {
                "type": "array",
                "items": {
                  "type": "string",
                  "description": "Delivery service options",
                  "enum": [
                    "photo-required-pickup",
                    "liftgate-pickup",
                    "convention-trade-show-pickup",
                    "inside-pickup",
                    "limited-access-pickup",
                    "residential-pickup",
                    "construction-site-pickup",
                    "pickup-appointment",
                    "pickup-layover",
                    "detention-shipper",
                    "drop-empty",
                    "driver-assist-pickup",
                    "drop-and-hook-pickup",
                    "inside-pickup-upstairs-mezzanine-trash-removal",
                    "inside-pickup-back-side-of-the-house",
                    "inside-pickup-living-space-garage"
                  ]
                }
              }
            }
          },
          "deliveryInfo": {
            "type": "object",
            "required": [
              "zipcode"
            ],
            "properties": {
              "zipcode": {
                "type": "string",
                "example": "90028"
              },
              "country": {
                "type": "string",
                "description": "Country code (ISO 3166-1 alpha-2). Supported: US, CA. Defaults to US.",
                "enum": [
                  "US",
                  "CA"
                ],
                "default": "US",
                "example": "US"
              },
              "serviceOptions": {
                "type": "array",
                "items": {
                  "type": "string",
                  "description": "Delivery service options",
                  "enum": [
                    "photo-required-delivery",
                    "liftgate-delivery",
                    "convention-trade-show-delivery",
                    "inside-delivery",
                    "limited-access-delivery",
                    "residential-delivery",
                    "construction-site-delivery",
                    "delivery-appointment",
                    "delivery-layover",
                    "lumper",
                    "detention-receiver",
                    "redelivery",
                    "drop-loaded",
                    "driver-assist-delivery",
                    "drop-and-hook-delivery",
                    "inside-delivery-upstairs-mezzanine-trash-removal",
                    "inside-delivery-back-side-of-the-house",
                    "inside-delivery-living-space-garage"
                  ]
                }
              }
            }
          },
          "additionalServices": {
            "type": "array",
            "items": {
              "type": "string",
              "description": "Delivery service options",
              "enum": [
                "photo-required",
                "sort-n-seg",
                "extra-stop",
                "extra-miles",
                "driver-assist",
                "notify",
                "check_calls",
                "otp_late_fee",
                "otd_late_fee",
                "carrier_otp",
                "carrier_otd",
                "tonu",
                "miscellaneous",
                "deduction",
                "racket_straps",
                "trailer_rental",
                "storage",
                "cross_dock_charge",
                "drop_loaded_equipment",
                "drop_and_hook",
                "drop_equipment",
                "reweigh_reclass",
                "insurance",
                "chassis_rental"
              ]
            }
          },
          "items": {
            "type": "array",
            "minItems": 1,
            "description": "Line items. `barcodes` is ignored by this endpoint; `temperature_limit` is rejected (reefer not supported yet).",
            "items": {
              "$ref": "#/components/schemas/BookShipmentItem"
            }
          },
          "shipmentType": {
            "type": "string",
            "enum": [
              "LTL",
              "FTL",
              "PARCEL"
            ],
            "default": "LTL",
            "description": "Selects the quote sources: FTL is priced by WARP only; LTL (default) by WARP and the partner LTL carriers; PARCEL by FedEx only (every parcel service level is returned as a separate option). PARCEL items must respect the FedEx limits per package: weight per package (totalWeight / quantity) <= 150 lbs, longest side <= 108 in, length + girth <= 165 in; dimensions, weight and quantity must be > 0.",
            "example": "LTL"
          },
          "vehicleType": {
            "$ref": "#/components/schemas/VehicleType"
          },
          "insuranceInfo": {
            "type": "object",
            "description": "Optional. Provide to receive an insurance quote alongside the freight quote. Both fields are required to get an insurance quote; if omitted or incomplete, the insurance block is skipped.",
            "properties": {
              "insuredValue": {
                "type": "number",
                "example": 20000,
                "description": "The declared value of the goods to be insured (in USD)."
              },
              "commodity": {
                "type": "string",
                "example": "Electronics",
                "description": "A description of the commodity being shipped."
              }
            }
          }
        }
      },
      "FreightBookingShipment": {
        "type": "object",
        "required": [
          "quoteId",
          "pickupInfo",
          "deliveryInfo",
          "items"
        ],
        "properties": {
          "quoteId": {
            "type": "string",
            "description": "The `options[].id` of the chosen option from POST /freights/freight-quote. Must not be expired or already booked; the booking payload must match the quote exactly.",
            "example": "01HG9W6CMAWHNWTVXDKW9QYFS9"
          },
          "pickupInfo": {
            "$ref": "#/components/schemas/BookingStopInfo"
          },
          "deliveryInfo": {
            "$ref": "#/components/schemas/BookingStopInfo"
          },
          "additionalServices": {
            "type": "array",
            "items": {
              "type": "string",
              "description": "Delivery service options",
              "enum": [
                "photo-required",
                "sort-n-seg",
                "extra-stop",
                "extra-miles",
                "driver-assist",
                "notify",
                "check_calls",
                "otp_late_fee",
                "otd_late_fee",
                "carrier_otp",
                "carrier_otd",
                "tonu",
                "miscellaneous",
                "deduction",
                "racket_straps",
                "trailer_rental",
                "storage",
                "cross_dock_charge",
                "drop_loaded_equipment",
                "drop_and_hook",
                "drop_equipment",
                "reweigh_reclass",
                "insurance",
                "chassis_rental"
              ]
            }
          },
          "items": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/BookShipmentItem"
            }
          },
          "insuranceQuoteId": {
            "type": "string",
            "example": "01J8ZQ7X8N2R6V5F3C4B9D0E1F",
            "description": "Optional. The insuranceQuoteId returned in the insurance block of the quote endpoint. Provide it to purchase insurance for this shipment."
          }
        }
      },
      "BookingStopInfo": {
        "type": "object",
        "required": [
          "contactPhone",
          "address",
          "timeWindow"
        ],
        "properties": {
          "locationName": {
            "type": "string",
            "example": "Location Name/ Shipper Name / Consignee Name"
          },
          "contactName": {
            "type": "string",
            "example": "Poppy"
          },
          "contactPhone": {
            "type": "string",
            "example": "234566533"
          },
          "phoneExtension": {
            "type": "string",
            "example": "123"
          },
          "contactEmail": {
            "type": "string",
            "example": "test@testmail.com"
          },
          "address": {
            "$ref": "#/components/schemas/Address"
          },
          "requiresAppointment": {
            "type": "boolean",
            "example": true
          },
          "appointmentInfo": {
            "allOf": [
              {
                "$ref": "#/components/schemas/TimeWindow"
              }
            ],
            "description": "Appointment window (ISO 8601, must be in the future). Provide it when requiresAppointment is true."
          },
          "timeWindow": {
            "allOf": [
              {
                "$ref": "#/components/schemas/TimeWindow"
              }
            ],
            "description": "Time window of the stop (ISO 8601). Both `from` and `to` must be in the future and `from` must not be later than `to`."
          },
          "serviceOptions": {
            "type": "array",
            "items": {
              "type": "string",
              "description": "Service options"
            }
          },
          "instructions": {
            "type": "string",
            "example": "Driver needs to pull up to the back door and ring the bell 4 times."
          },
          "refNums": {
            "type": "array",
            "items": {
              "type": "string"
            }
          }
        }
      },
      "TimeWindow": {
        "type": "object",
        "required": [
          "from",
          "to"
        ],
        "properties": {
          "from": {
            "type": "string",
            "format": "date-time",
            "description": "Starting time of the window in ISO format",
            "example": "2023-01-13T15:03:07.000Z"
          },
          "to": {
            "type": "string",
            "format": "date-time",
            "description": "Ending time of the window in ISO format",
            "example": "2023-01-13T15:07:07.000Z"
          }
        }
      },
      "QuoteOption": {
        "type": "object",
        "properties": {
          "source": {
            "type": "string",
            "description": "Source of Quote Option (WARP network or a partner carrier).",
            "example": "WARP",
            "enum": [
              "WARP",
              "Priority1",
              "WWEX",
              "Exfreight",
              "FFE",
              "ESTES",
              "DAT",
              "FedEx"
            ]
          },
          "id": {
            "type": "string",
            "description": "Quote ID to be used for subsequent booking.",
            "example": "01HG9W6CMAWHNWTVXDKW9QYFS9"
          },
          "carrierCode": {
            "type": "string",
            "description": "SCAC code of the carrier",
            "example": "WTCH"
          },
          "carrierName": {
            "type": "string",
            "description": "Name of the carrier",
            "example": "Warp Technology"
          },
          "serviceLevel": {
            "type": "string",
            "description": "Service level provided by carrier for the corresponding quote option",
            "example": "STD"
          },
          "name": {
            "type": "string",
            "description": "Display name of the option (e.g. the FedEx service name for PARCEL options). Omitted when the source does not provide one.",
            "example": "FedEx Ground"
          },
          "shipmentType": {
            "type": "string",
            "description": "Type of delivery shipment",
            "example": "LTL",
            "enum": [
              "LTL",
              "FTL",
              "PARCEL"
            ]
          },
          "transitTime": {
            "type": "integer",
            "format": "int64",
            "nullable": true,
            "description": "Predicted Transit Time in seconds. Returned as `null` when the carrier does not publish a transit duration - FedEx only publishes one for Ground; its Express services (Overnight, 2Day, Express Saver) commit to an absolute date instead, exposed as `estimatedDeliveryDate`.",
            "example": 86400
          },
          "transitTimeWithoutTeam": {
            "type": "integer",
            "format": "int64",
            "nullable": true,
            "description": "Predicted transit time in seconds when the load is driven by a single driver instead of a team. Returned as `null` when not applicable.",
            "example": 172800
          },
          "estimatedDeliveryDate": {
            "type": "string",
            "format": "date",
            "description": "Carrier-committed delivery date (`YYYY-MM-DD`). Omitted when the carrier does not commit to a date. For FedEx Express services this is the only delivery estimate available, since `transitTime` is not published for them.",
            "example": "2026-09-03"
          },
          "rate": {
            "type": "number",
            "format": "double",
            "description": "Total rate for this option (base freight + accessorials). Equals the sum of serviceCharges.",
            "example": 85
          },
          "serviceCharges": {
            "type": "array",
            "description": "Rate lines making up `rate`: the TRANSIT row is the base freight charge and each SERVICE_OPTION row is an accessorial, so the amounts sum to `rate`. The TRANSIT row is omitted when it cannot be derived so that the rows always reconcile.",
            "example": [
              {
                "code": "SERVICE_OPTION",
                "description": "liftgate-delivery",
                "amount": 10
              },
              {
                "code": "TRANSIT",
                "description": "Transit Cost",
                "amount": 75
              }
            ]
          },
          "expirationTs": {
            "type": "integer",
            "format": "int64",
            "description": "Expiration time in Epoch Milliseconds",
            "example": 1701311408778
          }
        }
      },
      "FreightQuoteResult": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string",
            "description": "Response ID",
            "example": "01HG9W6CKCANZP6J2Q641Q1RTP"
          },
          "requestId": {
            "type": "string",
            "description": "Request ID",
            "example": "01HG9W6CKC67HE3DD2TKBVQXX8"
          },
          "options": {
            "type": "array",
            "description": "List of Quote options with different service levels and rates.",
            "items": {
              "$ref": "#/components/schemas/QuoteOption"
            }
          },
          "insurance": {
            "type": "object",
            "description": "Insurance quote block. Only present when insuranceInfo is provided in the request. Independent of the freight rate options - it is an optional add-on. If the customer opts in, the insurance total is added to the order cost after booking.",
            "properties": {
              "insuranceQuoteId": {
                "type": "string",
                "nullable": true,
                "example": "01J8ZQ7X8N2R6V5F3C4B9D0E1F",
                "description": "The insurance quote id. Pass this as insuranceQuoteId when booking to purchase the insurance. `null` when the insurance quote failed (see errorMessage)."
              },
              "premium": {
                "type": "number",
                "example": 60,
                "description": "The insurance premium."
              },
              "processingFee": {
                "type": "number",
                "example": 6,
                "description": "The WARP processing fee for insurance."
              },
              "total": {
                "type": "number",
                "example": 66,
                "description": "Total insurance charge (premium + processingFee)."
              },
              "currency_code": {
                "type": "string",
                "example": "USD"
              },
              "errorMessage": {
                "type": "string",
                "description": "Only present when the insurance quote failed. Explains why (e.g. commodity excluded, insurer unavailable).",
                "example": "Cannot quote insurance at this time."
              }
            }
          }
        }
      },
      "BookingResult": {
        "type": "object",
        "properties": {
          "message": {
            "type": "string",
            "description": "Only present when the customer balance is not enough to cover this booking. In that case paymentLink is also included.",
            "example": "Your booking has been created successfully. Please add funds to your balance to complete payment and continue with the shipment."
          },
          "trackingNumber": {
            "type": "string",
            "description": "Tracking number of the created shipment - accepted by POST /freights/tracking.",
            "example": "2E2EWQATEF8K"
          },
          "proNumber": {
            "type": "string",
            "description": "The display number (code) of the created order.",
            "example": "P-01723-2449"
          },
          "orderId": {
            "type": "string",
            "example": "01H3W439G5J5Y282KQFQTAQGTD"
          },
          "shipmentIds": {
            "type": "array",
            "description": "Display numbers (codes) of the created shipments - not ULIDs. Use them as shipmentNumber / shipmentId on the other endpoints (both accept the code).",
            "items": {
              "type": "string",
              "example": "S-00524-2635"
            }
          },
          "insuranceStatus": {
            "type": "string",
            "enum": [
              "booked",
              "failed"
            ],
            "example": "booked",
            "description": "Only present when insuranceQuoteId was provided. \"booked\" if insurance was booked insurance successfully, \"failed\" if it could not be booked insurance"
          },
          "paymentLink": {
            "type": "string",
            "format": "uri",
            "description": "Only present when the customer balance is not enough to cover this booking. The order is still created, but it is on hold until the payment is completed. Open this link to add funds and complete the payment.",
            "example": "https://customer.wearewarp.com/dashboard/pay-orders"
          }
        }
      },
      "GetEventsSuccess": {
        "type": "object",
        "properties": {
          "data": {
            "type": "array",
            "description": "Tracking events, oldest first.",
            "items": {
              "type": "object",
              "properties": {
                "message": {
                  "type": "string",
                  "description": "Human readable description of the event.",
                  "example": "Pickup successful"
                },
                "when": {
                  "type": "string",
                  "format": "date-time",
                  "description": "Time the event happened.",
                  "example": "2023-07-10T00:22:42.491Z"
                },
                "createdWhen": {
                  "type": "string",
                  "format": "date-time",
                  "description": "Time the event was recorded.",
                  "example": "2023-07-10T00:22:42.491Z"
                },
                "eventName": {
                  "type": "string",
                  "description": "Shipment status reached by the event, or an appointment event.",
                  "enum": [
                    "needCarrier",
                    "booked",
                    "dispatched",
                    "arrivedAtPickup",
                    "pickupSuccessful",
                    "pickupFailed",
                    "inRouteToDropoff",
                    "arrivedAtDropoff",
                    "dropoffSuccessful",
                    "dropoffFailed",
                    "complete",
                    "returnInitiated",
                    "inRouteToReturn",
                    "arrivedAtReturn",
                    "returned",
                    "canceled",
                    "inRouteToWareHouse",
                    "arrivedAtWareHouse",
                    "departedFromWarehouse",
                    "inTransit",
                    "receivedAtFacility",
                    "departedFacility",
                    "failedAtFacility",
                    "requireAppointmentAtPickup",
                    "requireAppointmentAtDelivery",
                    "updateAppointmentTimeAtPickup",
                    "updateAppointmentTimeAtDelivery",
                    "appointmentConfirmationSentAtPickup",
                    "appointmentConfirmationSentAtDelivery",
                    "appointmentCanceledAtPickup",
                    "appointmentCanceledAtDelivery",
                    "appointmentCancellationSentAtPickup",
                    "appointmentCancellationSentAtDelivery",
                    "appointmentRequestUnansweredAtPickup",
                    "appointmentRequestUnansweredAtDelivery",
                    "appointmentRequestSendFailedAtPickup",
                    "appointmentRequestSendFailedAtDelivery"
                  ],
                  "example": "pickupSuccessful"
                },
                "details": {
                  "type": "object",
                  "description": "Only present on appointment events.",
                  "properties": {
                    "appointmentInfo": {
                      "$ref": "#/components/schemas/TimeWindow"
                    },
                    "contactType": {
                      "type": "string",
                      "description": "How the appointment was arranged.",
                      "enum": [
                        "phone",
                        "sms",
                        "email",
                        "link",
                        "ob_phone"
                      ]
                    }
                  }
                }
              }
            }
          }
        },
        "example": {
          "data": [
            {
              "message": "The shipment was created",
              "when": "2023-07-09T23:23:24.989Z",
              "createdWhen": "2023-07-09T23:23:24.989Z",
              "eventName": "needCarrier"
            },
            {
              "message": "The pickup location requires Appointment.",
              "when": "2023-07-09T23:23:24.992Z",
              "createdWhen": "2023-07-09T23:23:24.992Z",
              "eventName": "requireAppointmentAtPickup"
            },
            {
              "message": "The delivery location requires Appointment.",
              "when": "2023-07-09T23:23:24.992Z",
              "createdWhen": "2023-07-09T23:23:24.992Z",
              "eventName": "requireAppointmentAtDelivery"
            },
            {
              "message": "The pickup appointment Info was updated.",
              "when": "2023-07-09T23:23:37.695Z",
              "createdWhen": "2023-07-09T23:23:37.695Z",
              "eventName": "updateAppointmentTimeAtPickup",
              "details": {
                "appointmentInfo": {
                  "from": "2023-07-10T11:04:33.000Z",
                  "to": "2023-07-10T12:23:35.000Z"
                }
              }
            },
            {
              "message": "The delivery appointment Info was updated.",
              "when": "2023-07-09T23:23:51.202Z",
              "createdWhen": "2023-07-09T23:23:51.202Z",
              "eventName": "updateAppointmentTimeAtDelivery",
              "details": {
                "appointmentInfo": {
                  "from": "2023-07-13T08:23:45.000Z",
                  "to": "2023-07-13T10:23:49.000Z"
                }
              }
            },
            {
              "message": "In Route to Pickup location",
              "when": "2023-07-09T23:33:45.790Z",
              "createdWhen": "2023-07-09T23:33:45.790Z",
              "eventName": "dispatched"
            },
            {
              "message": "Driver arrived at pickup location",
              "when": "2023-07-10T00:22:33.918Z",
              "createdWhen": "2023-07-10T00:22:33.918Z",
              "eventName": "arrivedAtPickup"
            },
            {
              "message": "Pickup successful",
              "when": "2023-07-10T00:22:42.491Z",
              "createdWhen": "2023-07-10T00:22:42.491Z",
              "eventName": "pickupSuccessful"
            },
            {
              "message": "Pickup Appointment Confirmation Sent",
              "when": "2023-07-10T00:30:00.000Z",
              "createdWhen": "2023-07-10T00:30:00.000Z",
              "eventName": "appointmentConfirmationSentAtPickup",
              "details": {
                "appointmentInfo": {
                  "from": "2023-07-10T11:04:33.000Z",
                  "to": "2023-07-10T12:23:35.000Z"
                }
              }
            },
            {
              "message": "Delivery Appointment Canceled",
              "when": "2023-07-10T03:10:00.000Z",
              "createdWhen": "2023-07-10T03:10:00.000Z",
              "eventName": "appointmentCanceledAtDelivery"
            }
          ]
        }
      },
      "GetInvoiceSuccess": {
        "type": "object",
        "properties": {
          "orderId": {
            "type": "string",
            "example": "01H3W439G5J5Y282KQFQTAQGTD"
          },
          "orderNumber": {
            "type": "string",
            "description": "The display number (code) of the order.",
            "example": "P-01723-2449"
          },
          "status": {
            "type": "string",
            "enum": [
              "pending",
              "final"
            ],
            "description": "`final` once the invoice has been sent, `pending` before that.",
            "example": "final"
          },
          "transitCost": {
            "type": "number",
            "description": "Base freight charge (USD). Absent while the order has not been priced.",
            "example": 750
          },
          "volumeDiscount": {
            "type": "number",
            "description": "Volume discount (USD).",
            "example": 75
          },
          "fuelCost": {
            "type": "number",
            "description": "Fuel surcharge (USD).",
            "example": 75
          },
          "serviceOptions": {
            "type": "array",
            "description": "Accessorial charges.",
            "items": {
              "type": "object",
              "properties": {
                "name": {
                  "type": "string",
                  "example": "Extra Miles"
                },
                "total": {
                  "type": "number",
                  "example": 15
                }
              }
            }
          },
          "grandTotal": {
            "type": "number",
            "description": "Total amount of the order (USD).",
            "example": 780
          }
        },
        "example": {
          "orderId": "01H3W439G5J5Y282KQFQTAQGTD",
          "orderNumber": "P-01723-2449",
          "status": "final",
          "transitCost": 750,
          "volumeDiscount": 75,
          "fuelCost": 75,
          "serviceOptions": [
            {
              "name": "Extra Miles",
              "total": 15
            },
            {
              "name": "Photo Required",
              "total": 15
            }
          ],
          "grandTotal": 780
        }
      },
      "GetDocumentsSuccess": {
        "type": "object",
        "properties": {
          "orderId": {
            "type": "string",
            "example": "01H3W439G5J5Y282KQFQTAQGTD"
          },
          "orderNumber": {
            "type": "string",
            "description": "The display number (code) of the order.",
            "example": "P-01723-2449"
          },
          "data": {
            "type": "array",
            "description": "One entry per document file. Empty when the order has no document yet.",
            "items": {
              "type": "object",
              "properties": {
                "type": {
                  "type": "string",
                  "enum": [
                    "pod",
                    "bol",
                    "other"
                  ],
                  "example": "pod"
                },
                "podType": {
                  "type": "string",
                  "enum": [
                    "Photo",
                    "BOL",
                    "Signature"
                  ],
                  "example": "Photo",
                  "nullable": true,
                  "description": "Only present for POD documents."
                },
                "shipmentId": {
                  "type": "string",
                  "example": "01H3W51F7FEC42MFZAXJQTG4CY",
                  "description": "The ID of the shipment the document belongs to."
                },
                "shipmentNumber": {
                  "type": "string",
                  "example": "S-00524-2635",
                  "description": "The display number (code) of the shipment."
                },
                "url": {
                  "type": "string",
                  "description": "Download URL of the file.",
                  "example": "file url"
                },
                "stop": {
                  "type": "object",
                  "description": "The stop the POD was captured at. Only present for POD documents.",
                  "properties": {
                    "type": {
                      "type": "string",
                      "enum": [
                        "PICKUP",
                        "DROPOFF"
                      ],
                      "description": "Type of the stop",
                      "example": "DROPOFF"
                    },
                    "name": {
                      "type": "string",
                      "description": "Location Name/ Shipper Name / Consignee Name",
                      "example": "WATCH-LAX-9"
                    },
                    "street": {
                      "type": "string",
                      "description": "Street",
                      "example": "1305 Wholesale Street"
                    },
                    "city": {
                      "type": "string",
                      "description": "City",
                      "example": "Los Angeles"
                    },
                    "state": {
                      "type": "string",
                      "description": "State",
                      "example": "CA"
                    },
                    "zipcode": {
                      "type": "string",
                      "description": "Zipcode",
                      "example": "90021"
                    }
                  }
                }
              }
            }
          }
        }
      },
      "QuoteHistory": {
        "type": "object",
        "properties": {
          "requestId": {
            "type": "string"
          },
          "responseId": {
            "type": "string"
          },
          "pickupDate": {
            "type": "string"
          },
          "pickupInfo": {
            "type": "object",
            "properties": {
              "zipcode": {
                "type": "string"
              }
            }
          },
          "deliveryInfo": {
            "type": "object",
            "properties": {
              "zipcode": {
                "type": "string"
              }
            }
          },
          "pickupServices": {
            "type": "array",
            "items": {
              "type": "string",
              "enum": [
                "photo-required-pickup",
                "liftgate-pickup",
                "convention-trade-show-pickup",
                "inside-pickup",
                "limited-access-pickup",
                "residential-pickup",
                "construction-site-pickup",
                "pickup-appointment",
                "pickup-layover",
                "detention-shipper",
                "drop-empty",
                "driver-assist-pickup",
                "drop-and-hook-pickup",
                "inside-pickup-upstairs-mezzanine-trash-removal",
                "inside-pickup-back-side-of-the-house",
                "inside-pickup-living-space-garage"
              ]
            }
          },
          "deliveryServices": {
            "type": "array",
            "items": {
              "type": "string",
              "enum": [
                "photo-required-delivery",
                "liftgate-delivery",
                "convention-trade-show-delivery",
                "inside-delivery",
                "limited-access-delivery",
                "residential-delivery",
                "construction-site-delivery",
                "delivery-appointment",
                "delivery-layover",
                "lumper",
                "detention-receiver",
                "redelivery",
                "drop-loaded",
                "driver-assist-delivery",
                "drop-and-hook-delivery",
                "inside-delivery-upstairs-mezzanine-trash-removal",
                "inside-delivery-back-side-of-the-house",
                "inside-delivery-living-space-garage"
              ]
            }
          },
          "additionalServices": {
            "type": "array",
            "items": {
              "type": "string",
              "enum": [
                "photo-required",
                "sort-n-seg",
                "extra-stop",
                "extra-miles",
                "driver-assist",
                "notify",
                "check_calls",
                "otp_late_fee",
                "otd_late_fee",
                "carrier_otp",
                "carrier_otd",
                "tonu",
                "miscellaneous",
                "deduction",
                "racket_straps",
                "trailer_rental",
                "storage",
                "cross_dock_charge",
                "drop_loaded_equipment",
                "drop_and_hook",
                "drop_equipment",
                "reweigh_reclass",
                "insurance",
                "chassis_rental"
              ]
            }
          },
          "items": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/BookShipmentItem"
            }
          },
          "options": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/QuoteOption"
            }
          }
        }
      },
      "GetQuoteHistorySuccess": {
        "type": "array",
        "items": {
          "$ref": "#/components/schemas/QuoteHistory"
        }
      },
      "MultiStopsQuoteBody": {
        "type": "object",
        "required": [
          "pickupDate",
          "pickupInfo",
          "deliveryInfo",
          "transits",
          "listItems"
        ],
        "properties": {
          "pickupDate": {
            "type": "string",
            "format": "date",
            "description": "Pickup date in YYYY-MM-DD format",
            "example": "2026-03-15"
          },
          "pickupInfo": {
            "type": "object",
            "required": [
              "zipcode"
            ],
            "properties": {
              "zipcode": {
                "type": "string",
                "description": "Postal code of the pickup location (US 5-digit or ZIP+4)",
                "example": "90021"
              },
              "country": {
                "type": "string",
                "description": "Country code (ISO 3166-1 alpha-2). Defaults to US. Only US ZIP codes pass the zipcode validation at the moment, so CA cannot be quoted through multi-stops yet.",
                "enum": [
                  "US",
                  "CA"
                ],
                "default": "US",
                "example": "US"
              }
            }
          },
          "deliveryInfo": {
            "type": "object",
            "required": [
              "zipcode"
            ],
            "properties": {
              "zipcode": {
                "type": "string",
                "description": "Postal code of the final delivery location (US 5-digit or ZIP+4)",
                "example": "80238"
              },
              "country": {
                "type": "string",
                "description": "Country code (ISO 3166-1 alpha-2). Defaults to US. Only US ZIP codes pass the zipcode validation at the moment, so CA cannot be quoted through multi-stops yet.",
                "enum": [
                  "US",
                  "CA"
                ],
                "default": "US",
                "example": "US"
              }
            }
          },
          "transits": {
            "type": "array",
            "description": "Intermediate transit stops in route order (min 1, max 18)",
            "minItems": 1,
            "maxItems": 18,
            "items": {
              "type": "object",
              "required": [
                "zipcode"
              ],
              "properties": {
                "zipcode": {
                  "type": "string",
                  "description": "Postal code of the transit stop (US 5-digit or ZIP+4)",
                  "example": "75201"
                },
                "country": {
                  "type": "string",
                  "description": "Country code (ISO 3166-1 alpha-2). Defaults to US. Only US ZIP codes pass the zipcode validation at the moment, so CA cannot be quoted through multi-stops yet.",
                  "enum": [
                    "US",
                    "CA"
                  ],
                  "default": "US",
                  "example": "US"
                }
              }
            },
            "example": [
              {
                "zipcode": "75201"
              },
              {
                "zipcode": "60601"
              }
            ]
          },
          "listItems": {
            "type": "array",
            "description": "1 to 100 items. Bounds: height 0.1-85, length 0.1-636, width 0.1-102, quantity 1-9999, totalWeight 0.01-80000.",
            "minItems": 1,
            "maxItems": 100,
            "items": {
              "$ref": "#/components/schemas/BookShipmentItem"
            }
          },
          "pickupServices": {
            "type": "array",
            "maxItems": 20,
            "items": {
              "$ref": "#/components/schemas/PickupService"
            }
          },
          "deliveryServices": {
            "type": "array",
            "maxItems": 20,
            "items": {
              "$ref": "#/components/schemas/DeliveryService"
            }
          },
          "additionalServices": {
            "type": "array",
            "maxItems": 20,
            "items": {
              "$ref": "#/components/schemas/AdditionalService"
            }
          },
          "shipmentType": {
            "type": "string",
            "enum": [
              "FTL"
            ],
            "default": "FTL",
            "description": "Shipment type. Only FTL is accepted for multi-stops; any other value is rejected with 400."
          },
          "vehicleType": {
            "type": "object",
            "required": [
              "code"
            ],
            "properties": {
              "code": {
                "type": "string",
                "enum": [
                  "DRY_VAN_53",
                  "STRAIGHT_TRUCK_26",
                  "CARGO_VAN"
                ],
                "example": "DRY_VAN_53"
              }
            }
          }
        },
        "example": {
          "pickupDate": "2026-03-15",
          "pickupInfo": {
            "zipcode": "90021"
          },
          "deliveryInfo": {
            "zipcode": "80238"
          },
          "transits": [
            {
              "zipcode": "75201"
            }
          ],
          "listItems": [
            {
              "name": "Electronics Pallet",
              "height": 48,
              "length": 48,
              "width": 48,
              "sizeUnit": "IN",
              "quantity": 1,
              "totalWeight": 500,
              "weightUnit": "lbs"
            }
          ]
        }
      },
      "MultiStopsQuoteResult": {
        "type": "object",
        "properties": {
          "quote_id": {
            "type": "string",
            "description": "Unique quote ID (prefixed with WM, 28 characters). Use this ID when booking. Quotes created before the short ID rollout use the legacy PRICING_MULTI_ prefix and remain valid.",
            "example": "WM01KH5PB2V9QJ6Z8M4T3R7X1C0D"
          },
          "total_charge": {
            "type": "number",
            "description": "Total price for the entire multi-stop route in USD",
            "example": 4425.57
          },
          "transit_time": {
            "type": "number",
            "description": "Estimated transit time in seconds",
            "example": 118800
          },
          "transit_time_without_team": {
            "type": "number",
            "description": "Estimated transit time in seconds when the load is driven by a single driver instead of a team",
            "example": 158400
          },
          "rate_detail": {
            "type": "object",
            "description": "Detailed rate breakdown"
          }
        }
      },
      "MultiStopsStopInfo": {
        "type": "object",
        "required": [
          "stopIndex",
          "address",
          "windowTime"
        ],
        "properties": {
          "stopIndex": {
            "type": "integer",
            "description": "Relative order of this stop in the route (0-999). Same value = same physical stop.",
            "minimum": 0,
            "maximum": 999,
            "example": 0
          },
          "locationName": {
            "type": "string",
            "example": "LA Warehouse"
          },
          "contactName": {
            "type": "string",
            "example": "John Doe"
          },
          "contactPhone": {
            "type": "string",
            "example": "3105551234"
          },
          "phoneExtension": {
            "type": "string",
            "example": "123"
          },
          "contactEmail": {
            "type": "string",
            "example": "john@example.com"
          },
          "address": {
            "$ref": "#/components/schemas/Address"
          },
          "requiresAppointment": {
            "type": "boolean",
            "example": false
          },
          "appointmentInfo": {
            "$ref": "#/components/schemas/TimeWindow"
          },
          "windowTime": {
            "$ref": "#/components/schemas/TimeWindow"
          },
          "instructions": {
            "type": "string",
            "example": "Dock 3, call before arrival"
          },
          "refNum": {
            "type": "string",
            "example": "PO-001"
          }
        }
      },
      "MultiStopsShipmentInput": {
        "type": "object",
        "required": [
          "pickupInfo",
          "deliveryInfo",
          "listItems"
        ],
        "properties": {
          "pickupInfo": {
            "$ref": "#/components/schemas/MultiStopsStopInfo"
          },
          "deliveryInfo": {
            "$ref": "#/components/schemas/MultiStopsStopInfo"
          },
          "listItems": {
            "type": "array",
            "description": "1 to 100 items. Bounds: height 0.1-85, length 0.1-636, width 0.1-102, quantity 1-9999, totalWeight 0.01-80000.",
            "minItems": 1,
            "maxItems": 100,
            "items": {
              "$ref": "#/components/schemas/BookShipmentItem"
            }
          },
          "pickupServices": {
            "type": "array",
            "maxItems": 20,
            "items": {
              "$ref": "#/components/schemas/PickupService"
            }
          },
          "deliveryServices": {
            "type": "array",
            "maxItems": 20,
            "items": {
              "$ref": "#/components/schemas/DeliveryService"
            }
          },
          "additionalServices": {
            "type": "array",
            "maxItems": 20,
            "items": {
              "$ref": "#/components/schemas/AdditionalService"
            }
          }
        }
      },
      "MultiStopsBookingBody": {
        "type": "object",
        "required": [
          "quoteId",
          "shipments"
        ],
        "properties": {
          "quoteId": {
            "type": "string",
            "description": "Quote ID from a previous multi-stops quote request",
            "example": "WM01KH5PB2V9QJ6Z8M4T3R7X1C0D"
          },
          "shipments": {
            "type": "array",
            "description": "List of shipment legs (min 2, max 19). Each shipment has its own pickup and delivery with stopIndex.",
            "minItems": 2,
            "maxItems": 19,
            "items": {
              "$ref": "#/components/schemas/MultiStopsShipmentInput"
            }
          },
          "shipmentType": {
            "type": "string",
            "enum": [
              "FTL"
            ],
            "default": "FTL",
            "description": "Shipment type. Only FTL is accepted; any other value is rejected with 400."
          },
          "vehicleType": {
            "type": "object",
            "properties": {
              "code": {
                "type": "string",
                "enum": [
                  "DRY_VAN_53",
                  "STRAIGHT_TRUCK_26",
                  "CARGO_VAN"
                ]
              },
              "options": {
                "type": "array",
                "items": {
                  "type": "string"
                }
              }
            }
          }
        },
        "example": {
          "quoteId": "WM01KH5PB2V9QJ6Z8M4T3R7X1C0D",
          "shipments": [
            {
              "pickupInfo": {
                "stopIndex": 0,
                "contactName": "John Doe",
                "contactPhone": "3105551234",
                "locationName": "LA Warehouse",
                "address": {
                  "street": "100 S Main St",
                  "city": "Los Angeles",
                  "state": "CA",
                  "zipcode": "90021"
                },
                "windowTime": {
                  "from": "2026-03-15T08:00:00Z",
                  "to": "2026-03-15T17:00:00Z"
                },
                "instructions": "Dock 3",
                "refNum": "PO-001"
              },
              "deliveryInfo": {
                "stopIndex": 1,
                "contactName": "Jane Smith",
                "contactPhone": "2145551234",
                "locationName": "Dallas Distribution Center",
                "address": {
                  "street": "200 Elm St",
                  "city": "Dallas",
                  "state": "TX",
                  "zipcode": "75201"
                },
                "windowTime": {
                  "from": "2026-03-16T08:00:00Z",
                  "to": "2026-03-16T17:00:00Z"
                },
                "refNum": "DO-001"
              },
              "listItems": [
                {
                  "name": "Electronics Pallet",
                  "height": 48,
                  "length": 48,
                  "width": 48,
                  "sizeUnit": "IN",
                  "quantity": 1,
                  "totalWeight": 500,
                  "weightUnit": "lbs"
                }
              ]
            },
            {
              "pickupInfo": {
                "stopIndex": 2,
                "contactName": "Jane Smith",
                "contactPhone": "2145551234",
                "locationName": "Dallas Distribution Center",
                "address": {
                  "street": "200 Elm St",
                  "city": "Dallas",
                  "state": "TX",
                  "zipcode": "75201"
                },
                "windowTime": {
                  "from": "2026-03-16T10:00:00Z",
                  "to": "2026-03-16T18:00:00Z"
                },
                "refNum": "PO-002"
              },
              "deliveryInfo": {
                "stopIndex": 3,
                "contactName": "Bob Wilson",
                "contactPhone": "2125551234",
                "locationName": "NYC Receiving",
                "address": {
                  "street": "300 Broadway",
                  "city": "New York",
                  "state": "NY",
                  "zipcode": "80238"
                },
                "windowTime": {
                  "from": "2026-03-17T08:00:00Z",
                  "to": "2026-03-17T17:00:00Z"
                },
                "refNum": "DO-002"
              },
              "listItems": [
                {
                  "name": "Furniture",
                  "height": 60,
                  "length": 72,
                  "width": 48,
                  "sizeUnit": "IN",
                  "quantity": 2,
                  "totalWeight": 800,
                  "weightUnit": "lbs"
                }
              ]
            }
          ]
        }
      },
      "MultiStopsBookingResult": {
        "type": "object",
        "properties": {
          "message": {
            "type": "string",
            "example": "Success"
          },
          "trackingNumber": {
            "type": "string",
            "description": "The tracking number of the order (same as orderNumber)",
            "example": "123456"
          },
          "orderId": {
            "type": "string",
            "description": "The ID of the created order",
            "example": "01H3W439G5J5Y282KQFQTAQGTD"
          },
          "orderNumber": {
            "type": "string",
            "description": "The display number of the order",
            "example": "123456"
          },
          "shipments": {
            "type": "array",
            "description": "List of created shipments",
            "items": {
              "type": "object",
              "properties": {
                "trackingNumber": {
                  "type": "string",
                  "example": "2E2EWQATEF8K"
                },
                "shipmentId": {
                  "type": "string",
                  "example": "01H4YJBE0NP5NGEN3W07Z6YPM4"
                },
                "shipmentNumber": {
                  "type": "string",
                  "example": "123457"
                },
                "refNum": {
                  "type": "string",
                  "example": "PO-001, DO-001"
                }
              }
            }
          }
        },
        "example": {
          "message": "Success",
          "trackingNumber": "123456",
          "orderId": "01H3W439G5J5Y282KQFQTAQGTD",
          "orderNumber": "123456",
          "shipments": [
            {
              "trackingNumber": "2E2EWQATEF8K",
              "shipmentId": "01H4YJBE0NP5NGEN3W07Z6YPM4",
              "shipmentNumber": "123457",
              "refNum": "PO-001, DO-001"
            },
            {
              "trackingNumber": "3F3FXRBUEG9L",
              "shipmentId": "01H4YJBE0NP5NGEN3W07Z6YPM5",
              "shipmentNumber": "123458",
              "refNum": "PO-002, DO-002"
            }
          ]
        }
      },
      "ErrorResponse": {
        "type": "object",
        "properties": {
          "code": {
            "type": "string",
            "description": "Machine readable error code. One of: internal_server_error, required_field_missing, invalid_field_data, request_unauthorized (401 only), rate_limit_exceeded. Absent on the account-suspended 403 response, which carries `message` alone.",
            "example": "required_field_missing"
          },
          "message": {
            "type": "string",
            "description": "Human readable description of the error.",
            "example": "pickupDate is required!"
          }
        },
        "required": [
          "message"
        ],
        "example": {
          "code": "required_field_missing",
          "message": "pickupDate is required!"
        }
      }
    },
    "securitySchemes": {
      "api_key": {
        "type": "apiKey",
        "name": "apikey",
        "in": "header"
      }
    }
  }
}