Loadsmart Load Offers API

This API allows third parties to search and accept available Offers. ## Webhook events There are few webhook events that can be triggered related to Load Offers API. The following example refers to the webhook events `load_carrier_bounced` and `load_cancelled`: ``` { "event": "load_carrier_bounced", "data": { "load_id": "2ed37107-ebe7-4a60-a20f-01d4e74355c8", "load": { "id": "2ed37107-ebe7-4a60-a20f-01d4e74355c8", "active_offer": { "id": "ccd37107-ebe7-4a60-a20f-01d4e74355c8", "price": 1234.56 }, "carrier": { "id": "89ef54c7-52d5-44a0-b94d-df41eb1aab15", "mc": 123456, "dot": 987654 }, "commodity": "BOTTLED WATER", "distance": 353.6, "equipment_type": "DRV", "requirements": { "beer": false, "chemicals": null, "ctpat": null, "food_grade": null, "frozen": null, "hazmat": null, "hvhr": null, "pharmaceuticals": null, "produce": null, "teams": null, "tsa": null, "twic": null, "vented_vans": null, }, "stops": [ { "address": "109 Poland Spring Dr", "city": "Poland", "country": "USA", "latitude": 44.031602, "longitude": -70.355065, "state": "ME", "type": "PU", "window_end": "2019-11-28T08:00:00+00:00", "window_start": "2019-11-28T06:00:00+00:00", "window_timezone": "America/New_York", "requirements": null, "facility_info": { "avg_time_spent":{ "pickup":40, "delivery": null }, "detention_rate": 4 } }, { "address": "6 Westbelt", "city": "Wayne", "country": "USA", "latitude": 40.900033, "longitude": -74.264872, "state": "NJ", "type": "DEL", "window_end": "2019-11-29T19:00:00+00:00", "window_start": "2019-11-29T17:00:00+00:00", "window_timezone": "America/New_York", "requirements": null, "facility_info": { "avg_time_spent":{ "pickup":null, "delivery": 20 }, "detention_rate": 9 } }, ], "numberweight": 45000.0, "dimensions": {"width": 8.00, "height": 9.00, "length": 54.00} "ref_number": "41324" } } } ``` The following example refers to the webhook events `offer_created` and `offer_removed`: ``` { "event": "offer_created", "data": { "offer": { "id": "ccd37107-ebe7-4a60-a20f-01d4e74355c8", "price": 1234.56, "load": { "equipment_type": "DRV", "commodity": "apples", "weight": 20000, "dimensions": {"width": 8.00, "height": 9.00, "length": 54.00} "distance": 50000, "stops": [ { "type": "PU", "address": "101 Collins Avenue", "city": "Miami Beach", "state": "FL", "country": "USA", "requirements": { "blind_bol": false, "drop_trailer": false, "heavy_scale_ticket": false, "light_scale_ticket": false }, "facility_info": { "avg_time_spent":{ "pickup":40, "delivery": null }, "detention_rate": 4 } "zipcode": "33139", "window_start": "2020-02-13T09:00:00", "window_end": "2018-02-13T11:00:00", "window_timezone": "America/New_York" }, { "type": "DEL", "address": "2022 Collins Avenue", "city": "Miami Beach", "state": "FL", "country": "USA", "requirements": { "blind_bol": false, "drop_trailer": false, "heavy_scale_ticket": false, "light_scale_ticket": false }, "facility_info": { "avg_time_spent":{ "pickup":null, "delivery": 20 }, "detention_rate": 9 } "window_start": "2018-02-14T16:00:00", "window_end": "2018-02-14T18:00:00", "window_timezone": "America/New_York" } ], "requirements": { "beer": false, "chemicals": false, "ctpat": false, "food_grade": false, "frozen": false, "hazmat": false, "hvhr": false, "pharmaceuticals": false, "produce": false, "teams": false, "tsa": false, "twic": false, "vented_vans": false }, "ref_number": "425631" }, "actions": { "redirect_url": "https://loadsmart.com/loads/#/eec5677f-883c-4696-b13b-7539fa98e098", "accept_url": "https://api.loadsmart.com/api/v2/load-offers/offers/ccd37107-ebe7-4a60-a20f-01d4e74355c8/accept" } } } } ```

