Skip to content

MVMNT API (1.0.0)

The MVMNT API enables you to automate freight brokerage workflows by integrating directly with our Transportation Management System.

Authentication

OAuth 2.0 client credentials flow. See Authentication Guide for details.

Token Endpoint

POST https://api.mvmnt.io/oauth2/token

Request

Headers:

Content-Type: application/x-www-form-urlencoded

Body Parameters:

grant_type=client_credentials
client_id=YOUR_CLIENT_ID
client_secret=YOUR_CLIENT_SECRET

Example Request

curl -X POST https://api.mvmnt.io/oauth2/token \
  -H "Content-Type: application/x-www-form-urlencoded" \
  -d "grant_type=client_credentials" \
  -d "client_id=YOUR_CLIENT_ID" \
  -d "client_secret=YOUR_CLIENT_SECRET"

Success Response

Status: 200 OK

{
  "access_token": "eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9...",
  "token_type": "Bearer",
  "expires_in": 3600
}

Response Fields:

  • access_token: JWT Bearer token to use for API requests
  • token_type: Always Bearer
  • expires_in: Token lifetime in seconds (3600 = 1 hour)
Download OpenAPI description
Overview
Languages
Servers
Mock server
https://docs.mvmnt.io/_mock/apis/openapi
Production
https://api.mvmnt.io/v1

Carriers

Carrier management operations

Operations

Carrier Contacts

Carrier contact management operations

Operations

Carrier Factors

Carrier factor (factoring company) management operations

Operations

Carrier Payment Methods

Carrier payment method management operations

Operations

Companies

Company management operations

Operations

Credit Memos

AR credit memo management operations. Credit memos represent customer credits that can be applied to invoices.

Operations

Bills

AP bill management operations. Bills represent carrier and vendor invoices to be paid.

Operations

Bill Payments

AP bill payment management operations. Bill payments record payments made to carriers and vendors.

Operations

Customers

Customer management operations

Operations

Customer Contacts

Customer contact management operations

Operations

Documents

Document management operations. Documents are files (PDFs, images) that can be attached to orders, loads, or services.

Operations

Invoices

AR invoice management operations. Invoices represent customer billing for shipment services.

Operations

Loads

Load management operations. Loads represent carrier execution - which carrier is moving the freight.

Operations

Locations

Location management operations

Operations

Location Contacts

Location contact management operations

Operations

Payment Terms

Payment term management operations

Operations

Payments

AR payment management operations. Payments represent received customer payments applied to invoices.

Operations

Quotes

Quote management operations. Quotes are pricing requests/responses that can be converted to shipments.

Operations

Filter quotes

Request

Search for quotes using filter criteria.

Common Filters

  • Active quotes: { "filter": { "status": { "in": ["DRAFT", "REQUESTED", "QUOTED"] } } }
  • Won quotes: { "filter": { "status": { "equalTo": "WON" } } }
  • By customer: { "filter": { "customerId": { "equalTo": "uuid" } } }
  • Expiring soon: { "filter": { "expiresAt": { "lessThanOrEqualTo": "2025-01-20T00:00:00Z" } } }
Security
BearerAuth
Bodyapplication/jsonrequired
filterobject(QuoteFilter)
pageSizeinteger[ 1 .. 100 ]
Default 50
cursorstring
curl -i -X POST \
  https://docs.mvmnt.io/_mock/apis/openapi/quotes/filter \
  -H 'Authorization: Bearer <YOUR_JWT_HERE>' \
  -H 'Content-Type: application/json' \
  -d '{
    "filter": {
      "status": {
        "in": [
          "DRAFT",
          "REQUESTED",
          "QUOTED"
        ]
      }
    },
    "pageSize": 50
  }'

Responses

Quotes matching filter criteria

Bodyapplication/json
dataArray of objects(Quote)required
data[].​idstring(uuid)required

Unique identifier

Example: "550e8400-e29b-41d4-a716-446655440000"
data[].​keystringrequired

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

Example: "Q003602"
data[].​sidestring(QuoteSide)required

