Quotes

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)
  • mode: How the quoted freight moves
  • order: Order details including stops

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

  • Base URL: https://api.mvmnt.io/v1
  • URL: https://api.mvmnt.io/v1/quotes
  • Auth: HTTP bearer

Request body

mode'FTL' | 'TL' | 'LTL' | 'PTL' | 'RLTL' | 'BULK' | 'AIR' | 'OCEAN' | 'RAIL' | 'INTERMODAL' | 'DRAYAGE' | 'AUTO' | 'EXPEDITED_AIR' | 'EXPEDITED_GROUND'

Transportation mode. Optional on write — a shipment or load created without one is stored with no mode, the same as one created in the TMS.

  • FTL: Full Truckload — the value the TMS stores and always returns
  • TL: legacy spelling of FTL, still accepted on write, never returned
  • LTL: Less than Truckload
  • PTL: Partial Truckload
  • RLTL: Retail LTL
  • BULK: Bulk truckload freight
  • AUTO: Auto transport
  • EXPEDITED_AIR: Expedited air
  • EXPEDITED_GROUND: Expedited ground
  • AIR: Air freight
  • OCEAN: Ocean freight
  • RAIL: Rail freight
  • INTERMODAL: Intermodal (multiple modes)
  • DRAYAGE: Drayage/cartage
amountnumber

Quoted price

expiresAtstring date-time

Quote expiration

Response

Quote created successfully

idstring uuid required

Unique identifier

friendlyIdstring required

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

keystring nullable

Client-defined reference identifier for this quote

side'SELL' | 'BUY' required

Quote direction.

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

Current status in the quote lifecycle.

Initial states:

  • CREATED: Quote being built (not yet drafted)
  • NOT_A_QUOTE: Marked as not an actual quote
  • 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' | 'WITHDRAWN' | '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
  • WITHDRAWN: The offer was withdrawn before it was accepted
  • 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",
  "friendlyId": "Q003602",
  "key": "my-quote-001",
  "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"
  }
}

Changes

    • breaking

      request property // was restricted to a list of enum values

    • breaking

      request property // was restricted to a list of enum values

    • breaking

      request property //// was restricted to a list of enum values

    • breaking

      request property //// was restricted to a list of enum values

    • breaking

      request property //// was restricted to a list of enum values

    • breaking

      request property // was restricted to a list of enum values

    • info

      added the new 100 enum value to the request property ////

    • info

      added the new 110 enum value to the request property ////

    • info

      added the new 125 enum value to the request property ////

    • info

      added the new 150 enum value to the request property ////

    • info

      added the new 175 enum value to the request property ////

    • info

      added the new 200 enum value to the request property ////

    • info

      added the new 250 enum value to the request property ////

    • info

      added the new 300 enum value to the request property ////

    • info

      added the new 400 enum value to the request property ////

    • info

      added the new 50 enum value to the request property ////

    • info

      added the new 500 enum value to the request property ////

    • info

      added the new 55 enum value to the request property ////

    • info

      added the new 60 enum value to the request property ////

    • info

      added the new 65 enum value to the request property ////

    • info

      added the new 70 enum value to the request property ////

    • info

      added the new 77.5 enum value to the request property ////

    • info

      added the new 85 enum value to the request property ////

    • info

      added the new 92.5 enum value to the request property ////

    • info

      added the new CM enum value to the request property //

    • info

      added the new CM enum value to the request property ////

    • info

      added the new CORROSIVE enum value to the request property //

    • info

      added the new EXPLOSIVES enum value to the request property //

    • info

      added the new FLAMMABLE_COMBUSTIBLE_LIQUID enum value to the request property //

    • info

      added the new FLAMMABLE_SOLID_COMBUSTIBLE_DANGEROUS_WHEN_WET enum value to the request property //

    • info

      added the new FT enum value to the request property //

    • info

      added the new FT enum value to the request property ////

    • info

      added the new GASES enum value to the request property //

    • info

      added the new IN enum value to the request property //

    • info

      added the new IN enum value to the request property ////

    • info

      added the new KG enum value to the request property ////

    • info

      added the new KG enum value to the request property //

    • info

      added the new LB enum value to the request property ////

    • info

      added the new LB enum value to the request property //

    • info

      added the new M enum value to the request property //

    • info

      added the new M enum value to the request property ////

    • info

      added the new MISCELLANEOUS enum value to the request property //

    • info

      added the new OXIDIZER_ORGANIC_PEROXIDE enum value to the request property //

    • info

      added the new POISON_INHALATION_HAZARD enum value to the request property //

    • info

      added the new RADIOACTIVE enum value to the request property //

    • info

      added the new SHORT_TON enum value to the request property ////

    • info

      added the new SHORT_TON enum value to the request property //

    • info

      added the new TONNE enum value to the request property ////

    • info

      added the new TONNE enum value to the request property //

    • breaking

      the response's body type changed from object to no type for status

    • breaking

      removed the required property from the response with the status

    • breaking

      removed the required property from the response with the status

    • breaking

      removed the required property from the response with the status

    • breaking

      removed the required property from the response with the status

    • breaking

      removed the required property from the response with the status

    • breaking

      removed the required property from the response with the status

    • breaking

      removed the required property from the response with the status

    • info

      added the new DROP enum value to the request property ///

    • info

      added the new PICK enum value to the request property ///

    • info

      added subschema #2 to the response body allOf list for the response status

    • info

      media type application/json was changed to a more specific media type application/problem+json for the response status

    • info

      media type application/json was changed to a more specific media type application/problem+json for the response status

    • info

      media type application/json was changed to a more specific media type application/problem+json for the response status

    • info

      added the optional property to the response with the status

    • info

      added the optional property to the response with the status

    • info

      added the optional property to the response with the status

    • info

      added the optional property to the response with the status

    • info

      added the optional property to the response with the status

    • info

      added the optional property to the response with the status

    • info

      added the optional property to the response with the status

    • info

      added the optional property to the response with the status

    • info

      added the required property to the response with the status

    • info

      added the required property to the response with the status

    • info

      added the required property to the response with the status

    • info

      added the required property to the response with the status

    • info

      added the required property to the response with the status

    • info

      added the required property to the response with the status