Get drayage rates

​

Price moving a container by truck (drayage) between a port or rail ramp and an inland address, from the carriers' drayage contracts.

Every contract in its validity window today whose lane and container size match is priced: the base rate, each extra charge (accessorial), and the total. A lane matches on country and city always; on state when both the request and the contract have one; and, if you send a ZIP, only on that exact ZIP. Use GET /drayage/locations to find the city, state code and ZIP to send.

origin and destination are JSON objects in the query string (URL-encode them), e.g. origin={"city":"Los Angeles","state":"CA","country":"US"}.

Rates come cheapest total first. Page with limit (at most 100) and offset; total is the number of matches across every page. No matching contract is not an error: items is empty.

API key scope required: rates:read.

Query Parameters

  • Where the move starts, as a JSON object: city and country (two-letter code) are required; state (a code such as CA, not the full name) and zip are optional. A port city for an import, or the inland address for an export.

  • Where the move ends, as a JSON object, the same shape as origin.

  • The container size in feet, e.g. 20, 40, 40HC (high cube), 45 or 53. Punctuation is ignored, so 40HC matches a contract's 40'HC.

  • How many rates to return, 1 to 100.

  • How many rates to skip, for the next page.

Responses

  • application/json
  • application/json
  • application/json
  • application/json
  • application/json
  • application/json
Request Example for get/drayage/rates
curl 'https://api-dev.highqube.ai/drayage/rates?origin=%7B%22city%22%3A%22Los%20Angeles%22%2C%22state%22%3A%22CA%22%2C%22country%22%3A%22US%22%7D&destination=%7B%22city%22%3A%22Ontario%22%2C%22state%22%3A%22CA%22%2C%22country%22%3A%22US%22%7D&container_size=40HC&limit=25&offset=0' \
  --header 'Authorization: Bearer YOUR_SECRET_TOKEN'
Los Angeles port to Ontario, CA, 40'HC

The fuel surcharge is a percentage and counts in the total. Chassis and waiting time are billed on actual use, so they are listed with included_in_total: false.

{
  "success": true,
  "message": "Drayage rates fetched successfully",
  "data": {
    "origin": {
      "city": "Los Angeles",
      "state": "CA",
      "country": "US",
      "zip": null
    },
    "destination": {
      "city": "Ontario",
      "state": "CA",
      "country": "US",
      "zip": null
    },
    "container_size": "40HC",
    "items": [
      {
        "contract_id": 1,
        "carrier": "Midway Container Transport",
        "contract_name": "MCT 2026-27 Port and Rail Drayage",
        "location_id": 7,
        "rate_id": 23,
        "container_size": "40'HC",
        "container_type": "Dry",
        "origin": {
          "city": "Los Angeles",
          "state": "CA",
          "country": "US",
          "zip": null
        },
        "destination": {
          "city": "Ontario",
          "state": "CA",
          "country": "US",
          "zip": "91761"
        },
        "charges": {
          "base_charge": "575.00",
          "currency": "USD",
          "accessorial_charges": [
            {
              "surcharge_code": "FSC",
              "description": "Fuel surcharge, a percentage of the line-haul rate",
              "rate": "28.5000",
              "rate_basis": "PERCENTAGE",
              "currency": "USD",
              "units_free": 0,
              "min_charge": null,
              "max_charge": null,
              "amount": "163.88",
              "included_in_total": true,
              "note": null
            },
            {
              "surcharge_code": "CHS",
              "description": "Chassis, per day of use (2-day minimum)",
              "rate": "40.0000",
              "rate_basis": "PER_DAY",
              "currency": "USD",
              "units_free": 0,
              "min_charge": "80.00",
              "max_charge": null,
              "amount": null,
              "included_in_total": false,
              "note": "Billed per day of actual usage; not included in this quote's total since usage is unknown at quote time."
            },
            {
              "surcharge_code": "WTG",
              "description": "Waiting time at the terminal or the door, after 2 free hours",
              "rate": "85.0000",
              "rate_basis": "PER_HOUR",
              "currency": "USD",
              "units_free": 2,
              "min_charge": null,
              "max_charge": null,
              "amount": null,
              "included_in_total": false,
              "note": "Billed per hour of actual usage; not included in this quote's total since usage is unknown at quote time."
            },
            {
              "surcharge_code": "STG",
              "description": "Storage at our yard, after 1 free day",
              "rate": "55.0000",
              "rate_basis": "PER_DAY",
              "currency": "USD",
              "units_free": 1,
              "min_charge": null,
              "max_charge": null,
              "amount": null,
              "included_in_total": false,
              "note": "Billed per day of actual usage; not included in this quote's total since usage is unknown at quote time."
            }
          ],
          "total": "738.88"
        }
      }
    ],
    "total": 1,
    "pagination": {
      "limit": 25,
      "offset": 0,
      "total_count": 1,
      "returned_count": 1,
      "order_by": null
    }
  },
  "errors": null,
  "meta": null
}
Preview. Everything here runs against the sandbox, api-dev.highqube.ai, with test keys. Get a key