OpenAPI Specification

loadsmart-load-offers-api-openapi.yml Raw ↑
openapi: 3.0.0
info:
  title: Opendock Nova API Documentation Appointments Load Offers API
  description: "## Welcome to Opendock Nova!\n\n#### What is Opendock Nova?\n\nOpendock is an online dock appointment scheduling tool. Facilities such as warehouses, distribution centers, and\nmanufacturing plants use it to organize their docks and schedule appointments for outbound pickups and inbound\ndeliveries.\nYou can read all our knowledge base\narticles [here.](https://community.loadsmart.com/hc/en-us/sections/24987828169619-Opendock-Nova-Warehouse-API)\n\nWe now provide an SSO option for User Authentication. Read\nthe [docs here.](https://community.loadsmart.com/hc/en-us/articles/14944624317075-Single-Sign-On-SSO-SAML-2-0)\n\n---\n\n## Our APIs\n\nWe have 3 main APIs:\n\n- REST API called _Neutron_ for performing standard HTTP operations.\n- Real-time API called _Subspace_ for receiving streaming events whenever objects are Created/Updated/Deleted.\n- A **\"Reference Number Validation\"** aka \"PO Validation\" _protocol_ for validating PO numbers (or similar) before an\n  appointment is scheduled. Detailed documentation for it can be found\n  here: [PO/Ref Number Validation Implementation](https://community.loadsmart.com/hc/en-us/articles/14946368437907-PO-Ref-Number-Validation-Implementation)\n\n---\n\n## Neutron - REST API\n\nAll endpoints are listed below. Depending on your User Role, some may be forbidden. Almost all endpoints expect a simple\nJWT token to be set in the `Authorization: Bearer` HTTP header. Read more about Bearer\ntokens [here](https://swagger.io/docs/specification/authentication/bearer-authentication/).\n\n### Base URL\n\nThe base URL is the same as it is for this document (look at the current URL in your browser's address bar). For\nexample, our production Neutron Base URL is [https://neutron.opendock.com](https://neutron.opendock.com).\n\n### Authentication\n\nTo start, call the `POST /auth/login` endpoint to exchange your user credentials (email + password) for a simple JWT\ntoken. If you don't have an account yet, reach out to your account admin or contact us for further help.\n\nIf login is successful, the response will be a JWT token to use as your `Bearer` header as described above.\n\nThe JWT expiration time depends on your User Role as well as other factors. You may base64-decode your JWT token to view\nmore technical details about it.\n\n#### Test it:\n\nTo test that your auth headers are set correctly, call the `GET /auth/me` endpoint. It will return a JSON payload with\nyour User information.\n\n---\n\n## Subspace - Real-time Streaming API\n\nSubspace is a _read-only_ API that allows your system to recieve streaming real-time information about changes to your\nAppointments, Warehouses, Docks, etc.\n\nUsing Subspace you can implement a \"push\"-based approach to your integration instead of relying only on \"poll\"-ing\nmethods (which can be inefficient).\n\nSubpsace is based on the famous [`socket.io`](https://socket.io/) library.\n\n### Choosing a socket.io Client\n\nThe socket.io project provides a JavaScript client library that works in the browser as well as NodeJS. However there\nare also client implementations in many other languages including C#, Java, Python, and Go, so you should select the\nappropriate client for your project. A good overview of socket.io and a list of client implementations can be found\nhere: [Socket.IO Introduction](https://socket.io/docs/v4/)\n\n**NOTE:** Currently Opendock uses socket.io server **v4.x** so please make sure to select an appropriate socket.io\nclient version that is protocol compatible.\n\n### Connecting and Authentication\n\nThe base connection URL is the same as the base URL for Neutron above, except with the word \"subspace\" instead of \"\nneutron\". For example, our production Subspace connection URL\nis [wss://subspace.opendock.com](wss://subspace.opendock.com).\n\nFor convenience, the same JWT token obtained from the Neutron `/auth/login` endpoint above is used for Subspace\nauthentication.\n\nConnecting and Authenticating are done in a single operation: simply connect to the following `wss` URL:\n\n```\n<Connection URL>?token=<JWT Token>\n```\n\nThat can be a little confusing to parse. Here's a real-life example connection string:\n\n```\nwss://subspace.opendock.com?token=eyJhbGciOiJIUzI1Ni...(full token continues)\n```\n\n**NOTE:** Currently Opendock only supports the `websocket` transport, so you must specify this in your connection\nsettings.\n\nHere's an example of connecting to Subspace using the JavaScript client:\n\n```JavaScript\n// NOTE: we assume \"accessToken\" was already obtained earlier via a call to '/auth/login'.\nconst baseSubspaceUrl = 'wss://subspace.opendock.com';\nconst url = `${baseSubspaceUrl}?token=${accessToken}`;\nconst socket = io(url, { transports: ['websocket'] }); // Enforce 'websocket' transport only.\n```\n\n### Listening to events\n\nSubspace emits Create/Update/Delete events for each entity in your Org (Appointment, Warehouse, Dock, etc). Your event\nhandler for these events will receive a JSON object containing the details about the given entity.\n\nOnce your socket.io client instance is connected, you can listen for any of these events by constructing the appropriate\nevent string:\n\nEvent strings follow this pattern:\n\n```\n\"{EventType}-{EntityName}\"\n```\n\n`EventType` can be one of: `create`, `update`, or `delete`.\n\n`EntityName` can be any entity in our REST API, such as: `Appointment`, `Warehouse`, `Dock`, etc.\n\nSo for example, to listen to `create` events for `Appointment` entities you would use:\n\n```\n\"create-Appointment\"\n```\n\nOr to listen to `update` events for `Warehouse` entities you would use:\n\n```\n\"update-Warehouse\"\n```\n\n**NOTE:** The event types are lowercase, but the entity names are capitalized (event strings are case-sensitive).\n\nThere is also a `\"heartbeat\"` event that you can listen to, which will emit every 5 seconds with a timestamp and the\nNeutron API version. This can be helpful for ensuring that your connection to Subspace is working correctly.\n\n### Caveats and Limitations\n\nSubspace does not do any sort of \"catch-up\" or \"replay\" of events, you will only get the events that occur after you\nconnect to the socket.io server.\n\nIf your client loses connection for some time, the event messages will not be queued and delivered when you next\nconnect, you will simply start receiving new messages after the point in time that you connected.\n\nFor this reason, even when using Subspace, you may need to occasionally supplement with calls to our REST API (ie.\ngetAll) to fetch entities and keep in sync with the data in Opendock, depending on your needs.\n\n### Example: Listening for Heartbeat\n\nThis event handler will get called periodically with the \"heartbeat\" information:\n\n```JavaScript\nsocket.on('heartbeat', (data) => {\n  console.log(data);\n});\n```\n\nThis will output something like:\n\n```JSON\n{\n  now: '2022-09-15T20:02:20.015Z',\n  version: {\n    major: '2',\n    minor: '5',\n    patch: '16',\n    commit: '4a443fb\\n'\n  }\n}\n```\n\n### Example: Listening for Appointment Creation and Update\n\nIn this example, your event handler will get called whenever an Appointment\nis created in your Org:\n\n```JavaScript\nsocket.on('create-Appointment', (data) => {\n  console.log('appt create:', data);\n});\n```\n\nThe `data` your event handler recieves will be a JSON object containing\nthe Appointment details, like this:\n\n```JSON\n{\n  \"id\": \"9cd63603-a7ff-43c7-8183-befc19a7a81b\",\n  \"createDateTime\": \"2022-07-29T06:49:20Z\",\n  \"lastChangedDateTime\": \"2022-07-29T06:49:20Z\",\n  \"isActive\": true,\n  \"tags\": [],\n  \"type\": \"Standard\",\n  \"status\": \"Scheduled\",\n  \"start\": \"2022-07-29T00:00:00+00:00\",\n  \"end\": \"2022-07-29T01:30:00+00:00\",\n  ...\n  ...\n  ...\n}\n```\n\nIf you also wanted to listen for any changes to existing Appointments\nyou could add another listener:\n\n```JavaScript\nsocket.on('create-Appointment', (data) => {\n  console.log('appt create:', data);\n});\n\nsocket.on('update-Appointment', (data) => {\n  console.log('appt update:', data);\n});\n```\n\nThe `update-Appointment` event handler will receive a similar JSON object\ncontaining the most up-to-date details of the Appointment that was\njust updated.\n\n---\n\n## Nestjsx/Crud\n\n[NestJSX/Crud](https://github.com/nestjsx/crud/wiki/Requests#search) is a robust library designed for creating\nhigh-performance and scalable APIs. With NestJSX/Crud, API\nconsumers can take advantage of a flexible and intuitive approach to querying data.\n\nThis library streamlines the process of searching, sorting, and paginating data to cater to the exact requirements of\nthe API consumer. This feature saves valuable time by allowing the API consumer to bypass irrelevant data, ensuring only\nthe necessary data is obtained.\n\nNote: We encourage use of the `search` parameter (`s=...`), and do not allow use of the deprecated `filter` parameter.\n\n#### Search Examples\n\nFind all active Appointments created or updated since March 15th, 2023 at 8am MST (since created appts also have updated lastChangeDateTime)\n\n```\ns={\"lastChangedDateTime\":{\"$gt\":\"2023-03-15T08:00:00.000-07:00\"}}\n```\n\nFind all soft-deleted (inActive) appointments updated since a date/time (isActive:false indicates soft-deleted)\n\n```\ns={\"$and\":[{\"lastChangedDateTime\": {\"$gt\":\"2023-07-7T00:00:00.000Z\"}},{\"isActive\":false}]}\n```\n\nFind all appointments changed since a date time (both active and inactive).\nThis is useful for integration partners with recurring series who need to know future appointments in the series have been removed\n\n```\ns={\"$and\":[{\"lastChangedDateTime\": {\"$gt\":\"2023-07-7T00:00:00.000Z\"}},{\"$or\":[{\"isActive\":true},{\"isActive\":false}]}]}\n```\n\nFind all Appointment where the `tags` are empty\n\n```\ns={\"tags\": {\"$or\": {\"$isnull\": true, \"$eq\": \"{}\"}}}\n```\n\nFind all Appointments where it includes a tag of `Late`\n\n```\ns={\"tags\":{\"$contL\":\"Late\"}}\n```\n\nFind all appointments in `Scheduled` status set to start after March 15th, 2023 at 8am MST\n\n```\ns={\"$and\":[{\"status\":\"Scheduled\"},{\"start\":{\"$gt\":\"2023-03-15T08:00:00.000-07:00\"}}]}\n```\n\n#### Join examples (with Fields)\n\nTo return data from other tables without the need to make a secondary query, the API consumer can join specific tables\ntogether and request only the fields necessary.\n\nGet the appointment with the carrier and company. This will return a nested `User` with a nested `Company` in the result for\neach appointment.\nOrder matters here. You must first include `user` to get to `user.company`.\n\n```\njoin=user&join=user.company\n```\n\nTo get just the user's email and company's name, you can use the `||` operator.\nBecause `user.companyId = company.id` you must at least include `companyId` on `user`\n\n```\njoin=user||email,companyId&join=user.company||name\n```\n\n#### Other Examples\n\nTo get an appointment's refNumber (PO), start, lastChangedDateTime, and carrier company name\n\n```\ns={\"start\": {\"$gt\":\"2023-03-15T00:00:00.000Z\"}}&join=user||companyId&join=user.company||name&fields=refNumber,lastChangedDateTime,start\n```\n\n---\n"
  version: v4.144.0 - 39b4253
  contact: {}
