Welcome to the MVMNT API documentation. The MVMNT API enables you to automate almost any part of your freight brokerage workflow by integrating directly with our Transportation Management System.
MVMNT is a modern, cloud-native TMS platform built specifically for freight brokers seeking workflow automation and operational efficiency. We help you scale your business by streamlining operations and eliminating manual data entry.
- 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
Our REST API follows industry best practices:
- 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 - a string 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 →
We strongly recommend using PATCH for updates:
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 →
Need help integrating with the MVMNT API?
- 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