Use the MVMNT API to keep orders, shipments, carriers, and documents in sync with your systems. Build automations that reduce re-entry by creating, updating, and querying the same records your team works with in the TMS.
MVMNT is a cloud-based TMS built for freight brokers. The API gives your engineering team a direct path to standard workflows: move data in and out of MVMNT, subscribe to operational events, and correlate records back to your internal IDs.
- Submit and Query Data: Create, read, update, and query orders, shipments, locations, carriers, and more via our REST API
- Real-Time Notifications: Receive near real-time notifications about shipment status changes, document updates, and other events via webhooks
- Workflow Automation: Automate quoting, load posting, carrier tendering, and more
- Two-Way Integrations: Sync data bidirectionally with your existing systems
The REST API is designed for predictable integrations:
- Resource-based URLs: Intuitive, predictable endpoints (e.g.,
/v1/orders,/v1/shipments) - HTTP verbs: Standard GET, POST, PATCH, DELETE operations
- Standard HTTP status codes:
201 Createdfor POST (create) operations200 OKfor GET, PATCH (update), and POST /filter operations204 No Contentfor DELETE operations
- JSON: All requests and responses use JSON format
- Partial Updates: Use PATCH for efficient partial updates (full updates are discouraged)
- Pagination: Cursor-based pagination for list endpoints
- Error Handling: Consistent, detailed error responses
OAuth 2.0 Machine-to-Machine (M2M) authentication using client credentials flow:
- You receive a client ID and client secret from MVMNT
- Exchange credentials for a Bearer token via
/oauth2/token - Include the token in the
Authorizationheader for all API requests - Request a new token when the current one expires (tokens are cached on your end)
Learn more about authentication →
Subscribe to real-time event notifications:
- Event Types:
order.*,shipment.*,document.*, and more - HMAC Security: Verify webhook authenticity with signature verification
- Automatic Retries: We retry failed deliveries with exponential backoff
- Testing Tools: Test webhook delivery in development
The API is organized around the following primary resources:
| Resource | Description |
|---|---|
| Orders | Load orders with stops, freight details, and charges |
| Shipments | Active shipments with real-time status tracking |
| Locations | Pickup and delivery locations (warehouses, customer sites, etc.) |
| Contacts | Contact information for locations and organizations |
| Carriers | Carrier profiles and capacity |
| Shippers | Your customer profiles (shipper organizations) |
| Documents | BOLs, PODs, rate confirmations, and invoices |
| Vendors | Service providers (not transport carriers) |
Every entity includes a key field, which is an identifier you control:
- Your Reference: Store your system's ID in
key(e.g.,"ERP-ORDER-12345") - Bidirectional Lookup: Use
keyto find MVMNT entities by your system's IDs - Returned in Queries:
keyis always included in API responses - Webhooks:
keyis included in webhook payloads for easy correlation
Learn more about client keys →
Use PATCH for updates when you want to change specific fields without sending the entire object:
PATCH /v1/orders/ORD-12345
Content-Type: application/json
{
"status": "booked",
"externalNotes": "Updated delivery instructions"
}Only the fields you include will be updated. This approach:
- Reduces payload size
- Prevents unintentional overwrites
- Improves performance
- Simplifies concurrent updates
Learn more about partial updates →
Query resources using flexible filter criteria with boolean logic:
POST /v1/vendors/filter
Content-Type: application/json
{
"filter": {
"and": [
{ "status": { "equalTo": "ACTIVE" } },
{ "currency": { "in": ["USD", "CAD"] } },
{ "createdAt": { "greaterThanOrEqualTo": "2025-01-01T00:00:00Z" } }
]
},
"pageSize": 50
}Key features:
- Flexible operators:
equalTo,in,includes,greaterThan,lessThan,isNull, and more - Boolean logic: Combine filters with
and,or,notoperators - Type-specific filters: Different operations for strings, numbers, dates, UUIDs, etc.
- Case-insensitive text search: Use
includes,startsWith,endsWithfor partial matching - Default soft-delete filtering: Deleted records excluded by default (override with explicit
deletedAtfilter)
All filter endpoints use cursor-based pagination:
{
"data": [
{ "id": "...", "name": "..." }
],
"pageInfo": {
"pageSize": 50,
"hasNextPage": true,
"hasPreviousPage": false,
"endCursor": "eyJpZCI6IjU1MGU4NDAwIn0="
}
}Key features:
- Cursor-based: Efficient for large datasets, no performance degradation on deep pages
- Configurable page size: 1-250 items per page (default: 50)
- Consistent across resources: Same pagination format for all filter endpoints
- Simple iteration: Use
endCursorfrom response to fetch next page
MVMNT uses soft deletes for all resources - deleted entities are marked with deletedAt timestamp rather than being permanently removed:
{
"id": "550e8400-...",
"friendlyId": "ORD-12345",
"deletedAt": "2025-01-20T15:30:00Z",
...
}Key behaviors:
- DELETE requests: Set
deletedAtto current timestamp (entity still exists) - List queries: Soft-deleted entities are filtered out by default
- Get by ID: Soft-deleted entities are still accessible (check
deletedAtfield) - Webhooks: Include entities with
deletedAtset - your handlers must handle this - Restore: Contact support to restore soft-deleted entities (no API endpoint yet)
Learn more about soft deletes →
Contact your MVMNT account manager to request API access. You'll receive:
- Client ID
- Client Secret
Keep your secret secure! Never commit it to version control or expose it in client-side code.
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"Response:
{
"access_token": "eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9...",
"token_type": "Bearer",
"expires_in": 3600
}curl https://api.mvmnt.io/v1/orders \
-H "Authorization: Bearer YOUR_ACCESS_TOKEN"All API requests are made to:
https://api.mvmnt.ioThe current API version is v1, and all endpoints are prefixed with /v1/:
https://api.mvmnt.io/v1/orders
https://api.mvmnt.io/v1/shipments
https://api.mvmnt.io/v1/locationsAPI requests are rate limited based on your subscription tier:
| Tier | Requests/Minute |
|---|---|
| Standard | 500 |
| Enterprise | 2000 |
Rate limit headers are included in every response:
X-RateLimit-Limit: Your maximum requests per minuteX-RateLimit-Remaining: Requests remaining in current windowX-RateLimit-Reset: Unix timestamp when limit resets
Learn more about rate limits →
For implementation questions and production issues:
- Documentation: Browse this site for guides, examples, and reference
- Email Support: support@mvmnt.io
- Status Page: https://status.mvmnt.io
- Account Manager: Contact your dedicated MVMNT account manager
- Authentication Guide - Set up OAuth credentials
- Quickstart - Make your first API call in 5 minutes
- Filtering - Query resources with flexible filter criteria
- Pagination - Efficiently iterate through large result sets
- Client Keys - Use your own identifiers for bidirectional lookups
- API Reference - Explore all available endpoints
- Webhooks - Set up real-time event notifications