servers:
- url: https://neutron.opendock.com
  description: Production Server
- url: https://neutron.staging.opendock.com
  description: Staging Server
tags:
- name: Load Offers
  description: "This API allows third parties to search and accept\navailable Offers.\n\n## Webhook events\n\nThere are few webhook events that can be triggered related to Load Offers API.\nThe following example refers to the webhook events `load_carrier_bounced` and `load_cancelled`:\n```\n{\n  \"event\": \"load_carrier_bounced\",\n  \"data\": {\n    \"load_id\": \"2ed37107-ebe7-4a60-a20f-01d4e74355c8\",\n    \"load\": {\n      \"id\": \"2ed37107-ebe7-4a60-a20f-01d4e74355c8\",\n      \"active_offer\": {\n        \"id\": \"ccd37107-ebe7-4a60-a20f-01d4e74355c8\",\n        \"price\": 1234.56\n      },\n      \"carrier\": {\n        \"id\": \"89ef54c7-52d5-44a0-b94d-df41eb1aab15\",\n        \"mc\": 123456,\n        \"dot\": 987654\n      },\n      \"commodity\": \"BOTTLED WATER\",\n      \"distance\": 353.6,\n      \"equipment_type\": \"DRV\",\n      \"requirements\": {\n        \"beer\": false,\n        \"chemicals\": null,\n        \"ctpat\": null,\n        \"food_grade\": null,\n        \"frozen\": null,\n        \"hazmat\": null,\n        \"hvhr\": null,\n        \"pharmaceuticals\": null,\n        \"produce\": null,\n        \"teams\": null,\n        \"tsa\": null,\n        \"twic\": null,\n        \"vented_vans\": null,\n      },\n      \"stops\": [\n        {\n          \"address\": \"109 Poland Spring Dr\",\n          \"city\": \"Poland\",\n          \"country\": \"USA\",\n          \"latitude\": 44.031602,\n          \"longitude\": -70.355065,\n          \"state\": \"ME\",\n          \"type\": \"PU\",\n          \"window_end\": \"2019-11-28T08:00:00+00:00\",\n          \"window_start\": \"2019-11-28T06:00:00+00:00\",\n          \"window_timezone\": \"America/New_York\",\n          \"requirements\": null,\n          \"facility_info\": {\n            \"avg_time_spent\":{\n              \"pickup\":40,\n              \"delivery\": null\n            },\n            \"detention_rate\": 4\n          }\n        },\n        {\n          \"address\": \"6 Westbelt\",\n          \"city\": \"Wayne\",\n          \"country\": \"USA\",\n          \"latitude\": 40.900033,\n          \"longitude\": -74.264872,\n          \"state\": \"NJ\",\n          \"type\": \"DEL\",\n          \"window_end\": \"2019-11-29T19:00:00+00:00\",\n          \"window_start\": \"2019-11-29T17:00:00+00:00\",\n          \"window_timezone\": \"America/New_York\",\n          \"requirements\": null,\n          \"facility_info\": {\n            \"avg_time_spent\":{\n              \"pickup\":null,\n              \"delivery\": 20\n            },\n            \"detention_rate\": 9\n          }\n         },\n      ],\n      \"numberweight\": 45000.0,\n      \"dimensions\": {\"width\": 8.00, \"height\": 9.00, \"length\": 54.00}\n      \"ref_number\": \"41324\"\n    }\n  }\n}\n```\n\nThe following example refers to the webhook events `offer_created` and `offer_removed`:\n```\n{\n  \"event\": \"offer_created\",\n  \"data\": {\n    \"offer\": {\n      \"id\": \"ccd37107-ebe7-4a60-a20f-01d4e74355c8\",\n      \"price\": 1234.56,\n      \"load\": {\n        \"equipment_type\": \"DRV\",\n        \"commodity\": \"apples\",\n        \"weight\": 20000,\n        \"dimensions\": {\"width\": 8.00, \"height\": 9.00, \"length\": 54.00}\n        \"distance\": 50000,\n        \"stops\": [\n          {\n            \"type\": \"PU\",\n            \"address\": \"101 Collins Avenue\",\n            \"city\": \"Miami Beach\",\n            \"state\": \"FL\",\n            \"country\": \"USA\",\n            \"requirements\": {\n              \"blind_bol\": false,\n              \"drop_trailer\": false,\n              \"heavy_scale_ticket\": false,\n              \"light_scale_ticket\": false\n            },\n            \"facility_info\": {\n              \"avg_time_spent\":{\n                \"pickup\":40,\n                \"delivery\": null\n              },\n              \"detention_rate\": 4\n            }\n            \"zipcode\": \"33139\",\n            \"window_start\": \"2020-02-13T09:00:00\",\n            \"window_end\": \"2018-02-13T11:00:00\",\n            \"window_timezone\": \"America/New_York\"\n          },\n          {\n            \"type\": \"DEL\",\n            \"address\": \"2022 Collins Avenue\",\n            \"city\": \"Miami Beach\",\n            \"state\": \"FL\",\n            \"country\": \"USA\",\n            \"requirements\": {\n              \"blind_bol\": false,\n              \"drop_trailer\": false,\n              \"heavy_scale_ticket\": false,\n              \"light_scale_ticket\": false\n            },\n            \"facility_info\": {\n              \"avg_time_spent\":{\n                \"pickup\":null,\n                \"delivery\": 20\n              },\n              \"detention_rate\": 9\n            }\n            \"window_start\": \"2018-02-14T16:00:00\",\n            \"window_end\": \"2018-02-14T18:00:00\",\n            \"window_timezone\": \"America/New_York\"\n          }\n        ],\n        \"requirements\": {\n          \"beer\": false,\n          \"chemicals\": false,\n          \"ctpat\": false,\n          \"food_grade\": false,\n          \"frozen\": false,\n          \"hazmat\": false,\n          \"hvhr\": false,\n          \"pharmaceuticals\": false,\n          \"produce\": false,\n          \"teams\": false,\n          \"tsa\": false,\n          \"twic\": false,\n          \"vented_vans\": false\n        },\n        \"ref_number\": \"425631\"\n      },\n      \"actions\": {\n        \"redirect_url\": \"https://loadsmart.com/loads/#/eec5677f-883c-4696-b13b-7539fa98e098\",\n        \"accept_url\": \"https://api.loadsmart.com/api/v2/load-offers/offers/ccd37107-ebe7-4a60-a20f-01d4e74355c8/accept\"\n      }\n    }\n  }\n}\n```\n"
