Carrier management operations
MVMNT API (1.0.0)
The MVMNT API enables you to automate freight brokerage workflows by integrating directly with our Transportation Management System.
Postman setup guide: API Clients.
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"Status: 200 OK
{
"access_token": "eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9...",
"token_type": "Bearer",
"expires_in": 3600
}Response Fields:
access_token: JWT Bearer token to use for API requeststoken_type: AlwaysBearerexpires_in: Token lifetime in seconds (3600 = 1 hour)
Mutating requests (POST, PATCH, DELETE) accept an optional Idempotency-Key header (up to 255 characters). Retrying a request with the same key and the same body returns the original result instead of repeating the operation; reusing a key with a different body fails. Keys are scoped to your organization — keys chosen by other tenants can never collide with yours. Use a stable identifier from your system (for example your own record id plus the action) rather than a random value per attempt.
Request
Search for AR invoices using filter criteria.
- By customer:
{ "filter": { "customerId": { "equalTo": "uuid" } } } - Unpaid:
{ "filter": { "status": { "in": ["AWAITING_PAYMENT", "PARTIALLY_PAID"] } } } - Overdue:
{ "filter": { "overdue": true } } - By shipment:
{ "filter": { "shipmentId": { "equalTo": "uuid" } } }
- Productionhttps://api.mvmnt.io/v1/invoices/filter
- Demo (non-production)https://api.demo.mvmnt.io/v1/invoices/filter
- curl
- JavaScript
- Node.js
- Python
- Java
- C#
- PHP
- Go
- Ruby
- R
- Payload
curl -i -X POST \
https://api.mvmnt.io/v1/invoices/filter \
-H 'Authorization: Bearer <YOUR_JWT_HERE>' \
-H 'Content-Type: application/json' \
-d '{
"filter": {
"status": {
"in": [
"AWAITING_PAYMENT",
"PARTIALLY_PAID"
]
}
}
}'Invoices matching filter criteria
Enhanced reference to a customer resource (returned in responses). Includes full customer details in addition to id/key.
Note: Does NOT include nested references (paymentTerm, contacts, etc.) to prevent recursion. Maximum nesting depth: 1 level.
Current status of the invoice.
DRAFT: Invoice record exists but not finalizedAWAITING_PAYMENT: Invoice finalized, awaiting paymentPARTIALLY_PAID: Some payments received, balance remainsPAID: Fully paidVOIDED: Invoice cancelled/voided
Enhanced reference to a payment term resource (returned in responses). Includes full payment term details in addition to id/key.
Factoring provider for invoice financing.
DENIM: Denim factoringHAULPAY: HaulPay factoring
{ "data": [ { … } ], "pagination": { "pageSize": 50, "hasNextPage": true, "hasPreviousPage": false, "endCursor": "eyJpZCI6IjU1MGU4NDAwLWUyOWItNDFkNC1hNzE2LTQ0NjY1NTQ0MDAwMCJ9" } }
Request
Create a new invoice for an order.
- Invoice record is created for the order
- Order status updates to
DELIVERED_UNPAID - Due date calculated from payment term if not provided
Each shipment can have only one AR invoice. Use POST /shipments/{id}/invoice/generate to generate the invoice PDF document.
- Productionhttps://api.mvmnt.io/v1/invoices
- Demo (non-production)https://api.demo.mvmnt.io/v1/invoices
- curl
- JavaScript
- Node.js
- Python
- Java
- C#
- PHP
- Go
- Ruby
- R
- Payload
curl -i -X POST \
https://api.mvmnt.io/v1/invoices \
-H 'Authorization: Bearer <YOUR_JWT_HERE>' \
-H 'Content-Type: application/json' \
-d '{
"orderId": "550e8400-e29b-41d4-a716-446655440000",
"invoiceDate": "2025-01-15",
"dueDate": "2025-02-14",
"amount": 2500,
"currency": "USD"
}'Invoice created successfully
Enhanced reference to a customer resource (returned in responses). Includes full customer details in addition to id/key.
Note: Does NOT include nested references (paymentTerm, contacts, etc.) to prevent recursion. Maximum nesting depth: 1 level.
Current status of the invoice.
DRAFT: Invoice record exists but not finalizedAWAITING_PAYMENT: Invoice finalized, awaiting paymentPARTIALLY_PAID: Some payments received, balance remainsPAID: Fully paidVOIDED: Invoice cancelled/voided
Enhanced reference to a payment term resource (returned in responses). Includes full payment term details in addition to id/key.
Factoring provider for invoice financing.
DENIM: Denim factoringHAULPAY: HaulPay factoring
{ "id": "550e8400-e29b-41d4-a716-446655440000", "friendlyId": "INV-00001", "key": "string", "orderId": "b3e1eced-f2bd-4d8c-9765-fbc9d1d222d5", "orderKey": "string", "shipmentId": "47efd5a2-af91-4417-950a-7f546cd1b5cf", "shipmentKey": "string", "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 }, "status": "DRAFT", "invoiceDate": "2019-08-24", "dueDate": "2019-08-24", "amount": 0, "currency": "USD", "reference": "string", "amountPaid": 0, "amountOwed": 0, "creditsApplied": 0, "paymentTerm": { "id": "550e8400-e29b-41d4-a716-446655440000", "key": "ERP-PAYTERM-NET30", "name": "Net 30", "description": "Payment due 30 days from invoice date", "days": 30, "quickPayFee": 0.05, "apOnly": false, "doNotUse": false, "createdAt": "2025-01-15T10:00:00Z", "updatedAt": "2025-01-15T14:30:00Z", "deletedAt": null }, "payments": [ { … } ], "credits": [ { … } ], "factorName": "ARTISPAY", "factorJobId": "string", "factorStatus": "string", "qboId": "string", "documentId": "4704590c-004e-410d-adf7-acb7ca0a7052", "documentUrl": "string", "createdAt": "2019-08-24T14:15:22Z", "updatedAt": "2019-08-24T14:15:22Z" }
- Productionhttps://api.mvmnt.io/v1/invoices/{id}
- Demo (non-production)https://api.demo.mvmnt.io/v1/invoices/{id}
- curl
- JavaScript
- Node.js
- Python
- Java
- C#
- PHP
- Go
- Ruby
- R
- Payload
curl -i -X GET \
'https://api.mvmnt.io/v1/invoices/550e8400-e29b-41d4-a716-446655440000?by=key' \
-H 'Authorization: Bearer <YOUR_JWT_HERE>'Invoice retrieved successfully
Enhanced reference to a customer resource (returned in responses). Includes full customer details in addition to id/key.
Note: Does NOT include nested references (paymentTerm, contacts, etc.) to prevent recursion. Maximum nesting depth: 1 level.
Current status of the invoice.
DRAFT: Invoice record exists but not finalizedAWAITING_PAYMENT: Invoice finalized, awaiting paymentPARTIALLY_PAID: Some payments received, balance remainsPAID: Fully paidVOIDED: Invoice cancelled/voided
Enhanced reference to a payment term resource (returned in responses). Includes full payment term details in addition to id/key.
Factoring provider for invoice financing.
DENIM: Denim factoringHAULPAY: HaulPay factoring
{ "id": "550e8400-e29b-41d4-a716-446655440000", "friendlyId": "INV-00001", "key": "string", "orderId": "b3e1eced-f2bd-4d8c-9765-fbc9d1d222d5", "orderKey": "string", "shipmentId": "47efd5a2-af91-4417-950a-7f546cd1b5cf", "shipmentKey": "string", "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 }, "status": "DRAFT", "invoiceDate": "2019-08-24", "dueDate": "2019-08-24", "amount": 0, "currency": "USD", "reference": "string", "amountPaid": 0, "amountOwed": 0, "creditsApplied": 0, "paymentTerm": { "id": "550e8400-e29b-41d4-a716-446655440000", "key": "ERP-PAYTERM-NET30", "name": "Net 30", "description": "Payment due 30 days from invoice date", "days": 30, "quickPayFee": 0.05, "apOnly": false, "doNotUse": false, "createdAt": "2025-01-15T10:00:00Z", "updatedAt": "2025-01-15T14:30:00Z", "deletedAt": null }, "payments": [ { … } ], "credits": [ { … } ], "factorName": "ARTISPAY", "factorJobId": "string", "factorStatus": "string", "qboId": "string", "documentId": "4704590c-004e-410d-adf7-acb7ca0a7052", "documentUrl": "string", "createdAt": "2019-08-24T14:15:22Z", "updatedAt": "2019-08-24T14:15:22Z" }
- Productionhttps://api.mvmnt.io/v1/invoices/{id}
- Demo (non-production)https://api.demo.mvmnt.io/v1/invoices/{id}
- curl
- JavaScript
- Node.js
- Python
- Java
- C#
- PHP
- Go
- Ruby
- R
- Payload
curl -i -X PATCH \
'https://api.mvmnt.io/v1/invoices/550e8400-e29b-41d4-a716-446655440000?by=key' \
-H 'Authorization: Bearer <YOUR_JWT_HERE>' \
-H 'Content-Type: application/json' \
-d '{
"dueDate": "2025-02-28"
}'Invoice updated successfully
Enhanced reference to a customer resource (returned in responses). Includes full customer details in addition to id/key.
Note: Does NOT include nested references (paymentTerm, contacts, etc.) to prevent recursion. Maximum nesting depth: 1 level.
Current status of the invoice.
DRAFT: Invoice record exists but not finalizedAWAITING_PAYMENT: Invoice finalized, awaiting paymentPARTIALLY_PAID: Some payments received, balance remainsPAID: Fully paidVOIDED: Invoice cancelled/voided
Enhanced reference to a payment term resource (returned in responses). Includes full payment term details in addition to id/key.
Factoring provider for invoice financing.
DENIM: Denim factoringHAULPAY: HaulPay factoring
{ "id": "550e8400-e29b-41d4-a716-446655440000", "friendlyId": "INV-00001", "key": "string", "orderId": "b3e1eced-f2bd-4d8c-9765-fbc9d1d222d5", "orderKey": "string", "shipmentId": "47efd5a2-af91-4417-950a-7f546cd1b5cf", "shipmentKey": "string", "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 }, "status": "DRAFT", "invoiceDate": "2019-08-24", "dueDate": "2019-08-24", "amount": 0, "currency": "USD", "reference": "string", "amountPaid": 0, "amountOwed": 0, "creditsApplied": 0, "paymentTerm": { "id": "550e8400-e29b-41d4-a716-446655440000", "key": "ERP-PAYTERM-NET30", "name": "Net 30", "description": "Payment due 30 days from invoice date", "days": 30, "quickPayFee": 0.05, "apOnly": false, "doNotUse": false, "createdAt": "2025-01-15T10:00:00Z", "updatedAt": "2025-01-15T14:30:00Z", "deletedAt": null }, "payments": [ { … } ], "credits": [ { … } ], "factorName": "ARTISPAY", "factorJobId": "string", "factorStatus": "string", "qboId": "string", "documentId": "4704590c-004e-410d-adf7-acb7ca0a7052", "documentUrl": "string", "createdAt": "2019-08-24T14:15:22Z", "updatedAt": "2019-08-24T14:15:22Z" }
- Productionhttps://api.mvmnt.io/v1/invoices/{id}
- Demo (non-production)https://api.demo.mvmnt.io/v1/invoices/{id}
- curl
- JavaScript
- Node.js
- Python
- Java
- C#
- PHP
- Go
- Ruby
- R
- Payload
curl -i -X DELETE \
'https://api.mvmnt.io/v1/invoices/550e8400-e29b-41d4-a716-446655440000?by=key' \
-H 'Authorization: Bearer <YOUR_JWT_HERE>'- Productionhttps://api.mvmnt.io/v1/invoices/{id}/mark-awaiting
- Demo (non-production)https://api.demo.mvmnt.io/v1/invoices/{id}/mark-awaiting
- curl
- JavaScript
- Node.js
- Python
- Java
- C#
- PHP
- Go
- Ruby
- R
- Payload
curl -i -X POST \
'https://api.mvmnt.io/v1/invoices/550e8400-e29b-41d4-a716-446655440000/mark-awaiting?by=key' \
-H 'Authorization: Bearer <YOUR_JWT_HERE>' \
-H 'Content-Type: application/json' \
-d '{
"invoiceDate": "2025-01-15",
"dueDate": "2025-02-14"
}'Invoice marked as awaiting payment
Enhanced reference to a customer resource (returned in responses). Includes full customer details in addition to id/key.
Note: Does NOT include nested references (paymentTerm, contacts, etc.) to prevent recursion. Maximum nesting depth: 1 level.
Current status of the invoice.
DRAFT: Invoice record exists but not finalizedAWAITING_PAYMENT: Invoice finalized, awaiting paymentPARTIALLY_PAID: Some payments received, balance remainsPAID: Fully paidVOIDED: Invoice cancelled/voided
Enhanced reference to a payment term resource (returned in responses). Includes full payment term details in addition to id/key.
Factoring provider for invoice financing.
DENIM: Denim factoringHAULPAY: HaulPay factoring
{ "id": "550e8400-e29b-41d4-a716-446655440000", "friendlyId": "INV-00001", "key": "string", "orderId": "b3e1eced-f2bd-4d8c-9765-fbc9d1d222d5", "orderKey": "string", "shipmentId": "47efd5a2-af91-4417-950a-7f546cd1b5cf", "shipmentKey": "string", "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 }, "status": "DRAFT", "invoiceDate": "2019-08-24", "dueDate": "2019-08-24", "amount": 0, "currency": "USD", "reference": "string", "amountPaid": 0, "amountOwed": 0, "creditsApplied": 0, "paymentTerm": { "id": "550e8400-e29b-41d4-a716-446655440000", "key": "ERP-PAYTERM-NET30", "name": "Net 30", "description": "Payment due 30 days from invoice date", "days": 30, "quickPayFee": 0.05, "apOnly": false, "doNotUse": false, "createdAt": "2025-01-15T10:00:00Z", "updatedAt": "2025-01-15T14:30:00Z", "deletedAt": null }, "payments": [ { … } ], "credits": [ { … } ], "factorName": "ARTISPAY", "factorJobId": "string", "factorStatus": "string", "qboId": "string", "documentId": "4704590c-004e-410d-adf7-acb7ca0a7052", "documentUrl": "string", "createdAt": "2019-08-24T14:15:22Z", "updatedAt": "2019-08-24T14:15:22Z" }
- Productionhttps://api.mvmnt.io/v1/invoices/{id}/send
- Demo (non-production)https://api.demo.mvmnt.io/v1/invoices/{id}/send
- curl
- JavaScript
- Node.js
- Python
- Java
- C#
- PHP
- Go
- Ruby
- R
- Payload
curl -i -X POST \
'https://api.mvmnt.io/v1/invoices/550e8400-e29b-41d4-a716-446655440000/send?by=key' \
-H 'Authorization: Bearer <YOUR_JWT_HERE>' \
-H 'Content-Type: application/json' \
-d '{
"toEmails": [
"billing@customer.com"
]
}'{ "success": true, "emailId": "0514c0a0-6ba7-4f8f-8504-b765dccdc774" }
- Productionhttps://api.mvmnt.io/v1/invoices/{id}/payments
- Demo (non-production)https://api.demo.mvmnt.io/v1/invoices/{id}/payments
- curl
- JavaScript
- Node.js
- Python
- Java
- C#
- PHP
- Go
- Ruby
- R
- Payload
curl -i -X GET \
'https://api.mvmnt.io/v1/invoices/550e8400-e29b-41d4-a716-446655440000/payments?by=key' \
-H 'Authorization: Bearer <YOUR_JWT_HERE>'{ "data": [ { … } ], "totalPaid": 0, "openBalance": 0 }
Request
Generate invoices for multiple shipments in a single request.
- Creates invoice records for each shipment
- Generates PDF documents
- Optionally sends emails grouped by customer
Shipments that already have invoices or are missing requirements will be skipped and returned in the failed array.
- Productionhttps://api.mvmnt.io/v1/invoices/batch-generate
- Demo (non-production)https://api.demo.mvmnt.io/v1/invoices/batch-generate
- curl
- JavaScript
- Node.js
- Python
- Java
- C#
- PHP
- Go
- Ruby
- R
- Payload
curl -i -X POST \
https://api.mvmnt.io/v1/invoices/batch-generate \
-H 'Authorization: Bearer <YOUR_JWT_HERE>' \
-H 'Content-Type: application/json' \
-d '{
"orderIds": [
"550e8400-e29b-41d4-a716-446655440000",
"550e8400-e29b-41d4-a716-446655440001"
]
}'{ "generated": [ { … } ], "failed": [ { … } ], "emailsSent": 0 }
- Productionhttps://api.mvmnt.io/v1/invoices/aging-report
- Demo (non-production)https://api.demo.mvmnt.io/v1/invoices/aging-report
- curl
- JavaScript
- Node.js
- Python
- Java
- C#
- PHP
- Go
- Ruby
- R
- Payload
curl -i -X GET \
'https://api.mvmnt.io/v1/invoices/aging-report?customerId=497f6eca-6276-4993-bfeb-53cbbbba6f08&daysPerBucket=30&maxDays=120' \
-H 'Authorization: Bearer <YOUR_JWT_HERE>'{ "asOfDate": "2019-08-24", "buckets": [ "Current", "1-30", "31-60", "61-90", "90+" ], "customers": [ { … } ], "totals": { "current": 0, "days1to30": 0, "days31to60": 0, "days61to90": 0, "over90": 0, "total": 0 } }
- Productionhttps://api.mvmnt.io/v1/invoices/{id}/available-credits
- Demo (non-production)https://api.demo.mvmnt.io/v1/invoices/{id}/available-credits
- curl
- JavaScript
- Node.js
- Python
- Java
- C#
- PHP
- Go
- Ruby
- R
- Payload
curl -i -X GET \
'https://api.mvmnt.io/v1/invoices/550e8400-e29b-41d4-a716-446655440000/available-credits?by=key' \
-H 'Authorization: Bearer <YOUR_JWT_HERE>'{ "availableCredits": [ { … } ], "totalAvailable": 0 }
Reference Data
Read-only catalogs (equipment, charge codes, special requirements) referenced by id from other resources.
Every catalog also answers on its short top-level path, so GET /v1/charge-codes and GET /v1/reference-data/charge-codes are the same endpoint. The documented /reference-data/* form is canonical — it keeps the catalogs grouped here as more are added (port codes, cities, zip codes) — and the short form is a convenience alias.