Quote direction.

  • SELL: Selling to shipper (customer quote)
  • BUY: Buying from carrier (carrier quote)
Enum"SELL""BUY"
data[].​statusstring(QuoteStatus)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
Enum"DRAFT""REQUESTED""QUOTED""RECEIVED_REPLY""SENT_REPLY""RECEIVED_COUNTER""SENT_COUNTER""WON""LOST""PASS"
data[].​amountnumber or null

Quoted price

Example: 2500
data[].​targetnumber or null

Target price for margin calculation

Example: 2200
data[].​marginnumber or null

Calculated margin percentage

Example: 12
data[].​expiresAtstring or null(date-time)

Quote expiration timestamp

data[].​customerobject(CustomerReference)

Customer (for SELL quotes)

data[].​carrierobject(CarrierReference)

Carrier (for BUY quotes)

data[].​orderobject(OrderSummary)

Order details (route, freight)

data[].​lostReasonQuoteLostReason (string) or null

Why the quote was lost

One of:

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)
string(QuoteLostReason)
Enum"EXPIRED""NO_REASON""NO_RESPONSE""TOO_HIGH""TOO_SLOW""TRUCK_NOT_AVAILABLE""OTHER"
data[].​lostReasonTextstring or null

Additional text for lost reason

data[].​closedTimestring or null(date-time)

When the quote was closed (won/lost)

data[].​assigneeobject(UserReference)

Assigned sales rep

data[].​shipmentIdstring or null(uuid)

Shipment ID if converted

data[].​shipmentKeystring or null

Shipment friendly ID if converted

data[].​createdAtstring(date-time)required
data[].​updatedAtstring or null(date-time)
paginationobject(PaginationInfo)required
pagination.​pageSizeintegerrequired

Number of items per page

Example: 50
pagination.​hasNextPagebooleanrequired

Whether there are more pages

Example: true
pagination.​hasPreviousPageboolean

Whether there are previous pages

Example: false
pagination.​endCursorstring or null

Cursor for the next page (null if no next page)

Example: "eyJpZCI6IjU1MGU4NDAwLWUyOWItNDFkNC1hNzE2LTQ0NjY1NTQ0MDAwMCJ9"
Response
application/json
{ "data": [ {} ], "pagination": { "pageSize": 50, "hasNextPage": true, "hasPreviousPage": false, "endCursor": "eyJpZCI6IjU1MGU4NDAwLWUyOWItNDFkNC1hNzE2LTQ0NjY1NTQ0MDAwMCJ9" } }

Create a quote

Request

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)
Security
BearerAuth
Bodyapplication/jsonrequired
customerobject(ResourceReferenceInput)required
One of:

Customer reference (for SELL quotes)

customer.​idstring(uuid)required

Resource UUID

customer.​keystring

Client-defined reference ID

carrierobject(ResourceReferenceInput)
One of:

Carrier reference (for BUY quotes)

orderobject(OrderInput)required

Order details (route, freight)

order.​modestring(TransportMode)required

Transportation mode.

  • TL: Full Truckload
  • LTL: Less than Truckload
  • AIR: Air freight
  • OCEAN: Ocean freight
  • RAIL: Rail freight
  • INTERMODAL: Intermodal (multiple modes)
  • DRAYAGE: Drayage/cartage
Enum"TL""LTL""AIR""OCEAN""RAIL""INTERMODAL""DRAYAGE"
order.​stopsArray of objects(OrderStopInput)>= 2 itemsrequired

At least origin and destination stops

order.​stops[].​typestringrequired

Type of stop

Enum"PICKUP""DELIVERY""CROSS_DOCK"
order.​stops[].​locationobject(ResourceReferenceInput)
One of:

Reference to an existing location

order.​stops[].​addressobject(AddressInput)

Address for ad-hoc stop (if no location reference)

order.​stops[].​requestedStartDatestring(date)

Requested start date for the stop

order.​stops[].​requestedEndDatestring(date)

Requested end date for the stop

order.​stops[].​requestedStartTimestring^([01]\d|2[0-3]):([0-5]\d)$

