Carrier management operations
- Convert quote to shipment
MVMNT API (1.0.0)
The MVMNT API enables you to automate freight brokerage workflows by integrating directly with our Transportation Management System.
OAuth 2.0 client credentials flow. See Authentication Guide for details.
Headers:
Content-Type: application/x-www-form-urlencodedBody Parameters:
grant_type=client_credentials
client_id=YOUR_CLIENT_ID
client_secret=YOUR_CLIENT_SECRETcurl -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"Request
Search for quotes using filter criteria.
- 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" } } }
- Mock serverhttps://docs.mvmnt.io/_mock/apis/openapi/quotes/filter
- Productionhttps://api.mvmnt.io/v1/quotes/filter
- curl
- JavaScript
- Node.js
- Python
- Java
- C#
- PHP
- Go
- Ruby
- R
- Payload
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
}'Quotes matching filter criteria
Quote direction.
SELL: Selling to shipper (customer quote)BUY: Buying from carrier (carrier quote)
Current status in the quote lifecycle.
Initial states:
DRAFT: Quote being draftedREQUESTED: Customer requested a quote (needs pricing)
Active states:
QUOTED: Price sent to customerRECEIVED_REPLY: Received reply from customerSENT_REPLY: Sent reply to customerRECEIVED_COUNTER: Received counter-offerSENT_COUNTER: Sent counter-offer
Final states:
WON: Customer accepted the quoteLOST: Quote not acceptedPASS: Broker declined to quoteCANCELED: Quote canceled
Why the quote was lost
Reason why the quote was lost.
EXPIRED: Quote expired without responseNO_REASON: No specific reason givenNO_RESPONSE: Customer didn't respondTOO_HIGH: Price was too highTOO_SLOW: Response was too slowTRUCK_NOT_AVAILABLE: Capacity not availableOTHER: Other reason (see lostReasonText)
{ "data": [ { … } ], "pagination": { "pageSize": 50, "hasNextPage": true, "hasPreviousPage": false, "endCursor": "eyJpZCI6IjU1MGU4NDAwLWUyOWItNDFkNC1hNzE2LTQ0NjY1NTQ0MDAwMCJ9" } }
Request
Create a new quote with order details.
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.
customer: Reference to the customer (shipper profile)order: Order details including stops and mode
- Create quote with customer and order details
- Add pricing (amount) via PATCH
- Send to customer (status changes to QUOTED)
- Convert to shipment when accepted (POST /quotes/{id}/convert-to-shipment)
Order details (route, freight)
Transportation mode.
TL: Full TruckloadLTL: Less than TruckloadAIR: Air freightOCEAN: Ocean freightRAIL: Rail freightINTERMODAL: Intermodal (multiple modes)DRAYAGE: Drayage/cartage
At least origin and destination stops
Requested start time (HH:MM format)
- Mock serverhttps://docs.mvmnt.io/_mock/apis/openapi/quotes
- Productionhttps://api.mvmnt.io/v1/quotes
- curl
- JavaScript
- Node.js
- Python
- Java
- C#
- PHP
- Go
- Ruby
- R
- Payload
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"
}'Quote created successfully
Quote direction.
SELL: Selling to shipper (customer quote)BUY: Buying from carrier (carrier quote)
Current status in the quote lifecycle.
Initial states:
DRAFT: Quote being draftedREQUESTED: Customer requested a quote (needs pricing)
Active states:
QUOTED: Price sent to customerRECEIVED_REPLY: Received reply from customerSENT_REPLY: Sent reply to customerRECEIVED_COUNTER: Received counter-offerSENT_COUNTER: Sent counter-offer
Final states:
WON: Customer accepted the quoteLOST: Quote not acceptedPASS: Broker declined to quoteCANCELED: Quote canceled
Why the quote was lost
Reason why the quote was lost.
EXPIRED: Quote expired without responseNO_REASON: No specific reason givenNO_RESPONSE: Customer didn't respondTOO_HIGH: Price was too highTOO_SLOW: Response was too slowTRUCK_NOT_AVAILABLE: Capacity not availableOTHER: Other reason (see lostReasonText)
{ "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" }
- Mock serverhttps://docs.mvmnt.io/_mock/apis/openapi/quotes/{id}
- Productionhttps://api.mvmnt.io/v1/quotes/{id}
- curl
- JavaScript
- Node.js
- Python
- Java
- C#
- PHP
- Go
- Ruby
- R
- Payload
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>'Quote retrieved successfully
Quote direction.
SELL: Selling to shipper (customer quote)BUY: Buying from carrier (carrier quote)
Current status in the quote lifecycle.
Initial states:
DRAFT: Quote being draftedREQUESTED: Customer requested a quote (needs pricing)
Active states:
QUOTED: Price sent to customerRECEIVED_REPLY: Received reply from customerSENT_REPLY: Sent reply to customerRECEIVED_COUNTER: Received counter-offerSENT_COUNTER: Sent counter-offer
Final states:
WON: Customer accepted the quoteLOST: Quote not acceptedPASS: Broker declined to quoteCANCELED: Quote canceled
Why the quote was lost
Reason why the quote was lost.
EXPIRED: Quote expired without responseNO_REASON: No specific reason givenNO_RESPONSE: Customer didn't respondTOO_HIGH: Price was too highTOO_SLOW: Response was too slowTRUCK_NOT_AVAILABLE: Capacity not availableOTHER: Other reason (see lostReasonText)
{ "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" }
Request
Update quote fields including 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" }
- When setting
statustoLOST,lostReasonis required - When
lostReasonisOTHER,lostReasonTextis required
To convert a won quote to a shipment, use POST /quotes/{id}/convert-to-shipment
Current status in the quote lifecycle.
Initial states:
DRAFT: Quote being draftedREQUESTED: Customer requested a quote (needs pricing)
Active states:
QUOTED: Price sent to customerRECEIVED_REPLY: Received reply from customerSENT_REPLY: Sent reply to customerRECEIVED_COUNTER: Received counter-offerSENT_COUNTER: Sent counter-offer
Final states:
WON: Customer accepted the quoteLOST: Quote not acceptedPASS: Broker declined to quoteCANCELED: Quote canceled
Reason why the quote was lost.
EXPIRED: Quote expired without responseNO_REASON: No specific reason givenNO_RESPONSE: Customer didn't respondTOO_HIGH: Price was too highTOO_SLOW: Response was too slowTRUCK_NOT_AVAILABLE: Capacity not availableOTHER: Other reason (see lostReasonText)
- Mock serverhttps://docs.mvmnt.io/_mock/apis/openapi/quotes/{id}
- Productionhttps://api.mvmnt.io/v1/quotes/{id}
- curl
- JavaScript
- Node.js
- Python
- Java
- C#
- PHP
- Go
- Ruby
- R
- Payload
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
}'Quote updated successfully
Quote direction.
SELL: Selling to shipper (customer quote)BUY: Buying from carrier (carrier quote)
Current status in the quote lifecycle.
Initial states:
DRAFT: Quote being draftedREQUESTED: Customer requested a quote (needs pricing)
Active states:
QUOTED: Price sent to customerRECEIVED_REPLY: Received reply from customerSENT_REPLY: Sent reply to customerRECEIVED_COUNTER: Received counter-offerSENT_COUNTER: Sent counter-offer
Final states:
WON: Customer accepted the quoteLOST: Quote not acceptedPASS: Broker declined to quoteCANCELED: Quote canceled
Why the quote was lost
Reason why the quote was lost.
EXPIRED: Quote expired without responseNO_REASON: No specific reason givenNO_RESPONSE: Customer didn't respondTOO_HIGH: Price was too highTOO_SLOW: Response was too slowTRUCK_NOT_AVAILABLE: Capacity not availableOTHER: Other reason (see lostReasonText)
{ "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" }
- Mock serverhttps://docs.mvmnt.io/_mock/apis/openapi/quotes/{id}
- Productionhttps://api.mvmnt.io/v1/quotes/{id}
- curl
- JavaScript
- Node.js
- Python
- Java
- C#
- PHP
- Go
- Ruby
- R
- Payload
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>'Request
Convert an accepted quote into a shipment.
- Quote status is set to WON (if not already)
- A new Shipment is created
- The Order from the quote is linked to the shipment
- Optionally, additional orders can be added
- Quote must be in QUOTED or WON status
- Quote cannot already have a shipment
Returns the IDs of both the quote and the newly created shipment.
- Mock serverhttps://docs.mvmnt.io/_mock/apis/openapi/quotes/{id}/convert-to-shipment
- Productionhttps://api.mvmnt.io/v1/quotes/{id}/convert-to-shipment
- curl
- JavaScript
- Node.js
- Python
- Java
- C#
- PHP
- Go
- Ruby
- R
- Payload
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 '{}'{ "quoteId": "550e8400-e29b-41d4-a716-446655440000", "quoteStatus": "WON", "shipmentId": "660e8400-e29b-41d4-a716-446655440001", "shipmentKey": "SHP-12345", "orderId": "770e8400-e29b-41d4-a716-446655440002" }