paths:
  /api/v2/load-offers/offers:
    get:
      summary: Search offers
      tags:
      - Load Offers
      security:
      - Application-JWT:
        - load_offers_read
      description: 'Search offers

        '
      parameters:
      - in: query
        name: alcohol
        schema:
          description: Show only loads that have/don't have alcoholic commodity (shows all loads if not informed)
          type: string
          format: boolean
        required: false
      - in: query
        name: equipment_type
        schema:
          description: "The type of truck used to transport the load:\n * `DRV` - Dry van\n * `FBE` - Flatbed\n * `RFR` - Reefer\n * `CON` - Conestoga\n * `CUR` - Curtainside\n * `DDP` - Double drop\n * `IMC` - Intermodal\n * `SDK` - Step deck\n * `STK` - Straight truck\n * `LTL` - Less than truckload\n * `BLK` - Bulk\n * `TNK` - Tanker\n * `OTH` - Others\n\nRepeat the query string in order to search for multiple types at the same time, e.g: `?equipment_type=DRV&equipment_type=FBE`\n"
          type: string
          enum:
          - DRV
          - FBE
          - RFR
          - CON
          - CUR
          - DDP
          - IMC
          - SDK
          - STK
          - LTL
          - BLK
          - TNK
          - OTH
        required: false
      - in: query
        name: start_date
        schema:
          description: Date
          type: string
          format: YYYY-MM-DD
        required: false
      - in: query
        name: end_date
        schema:
          description: Date
          type: string
          format: YYYY-MM-DD
        required: false
      - in: query
        name: origin_lat
        schema:
          description: Origin latitude
          type: number
        required: false
      - in: query
        name: origin_lon
        schema:
          description: Origin longitude
          type: number
        required: false
      - in: query
        name: origin_radius
        schema:
          description: Radius for origin field (Miles)
          type: number
          format: integer
        required: false
      - in: query
        name: destination_lat
        schema:
          description: Destination latitude
          type: number
        required: false
      - in: query
        name: destination_lon
        schema:
          description: Destination longitude
          type: number
        required: false
      - in: query
        name: destination_radius
        schema:
          description: Radius for destitation field (Miles)
          type: number
          format: integer
        required: false
      - in: query
        name: mc
        schema:
          description: Carrier's MC number
          type: string
        required: false
      - in: query
        name: dot
        schema:
          description: Carrier's DOT number
          type: string
        required: false
      responses:
        '200':
          description: Success
          content:
            application/json:
              schema:
                type: object
                properties:
                  count:
                    description: Number of objects found
                    type: number
                    format: integer
                  next:
                    description: URL for next page of results
                    type: string
                    format: url
                  previous:
                    description: URL for previous page of results
                    type: string
                    format: url
                  results:
                    type: array
                    items:
                      type: object
                      properties:
                        id:
                          type: string
                          description: Offer unique identifier (UUID)
                        price:
                          type: number
                          description: Offer price (USD)
                        load:
                          type: object
                          properties:
                            equipment_type:
                              type: string
                              enum:
                              - DRV
                              - FBE
                              - RFR
                              - CON
                              - CUR
                              - DDP
                              - IMC
                              - SDK
                              - STK
                              - LTL
                              - BLK
                              - TNK
                              - OTH
                              description: The type of truck used to transport the load. Allowed values are DRV (dry van), FBE (flatbed), RFR (reefer), CON (conestoga), CUR (curtainside), DDP (double drop), IMC (intermodal), SDK (step deck), STK (straight truck), LTL (less than truckload), BLK (bulk), TNK (tanker) and OTH for others.
                            commodity:
                              type: string
                              maxLength: 255
                              description: Name or description of the commodity that is being shipped.
                            weight:
                              type: number
                              minimum: 1
                              description: Weight of the cargo in pounds (lbs).
                            dimensions:
                              type: object
                              description: 'Dimensions of the cargo in feet (ft).

                                A `null` dimension means that the information is unavailable.

                                '
                              properties:
                                weight:
                                  type: number
                                  nullable: true
                                height:
                                  type: number
                                  nullable: true
                                width:
                                  type: number
                                  nullable: true
                            distance:
                              type: number
                              minimum: 1
                              description: Total distance of the shipment, in miles. This counts all stops.
                            stops:
                              type: array
                              items:
                                type: object
                                properties:
                                  type:
                                    type: string
                                    enum:
                                    - PU
                                    - DEL
                                    description: Type of the stop. Pickup (PU) or Delivery (DEL).
                                  address:
                                    type: string
                                  city:
                                    type: string
                                  state:
                                    type: string
                                    pattern: ^[A-Z0-9]{1,3}$
                                    description: 'Up to 3-alphanumeric characters representing state or equivalent administrative boundary,

                                      from the second part of ISO 3166-2 code definition.

                                      For example, Florida is FL, since its ISO 3166-2 is US-FL.

                                      '
                                  country:
                                    type: string
                                    pattern: ^[A-Z]{3}$
                                    description: 3 letter country code (ISO-3166-1 alpha3).
                                  latitude:
                                    type: number
                                    description: Latitude coordinate of the stop
                                  longitude:
                                    type: number
                                    description: Longitude coordinate of the stop
                                  zipcode:
                                    type: string
                                    description: Zipcode of the stop (first five digits)
                                  window_start:
                                    type: string
                                    format: naive date-time
                                    description: A datetime that represents the start of a time window for this stop (pickup or delivery). In local time.
                                  window_end:
                                    type: string
                                    format: naive date-time
                                    description: A datetime that represents the start of a time window for this stop (pickup or delivery). In local time.
                                  window_timezone:
                                    type: string
                                    description: A timezone identifier for the stop.
                                  requirements:
                                    type: array
                                    description: 'A list of requirements for the Stop, such as drop_trailer, etc.

                                      '
                                  facility_info:
                                    type: object
                                    description: Detention rate and average waiting time on the facility
                                    properties:
                                      avg_time_spent:
                                        type: object
                                        description: Average waiting on facility
                                        properties:
                                          pickup:
                                            type: number
                                            description: Average waiting time in minutes for pickup
                                          delivery:
                                            type: number
                                            description: Average waiting time in minutes for delivery
                                      detention_rate:
                                        type: number
                                        description: Facility detention rate (0 to 100)
                            requirements:
                              type: object
                              description: 'Requirements for the load

                                '
                              properties:
                                beer:
                                  type: boolean
                                chemicals:
                                  type: boolean
                                ctpat:
                                  type: boolean
                                food_grade:
                                  type: boolean
                                frozen:
                                  type: boolean
                                hazmat:
                                  type: boolean
                                hvhr:
                                  type: boolean
                                pharmaceuticals:
                                  type: boolean
                                produce:
                                  type: boolean
                                teams:
                                  type: boolean
                                tsa:
                                  type: boolean
                                twic:
                                  type: boolean
                                vented_vans:
                                  type: boolean
                            ref_number:
                              type: string
                              description: Human readable Load reference number.
                          required:
                          - ref_number
                          - equipment_type
                        actions:
                          type: object
                          properties:
                            redirect_url:
                              type: string
                              description: URL of offer on Loadsmart website.
                            accept_url:
                              type: string
                              description: URL to accept the offer via API (must be a POST method).
              example:
                count: 2
                next: null
                previous: null
                results:
                - id: ccd37107-ebe7-4a60-a20f-01d4e74355c8
                  price: 1234.56
                  load:
                    equipment_type: DRV
                    commodity: apples
                    weight: 20000
                    dimensions:
                      width: 8
                      height: 8
                      length: 54
                    distance: 50000
                    stops:
                    - type: PU
                      address: 101 Collins Avenue
                      city: Miami Beach
                      state: FL
                      country: USA
                      latitude: 41.203996
                      longitude: -96.115593
                      requirements:
                        blind_bol: false
                        drop_trailer: false
                        heavy_scale_ticket: false
                        light_scale_ticket: false
                      facility_info:
                        avg_time_spent:
                          pickup: 40
                          delivery: 180
                        detention_rate: 4
                      zipcode: '33139'
                      window_start: 2020-02-13 09:00:00
                      window_end: 2018-02-13 11:00:00
                      window_timezone: America/New_York
                    - type: DEL
                      address: 2022 Collins Avenue
                      city: Miami Beach
                      state: FL
                      country: USA
                      latitude: 42.535793
                      longitude: -70.966568
                      requirements:
                        blind_bol: false
                        drop_trailer: false
                        heavy_scale_ticket: false
                        light_scale_ticket: false
                      facility_info:
                        avg_time_spent:
                          pickup: 20
                          delivery: 20
                        detention_rate: 0
                      window_start: 2018-02-14 16:00:00
                      window_end: 2018-02-14 18:00:00
                      window_timezone: America/New_York
                    requirements:
                      beer: false
                      chemicals: false
                      ctpat: false
                      food_grade: false
                      frozen: false
                      hazmat: false
                      hvhr: false
                      pharmaceuticals: false
                      produce: false
                      teams: false
                      tsa: false
                      twic: false
                      vented_vans:

# --- truncated at 32 KB (125 KB total) ---
# Full source: https://raw.githubusercontent.com/api-evangelist/loadsmart/refs/heads/main/openapi/loadsmart-load-offers-api-openapi.yml