Requested start time (HH:MM format)

order.​stops[].​requestedEndTimestring^([01]\d|2[0-3]):([0-5]\d)$

Requested end time (HH:MM format)

order.​stops[].​appointmentRequiredboolean

Whether an appointment is required

Default false
order.​stops[].​notesstring<= 2000 characters

Special instructions for the stop

order.​freightobject(OrderFreightInput)

Freight details for an order

order.​equipmentArray of objects(ResourceReferenceInput)

Equipment types required

order.​referencesArray of objects

Reference numbers for the order

order.​specialRequirementsArray of objects(ResourceReferenceInput)

Special requirements (e.g., liftgate, team drivers)

amountnumber>= 0

Quoted price

expiresAtstring(date-time)

Quote expiration

assigneeobject(ResourceReferenceInput)
One of:

Assigned user

curl -i -X POST \
  https://docs.mvmnt.io/_mock/apis/openapi/quotes \
  -H 'Authorization: Bearer <YOUR_JWT_HERE>' \
  -H 'Content-Type: application/json' \
  -d '{
    "customer": {
      "id": "550e8400-e29b-41d4-a716-446655440000"
    },
    "order": {
      "mode": "TL",
      "stops": [
        {
          "type": "PICKUP",
          "address": {
            "street1": "123 Warehouse Ave",
            "city": "Los Angeles",
            "stateProvince": "CA",
            "postalCode": "90210",
            "country": "US"
          },
          "requestedStartDate": "2025-01-20"
        },
        {
          "type": "DELIVERY",
          "address": {
            "street1": "456 Distribution Center",
            "city": "New York",
            "stateProvince": "NY",
            "postalCode": "10001",
            "country": "US"
          },
          "requestedStartDate": "2025-01-25"
        }
      ],
      "freight": {
        "handlingUnitQuantity": 10,
        "handlingUnitType": "PALLET",
        "weight": 15000
      }
    },
    "amount": 2500,
    "expiresAt": "2025-01-18T23:59:59Z"
  }'

Responses

Quote created successfully

Bodyapplication/json
idstring(uuid)required

Unique identifier

Example: "550e8400-e29b-41d4-a716-446655440000"
keystringrequired

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

Example: "Q003602"
sidestring(QuoteSide)required

Quote direction.

  • SELL: Selling to shipper (customer quote)
  • BUY: Buying from carrier (carrier quote)
Enum"SELL""BUY"
statusstring(QuoteStatus)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
Enum"DRAFT""REQUESTED""QUOTED""RECEIVED_REPLY""SENT_REPLY""RECEIVED_COUNTER""SENT_COUNTER""WON""LOST""PASS"
amountnumber or null

Quoted price

Example: 2500
targetnumber or null

Target price for margin calculation

Example: 2200
marginnumber or null

Calculated margin percentage

Example: 12
expiresAtstring or null(date-time)

Quote expiration timestamp

customerobject(CustomerReference)

Customer (for SELL quotes)

carrierobject(CarrierReference)

Carrier (for BUY quotes)

orderobject(OrderSummary)

Order details (route, freight)

lostReasonQuoteLostReason (string) or null

Why the quote was lost

One of:

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)
string(QuoteLostReason)
Enum"EXPIRED""NO_REASON""NO_RESPONSE""TOO_HIGH""TOO_SLOW""TRUCK_NOT_AVAILABLE""OTHER"
lostReasonTextstring or null

Additional text for lost reason

closedTimestring or null(date-time)

When the quote was closed (won/lost)

assigneeobject(UserReference)

Assigned sales rep

shipmentIdstring or null(uuid)

Shipment ID if converted

shipmentKeystring or null

Shipment friendly ID if converted

