v1

latestOpenAPI 3.1.0Proprietary2026-08-06177398877.4 KB
Quotes

Create a quote

Create a new quote with order details.

How it works

Creating a quote also creates an associated Order containing the route and freight details. The Order is embedded in the Quote and cannot be managed separately.

Required fields

  • customer: Reference to the customer (shipper profile)
  • order: Order details including stops and mode

Example workflow

  1. Create quote with customer and order details
  2. Add pricing (amount) via PATCH
  3. Send to customer (status changes to QUOTED)
  4. Convert to shipment when accepted (POST /quotes/{id}/convert-to-shipment)
post/quotes

Request body

amountnumber

Quoted price

expiresAtstring date-time

Quote expiration

Example request

{
  "order": {
    "stops": [
      {
        "address": {
          "line1": "123 Main St",
          "line2": "Suite 400",
          "city": "Chicago",
          "country": "USA",
          "market": "CHI",
          "latitude": "41.8781",
          "longitude": "-87.6298",
          "isSmartyValidated": true,
          "obeysDst": true
        }
      }
    ]
  }
}

Response

Quote created successfully

idstring uuid required

Unique identifier

keystring required

Human-readable quote ID (e.g., "Q003602")

side'SELL' | 'BUY' required

Quote direction.

  • SELL: Selling to shipper (customer quote)
  • BUY: Buying from carrier (carrier quote)
status'DRAFT' | 'REQUESTED' | 'QUOTED' | 'RECEIVED_REPLY' | 'SENT_REPLY' | 'RECEIVED_COUNTER' | 'SENT_COUNTER' | 'WON' | 'LOST' | 'PASS' | 'CANCELED' required

Current status in the quote lifecycle.

Initial states:

  • DRAFT: Quote being drafted
  • REQUESTED: Customer requested a quote (needs pricing)

Active states:

  • QUOTED: Price sent to customer
  • RECEIVED_REPLY: Received reply from customer
  • SENT_REPLY: Sent reply to customer
  • RECEIVED_COUNTER: Received counter-offer
  • SENT_COUNTER: Sent counter-offer

Final states:

  • WON: Customer accepted the quote
  • LOST: Quote not accepted
  • PASS: Broker declined to quote
  • CANCELED: Quote canceled
amountnumber nullable

Quoted price

targetnumber nullable

Target price for margin calculation

marginnumber nullable

Calculated margin percentage

expiresAtstring date-time nullable

Quote expiration timestamp

lostReason'EXPIRED' | 'NO_REASON' | 'NO_RESPONSE' | 'TOO_HIGH' | 'TOO_SLOW' | 'TRUCK_NOT_AVAILABLE' | 'OTHER'

Reason why the quote was lost.

  • EXPIRED: Quote expired without response
  • NO_REASON: No specific reason given
  • NO_RESPONSE: Customer didn't respond
  • TOO_HIGH: Price was too high
  • TOO_SLOW: Response was too slow
  • TRUCK_NOT_AVAILABLE: Capacity not available
  • OTHER: Other reason (see lostReasonText)
lostReasonTextstring nullable

Additional text for lost reason

closedTimestring date-time nullable

When the quote was closed (won/lost)

shipmentIdstring uuid nullable

Shipment ID if converted

shipmentKeystring nullable

Shipment friendly ID if converted

createdAtstring date-time required
updatedAtstring date-time nullable

Example response

{
  "id": "550e8400-e29b-41d4-a716-446655440000",
  "key": "Q003602",
  "amount": 2500,
  "target": 2200,
  "margin": 12,
  "customer": {
    "id": "550e8400-e29b-41d4-a716-446655440000",
    "key": "ERP-CUSTOMER-ACME",
    "name": "Acme Manufacturing Corp",
    "friendlyId": "A123456",
    "status": "ACTIVE",
    "phoneNumber": "+1-555-123-4567",
    "website": "https://acme-manufacturing.com",
    "createdAt": "2025-01-15T10:00:00Z",
    "updatedAt": "2025-01-15T14:30:00Z"
  },
  "carrier": {
    "id": "550e8400-e29b-41d4-a716-446655440000",
    "key": "ERP-CARRIER-SWIFT",
    "name": "Swift Transportation",
    "phoneNumber": "+1-555-987-6543",
    "email": "dispatch@swifttrans.com",
    "createdAt": "2025-01-15T10:00:00Z",
    "updatedAt": "2025-01-15T14:30:00Z"
  },
  "assignee": {
    "id": "550e8400-e29b-41d4-a716-446655440000",
    "key": "ERP-USER-12345",
    "email": "john.doe@example.com",
    "name": "John Doe",
    "phone": "+1-555-123-4567",
    "phoneExt": "123",
    "status": "ACTIVE",
    "avatarId": "7c9e6679-7425-40de-944b-e07fc1f90ae7",
    "createdAt": "2025-01-15T10:00:00Z",
    "updatedAt": "2025-01-15T14:30:00Z"
  }
}