createdAtstring(date-time)required
updatedAtstring or null(date-time)
Response
application/json
{ "id": "550e8400-e29b-41d4-a716-446655440000", "key": "Q003602", "side": "SELL", "status": "DRAFT", "amount": 2500, "target": 2200, "margin": 12, "expiresAt": "2019-08-24T14:15:22Z", "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", "deletedAt": null }, "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", "deletedAt": null }, "order": { "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08", "key": "string", "mode": "TL", "origin": {}, "destination": {}, "pickUpDate": "2019-08-24", "deliveryDate": "2019-08-24", "equipment": [], "weight": 0, "mileage": 0 }, "lostReason": "EXPIRED", "lostReasonText": "string", "closedTime": "2019-08-24T14:15:22Z", "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", "deletedAt": null }, "shipmentId": "47efd5a2-af91-4417-950a-7f546cd1b5cf", "shipmentKey": "string", "createdAt": "2019-08-24T14:15:22Z", "updatedAt": "2019-08-24T14:15:22Z" }

Get a quote

Request

Retrieve a quote by ID or key.

The response includes embedded order details (route, freight, equipment).

Security
BearerAuth
Path
idstringrequired

Resource ID (UUID) or client key

Example: 550e8400-e29b-41d4-a716-446655440000
Query
bystring

Specify lookup type for faster retrieval. If omitted, defaults to looking up by ID first, then falls back to client key if not found. Use by=key when you know you're providing a client key for best performance.

Enum"id""key"
Example: by=key
curl -i -X GET \
  'https://docs.mvmnt.io/_mock/apis/openapi/quotes/550e8400-e29b-41d4-a716-446655440000?by=key' \
  -H 'Authorization: Bearer <YOUR_JWT_HERE>'

Responses

Quote retrieved successfully

Bodyapplication/json
idstring(uuid)required

Unique identifier

Example: "550e8400-e29b-41d4-a716-446655440000"
keystringrequired

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

Example: "Q003602"
sidestring(QuoteSide)required

Quote direction.

  • SELL: Selling to shipper (customer quote)
  • BUY: Buying from carrier (carrier quote)
Enum"SELL""BUY"
statusstring(QuoteStatus)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
Enum"DRAFT""REQUESTED""QUOTED""RECEIVED_REPLY""SENT_REPLY""RECEIVED_COUNTER""SENT_COUNTER""WON""LOST""PASS"
amountnumber or null

Quoted price

Example: 2500
targetnumber or null

Target price for margin calculation

Example: 2200
marginnumber or null

Calculated margin percentage

Example: 12
expiresAtstring or null(date-time)

Quote expiration timestamp

customerobject(CustomerReference)

Customer (for SELL quotes)

carrierobject(CarrierReference)

Carrier (for BUY quotes)

orderobject(OrderSummary)

Order details (route, freight)

lostReasonQuoteLostReason (string) or null

Why the quote was lost

One of:

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)
string(QuoteLostReason)
Enum"EXPIRED""NO_REASON""NO_RESPONSE""TOO_HIGH""TOO_SLOW""TRUCK_NOT_AVAILABLE""OTHER"
lostReasonTextstring or null

Additional text for lost reason

closedTimestring or null(date-time)

When the quote was closed (won/lost)

assigneeobject(UserReference)

Assigned sales rep

shipmentIdstring or null(uuid)

Shipment ID if converted

shipmentKeystring or null

Shipment friendly ID if converted

createdAtstring(date-time)required
updatedAtstring or null(date-time)
Response
application/json
{ "id": "550e8400-e29b-41d4-a716-446655440000", "key": "Q003602", "side": "SELL", "status": "DRAFT", "amount": 2500, "target": 2200, "margin": 12, "expiresAt": "2019-08-24T14:15:22Z", "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", "deletedAt": null }, "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", "deletedAt": null }, "order": { "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08", "key": "string", "mode": "TL", "origin": {}, "destination": {}, "pickUpDate": "2019-08-24", "deliveryDate": "2019-08-24", "equipment": [], "weight": 0, "mileage": 0 }, "lostReason": "EXPIRED", "lostReasonText": "string", "closedTime": "2019-08-24T14:15:22Z", "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", "deletedAt": null }, "shipmentId": "47efd5a2-af91-4417-950a-7f546cd1b5cf", "shipmentKey": "string", "createdAt": "2019-08-24T14:15:22Z", "updatedAt": "2019-08-24T14:15:22Z" }

Update a quote

Request

Update quote fields including status changes.

Status changes

Status changes use this endpoint (not separate action endpoints):

  • Set to QUOTED: { "status": "QUOTED", "amount": 2500 }
  • Set to WON: { "status": "WON" }
  • Set to LOST: { "status": "LOST", "lostReason": "TOO_HIGH" }

Validation rules

  • When setting status to LOST, lostReason is required
  • When lostReason is OTHER, lostReasonText is required

Note

To convert a won quote to a shipment, use POST /quotes/{id}/convert-to-shipment

Security
BearerAuth
Path
idstringrequired

Resource ID (UUID) or client key

Example: 550e8400-e29b-41d4-a716-446655440000
Query
bystring

Specify lookup type for faster retrieval. If omitted, defaults to looking up by ID first, then falls back to client key if not found. Use by=key when you know you're providing a client key for best performance.

Enum"id""key"
Example: by=key
Bodyapplication/jsonrequired
statusstring(QuoteStatus)

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
Enum"DRAFT""REQUESTED""QUOTED""RECEIVED_REPLY""SENT_REPLY""RECEIVED_COUNTER""SENT_COUNTER""WON""LOST""PASS"
amountnumber or null>= 0
targetnumber or null>= 0
expiresAtstring or null(date-time)
lostReasonstring(QuoteLostReason)

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)
Enum"EXPIRED""NO_REASON""NO_RESPONSE""TOO_HIGH""TOO_SLOW""TRUCK_NOT_AVAILABLE""OTHER"
lostReasonTextstring

Required when lostReason is OTHER

assigneeobject(ResourceReferenceInput)
One of:

Reference to another resource by either ID or client key (used in create/update requests)

curl -i -X PATCH \
  'https://docs.mvmnt.io/_mock/apis/openapi/quotes/550e8400-e29b-41d4-a716-446655440000?by=key' \
  -H 'Authorization: Bearer <YOUR_JWT_HERE>' \
  -H 'Content-Type: application/json' \
  -d '{
    "status": "QUOTED",
    "amount": 2500
  }'

Responses

Quote updated successfully

Bodyapplication/json
idstring(uuid)required

Unique identifier

Example: "550e8400-e29b-41d4-a716-446655440000"
keystringrequired

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

Example: "Q003602"
sidestring(QuoteSide)required

Quote direction.

  • SELL: Selling to shipper (customer quote)
  • BUY: Buying from carrier (carrier quote)
Enum"SELL""BUY"
statusstring(QuoteStatus)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
Enum"DRAFT""REQUESTED""QUOTED""RECEIVED_REPLY""SENT_REPLY""RECEIVED_COUNTER""SENT_COUNTER""WON""LOST""PASS"
amountnumber or null

Quoted price

Example: 2500
targetnumber or null

Target price for margin calculation

Example: 2200
marginnumber or null

Calculated margin percentage

Example: 12
expiresAtstring or null(date-time)

Quote expiration timestamp

customerobject(CustomerReference)

Customer (for SELL quotes)

carrierobject(CarrierReference)

Carrier (for BUY quotes)

orderobject(OrderSummary)

Order details (route, freight)

lostReasonQuoteLostReason (string) or null

Why the quote was lost

One of:

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)
string(QuoteLostReason)
Enum"EXPIRED""NO_REASON""NO_RESPONSE""TOO_HIGH""TOO_SLOW""TRUCK_NOT_AVAILABLE""OTHER"
lostReasonTextstring or null

Additional text for lost reason

closedTimestring or null(date-time)

When the quote was closed (won/lost)

assigneeobject(UserReference)

Assigned sales rep

shipmentIdstring or null(uuid)

Shipment ID if converted

shipmentKeystring or null

Shipment friendly ID if converted

createdAtstring(date-time)required
updatedAtstring or null(date-time)
Response
application/json
{ "id": "550e8400-e29b-41d4-a716-446655440000", "key": "Q003602", "side": "SELL", "status": "DRAFT", "amount": 2500, "target": 2200, "margin": 12, "expiresAt": "2019-08-24T14:15:22Z", "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", "deletedAt": null }, "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", "deletedAt": null }, "order": { "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08", "key": "string", "mode": "TL", "origin": {}, "destination": {}, "pickUpDate": "2019-08-24", "deliveryDate": "2019-08-24", "equipment": [], "weight": 0, "mileage": 0 }, "lostReason": "EXPIRED", "lostReasonText": "string", "closedTime": "2019-08-24T14:15:22Z", "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", "deletedAt": null }, "shipmentId": "47efd5a2-af91-4417-950a-7f546cd1b5cf", "shipmentKey": "string", "createdAt": "2019-08-24T14:15:22Z", "updatedAt": "2019-08-24T14:15:22Z" }

Delete a quote

Request

Soft delete a quote.

The quote record is marked as deleted but not permanently removed. Associated orders are also soft deleted.

Security
BearerAuth
Path
idstringrequired

Resource ID (UUID) or client key

Example: 550e8400-e29b-41d4-a716-446655440000
Query
bystring

Specify lookup type for faster retrieval. If omitted, defaults to looking up by ID first, then falls back to client key if not found. Use by=key when you know you're providing a client key for best performance.

Enum"id""key"
Example: by=key
curl -i -X DELETE \
  'https://docs.mvmnt.io/_mock/apis/openapi/quotes/550e8400-e29b-41d4-a716-446655440000?by=key' \
  -H 'Authorization: Bearer <YOUR_JWT_HERE>'

Responses

Quote deleted successfully

Response
No content

Convert quote to shipment

Request

Convert an accepted quote into a shipment.

What happens

  1. Quote status is set to WON (if not already)
  2. A new Shipment is created
  3. The Order from the quote is linked to the shipment
  4. Optionally, additional orders can be added

Prerequisites

  • Quote must be in QUOTED or WON status
  • Quote cannot already have a shipment

Response

Returns the IDs of both the quote and the newly created shipment.

Security
BearerAuth
Path
idstringrequired

Resource ID (UUID) or client key

Example: 550e8400-e29b-41d4-a716-446655440000
Query
bystring

Specify lookup type for faster retrieval. If omitted, defaults to looking up by ID first, then falls back to client key if not found. Use by=key when you know you're providing a client key for best performance.

Enum"id""key"
Example: by=key
Bodyapplication/json
additionalOrdersArray of objects(OrderInput)

Optional additional orders to add to the shipment

curl -i -X POST \
  'https://docs.mvmnt.io/_mock/apis/openapi/quotes/550e8400-e29b-41d4-a716-446655440000/convert-to-shipment?by=key' \
  -H 'Authorization: Bearer <YOUR_JWT_HERE>' \
  -H 'Content-Type: application/json' \
  -d '{}'

Responses

Quote converted to shipment successfully

Bodyapplication/json
quoteIdstring(uuid)required

Quote ID that was converted

quoteStatusstringrequired

Quote status after conversion (always WON)

Value"WON"
shipmentIdstring(uuid)required

Created shipment ID

shipmentKeystringrequired

Created shipment friendly ID

orderIdstring(uuid)required

Order ID from the quote

Response
application/json
{ "quoteId": "550e8400-e29b-41d4-a716-446655440000", "quoteStatus": "WON", "shipmentId": "660e8400-e29b-41d4-a716-446655440001", "shipmentKey": "SHP-12345", "orderId": "770e8400-e29b-41d4-a716-446655440002" }

Saved Searches

Saved search management operations

Operations

Services

Service (vended service) management operations. Services represent non-carrier vendor work (drayage, customs, warehousing).

Operations

Shipments

Shipment tracking and management operations. Shipments contain orders, loads, and services.

Operations

Teams

Team management operations

Operations

Users

User management operations

Operations

Vendors

Vendor management operations

Operations

Vendor Contacts

Vendor contact management operations

Operations

Vendor Payment Methods

Vendor payment method management operations

Operations

Event Notifications

Webhooks