MVMNT Customer Contacts API
Customer contact management operations
Customer contact management operations
Every API here is available over the APIs.io API and to AI agents over MCP.
One button, every client — Claude, Cursor, VS Code and the rest.
https://apis.io/mcp
find_apisBrowse and filter every API in the catalog.get_api_artifactsOne API's artifacts, grouped by type.get_openapiThe primary OpenAPI for this API.find_similar_apisAPIs that look like this one.apis_io_searchSTART HERE — APIs, providers and tags for one query, each with its total.resolveTurn a domain, URL or GitHub org into the provider it belongs to.find_cohortsEvery scored population of providers in the catalog.curl "https://apis.io/api/v1/apis/mvmnt-customer-contacts-api"
curl "https://apis.io/api/v1/apis?limit=25"
Discovery needs no key. Ratings and market analysis are Pro.
openapi: 3.2.0
info:
title: MVMNT Customer Contacts API
version: 1.0.0
description: "The MVMNT API enables you to automate freight brokerage workflows by integrating\ndirectly with our Transportation Management System.\n\n## Authentication\n\nOAuth 2.0 client credentials flow. See [Authentication Guide](/getting-started/authentication)\nfor details.\n\n### Token Endpoint\n\n```\nPOST https://api.mvmnt.io/oauth2/token\n```\n\n#### Request\n\n**Headers:**\n```http\nContent-Type: application/x-www-form-urlencoded\n```\n\n**Body Parameters:**\n```\ngrant_type=client_credentials\nclient_id=YOUR_CLIENT_ID\nclient_secret=YOUR_CLIENT_SECRET\n```\n\n#### Example Request\n\n```bash\ncurl -X POST https://api.mvmnt.io/oauth2/token \\\n -H \"Content-Type: application/x-www-form-urlencoded\" \\\n -d \"grant_type=client_credentials\" \\\n -d \"client_id=YOUR_CLIENT_ID\" \\\n -d \"client_secret=YOUR_CLIENT_SECRET\"\n```\n\n#### Success Response\n\n**Status:** `200 OK`\n\n```json\n{\n \"access_token\": \"eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9...\",\n \"token_type\": \"Bearer\",\n \"expires_in\": 3600\n}\n```\n\n**Response Fields:**\n- `access_token`: JWT Bearer token to use for API requests\n- `token_type`: Always `Bearer`\n- `expires_in`: Token lifetime in seconds (3600 = 1 hour)\n"
contact:
name: MVMNT Support
email: support@mvmnt.io
url: https://docs.mvmnt.io
license:
name: Proprietary
url: https://mvmnt.io/legal/terms
x-parsed-md-description:
result:
- $$mdtype: Node
errors: []
lines:
- 0
- 2
inline: false
attributes: {}
children:
- $$mdtype: Node
errors: []
lines:
- 0
- 2
inline: false
attributes: {}
children:
- $$mdtype: Node
errors: []
lines:
- 0
- 2
inline: true
attributes:
content: The MVMNT API enables you to automate freight brokerage workflows by integrating
children: []
type: text
annotations: []
slots: {}
- $$mdtype: Node
errors: []
lines:
- 0
- 2
inline: true
attributes: {}
children: []
type: softbreak
annotations: []
slots: {}
- $$mdtype: Node
errors: []
lines:
- 0
- 2
inline: true
attributes:
content: directly with our Transportation Management System.
children: []
type: text
annotations: []
slots: {}
type: inline
annotations: []
slots: {}
type: paragraph
annotations: []
slots: {}
- $$mdtype: Node
errors: []
lines:
- 3
- 4
inline: false
attributes:
level: 2
children:
- $$mdtype: Node
errors: []
lines:
- 3
- 4
inline: false
attributes: {}
children:
- $$mdtype: Node
errors: []
lines:
- 3
- 4
inline: true
attributes:
content: Authentication
children: []
type: text
annotations: []
slots: {}
type: inline
annotations: []
slots: {}
type: heading
annotations: []
slots: {}
- $$mdtype: Node
errors: []
lines:
- 5
- 6
inline: false
attributes: {}
children:
- $$mdtype: Node
errors: []
lines:
- 5
- 6
inline: false
attributes: {}
children:
- $$mdtype: Node
errors: []
lines:
- 5
- 6
inline: true
attributes:
content: 'OAuth 2.0 client credentials flow. See '
children: []
type: text
annotations: []
slots: {}
- $$mdtype: Node
errors: []
lines:
- 5
- 6
inline: true
attributes:
href: /getting-started/authentication
children:
- $$mdtype: Node
errors: []
lines:
- 5
- 6
inline: true
attributes:
content: Authentication Guide
children: []
type: text
annotations: []
slots: {}
type: link
annotations: []
slots: {}
redocly:::linkOriginal:href: /getting-started/authentication
- $$mdtype: Node
errors: []
lines:
- 5
- 6
inline: true
attributes:
content: ' for details.'
children: []
type: text
annotations: []
slots: {}
type: inline
annotations: []
slots: {}
type: paragraph
annotations: []
slots: {}
servers:
- url: https://api.mvmnt.io/v1
description: Production
security:
- BearerAuth: []
tags:
- name: Customer Contacts
description: Customer contact management operations
paths:
/customer-contacts/filter:
post:
tags:
- Customer Contacts
summary: Filter customer contacts
description: 'Query customer contacts using flexible filter criteria with AND/OR logic.
By default, only non-deleted customer contacts are returned (deletedAt: { isNull: true }).
Override this by explicitly setting deletedAt filter criteria.
'
operationId: filterCustomerContacts
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/CustomerContactFilterRequest'
responses:
'200':
description: Filtered customer contacts with pagination
content:
application/json:
schema:
type: object
required:
- data
- pageInfo
properties:
data:
type: array
items:
$ref: '#/components/schemas/CustomerContact'
pageInfo:
$ref: '#/components/schemas/PaginationInfo'
'400':
$ref: '#/components/responses/BadRequestError'
'401':
$ref: '#/components/responses/UnauthorizedError'
'500':
$ref: '#/components/responses/InternalServerError'
/customer-contacts:
post:
tags:
- Customer Contacts
summary: Create customer contact
description: 'Create a new customer contact. The contactInfo will create a new Contact record,
and the CustomerContact will reference it via parentContactId (managed internally).
'
operationId: createCustomerContact
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/CustomerContactInput'
responses:
'201':
description: Customer contact created successfully
content:
application/json:
schema:
$ref: '#/components/schemas/CustomerContact'
'400':
$ref: '#/components/responses/BadRequestError'
'401':
$ref: '#/components/responses/UnauthorizedError'
'409':
$ref: '#/components/responses/ConflictError'
'500':
$ref: '#/components/responses/InternalServerError'
/customer-contacts/{id}:
get:
tags:
- Customer Contacts
summary: Get customer contact
description: Retrieve a single customer contact by its unique identifier
operationId: getCustomerContactById
parameters:
- $ref: '#/components/parameters/IdOrClientKey'
responses:
'200':
description: Customer contact found
content:
application/json:
schema:
$ref: '#/components/schemas/CustomerContact'
'400':
$ref: '#/components/responses/BadRequestError'
'401':
$ref: '#/components/responses/UnauthorizedError'
'404':
$ref: '#/components/responses/NotFoundError'
'500':
$ref: '#/components/responses/InternalServerError'
patch:
tags:
- Customer Contacts
summary: Update customer contact
description: 'Partially update a customer contact. Only provided fields will be updated.
- **Omitted fields**: Not modified (current value preserved)
- **Provided fields**: Updated to the new value
- **Null values**: Clear the field (set to null) where applicable
When updating contactInfo, the underlying Contact record is updated.
'
operationId: updateCustomerContact
parameters:
- $ref: '#/components/parameters/IdOrClientKey'
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/CustomerContactPatch'
responses:
'200':
description: Customer contact updated successfully
content:
application/json:
schema:
$ref: '#/components/schemas/CustomerContact'
'400':
$ref: '#/components/responses/BadRequestError'
'401':
$ref: '#/components/responses/UnauthorizedError'
'404':
$ref: '#/components/responses/NotFoundError'
'409':
$ref: '#/components/responses/ConflictError'
'500':
$ref: '#/components/responses/InternalServerError'
delete:
tags:
- Customer Contacts
summary: Delete customer contact
description: 'Soft delete a customer contact (sets deletedAt timestamp).
The contact will no longer appear in default queries but can be retrieved
by explicitly filtering for deleted records.
'
operationId: deleteCustomerContact
parameters:
- $ref: '#/components/parameters/IdOrClientKey'
responses:
'204':
description: Customer contact deleted successfully
'400':
$ref: '#/components/responses/BadRequestError'
'401':
$ref: '#/components/responses/UnauthorizedError'
'404':
$ref: '#/components/responses/NotFoundError'
'500':
$ref: '#/components/responses/InternalServerError'
components:
responses:
InternalServerError:
description: Internal server error
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
example:
error: internal_server_error
message: An unexpected error occurred
NotFoundError:
description: Resource not found
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
example:
error: not_found
message: Resource not found
ConflictError:
description: Conflict - resource already exists or constraint violation
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
example:
error: conflict
message: A resource with this identifier already exists
BadRequestError:
description: Bad request - invalid input
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
example:
error: bad_request
message: Invalid request parameters
UnauthorizedError:
description: Unauthorized - invalid or missing access token
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
example:
error: unauthorized
message: Invalid or expired access token
parameters:
IdOrClientKey:
name: id
in: path
required: true
description: Resource ID (UUID) or client key
schema:
type: string
example: 550e8400-e29b-41d4-a716-446655440000
schemas:
CustomerContactPatch:
type: object
description: 'Partial contact update. All fields are optional.
- **Omitted fields**: Not modified (current value preserved)
- **Provided fields**: Updated to the new value
- **Null values**: Clear the field (set to null) where applicable
Note: customerId cannot be updated after creation.
'
properties:
name:
type: string
description: Contact person's name (should match contactInfo.name if updating both)
example: John Smith
contactInfo:
anyOf:
- $ref: '#/components/schemas/ContactInfoPatch'
- type: 'null'
description: 'Contact information update. Provide partial or full contact data to update the parent Contact record.
Cannot be set to null (contact info is required).
'
phoneExtension:
type:
- string
- 'null'
description: Phone extension
example: '1234'
isPrimary:
type: boolean
description: Whether this is the primary contact
example: true
contactTypes:
type:
- array
- 'null'
items:
$ref: '#/components/schemas/CustomerContactType'
description: Types/roles this contact serves (replaces entire array)
example:
- BILLING
- ACCOUNT_MANAGER
notifications:
type:
- array
- 'null'
items:
$ref: '#/components/schemas/CustomerContactNotificationType'
description: Notification types (replaces entire array)
example:
- SHIPMENT_PICKED_UP
- SHIPMENT_DELIVERED
key:
type:
- string
- 'null'
maxLength: 512
description: Client-defined reference identifier
example: ERP-CONTACT-JOHN-001
CustomerContactFilter:
type: object
description: Filter criteria for contacts with AND/OR logic support
properties:
and:
type: array
description: All conditions must match (recursive)
items:
$ref: '#/components/schemas/CustomerContactFilter'
or:
type: array
description: At least one condition must match (recursive)
items:
$ref: '#/components/schemas/CustomerContactFilter'
not:
$ref: '#/components/schemas/CustomerContactFilter'
description: Negates the filter
id:
$ref: '#/components/schemas/IDFilter'
customerId:
$ref: '#/components/schemas/UUIDFilter'
name:
$ref: '#/components/schemas/StringFilter'
email:
$ref: '#/components/schemas/StringFilter'
phoneNumber:
$ref: '#/components/schemas/StringFilter'
phoneExtension:
$ref: '#/components/schemas/StringFilter'
isPrimary:
$ref: '#/components/schemas/BooleanFilter'
contactTypes:
$ref: '#/components/schemas/CustomerContactTypeFilter'
notifications:
$ref: '#/components/schemas/CustomerContactNotificationTypeFilter'
invitedUserId:
$ref: '#/components/schemas/UUIDFilter'
deletedById:
$ref: '#/components/schemas/UUIDFilter'
key:
$ref: '#/components/schemas/ClientKeyFilter'
createdAt:
$ref: '#/components/schemas/DatetimeFilter'
deletedAt:
$ref: '#/components/schemas/DatetimeFilter'
UUIDFilter:
type: object
description: Filter options for UUID fields (all operations)
properties:
equalTo:
type: string
format: uuid
description: Exact match
notEqualTo:
type: string
format: uuid
description: Not equal to
in:
type: array
items:
type: string
format: uuid
description: Matches any UUID in the array
notIn:
type: array
items:
type: string
format: uuid
description: Does not match any UUID in the array
isNull:
type: boolean
description: Field is null (true) or not null (false)
UserReference:
type: object
description: 'Enhanced reference to a user resource (returned in responses).
Includes full user details in addition to id/key.
Note: Does NOT include nested references (teams, etc.) to prevent recursion.
Maximum nesting depth: 1 level.
'
required:
- id
- email
- status
- createdAt
- updatedAt
properties:
id:
type: string
format: uuid
description: User UUID
example: 550e8400-e29b-41d4-a716-446655440000
key:
type:
- string
- 'null'
maxLength: 512
description: Client-defined reference ID if set
example: ERP-USER-12345
email:
type: string
format: email
description: User's email address
example: john.doe@example.com
name:
type:
- string
- 'null'
description: User's full name
example: John Doe
phone:
type:
- string
- 'null'
description: User's phone number
example: +1-555-123-4567
phoneExt:
type:
- string
- 'null'
description: Phone extension
example: '123'
status:
type: string
description: User account status
enum:
- PENDING
- ACTIVE
- INACTIVE
example: ACTIVE
avatarId:
type:
- string
- 'null'
format: uuid
description: Profile avatar document ID
example: 7c9e6679-7425-40de-944b-e07fc1f90ae7
createdAt:
type: string
format: date-time
description: When the user was created
example: '2025-01-15T10:00:00Z'
updatedAt:
type: string
format: date-time
description: When the user was last updated
example: '2025-01-15T14:30:00Z'
deletedAt:
type:
- string
- 'null'
format: date-time
description: When the user was soft deleted (null if active)
example: null
CustomerContactNotificationType:
type: string
description: Types of shipment notifications the contact should receive
enum:
- SHIPMENT_DELIVERED
- SHIPMENT_IN_TRANSIT
- SHIPMENT_LOADING
- SHIPMENT_OUT_FOR_DELIVERY
- SHIPMENT_PICKED_UP
- SHIPMENT_TENDER_REJECTED
- SHIPMENT_UNLOADING
CustomerContactInput:
type: object
required:
- customerId
- name
- contactInfo
properties:
customerId:
type: string
format: uuid
description: Customer this contact belongs to
example: 550e8400-e29b-41d4-a716-446655440001
name:
type: string
description: Contact person's name (should match contactInfo.name)
example: John Smith
contactInfo:
$ref: '#/components/schemas/ContactInfoInput'
description: Contact information details (will create new Contact record)
phoneExtension:
type: string
description: Phone extension specific to this contact role
example: '1234'
isPrimary:
type: boolean
default: false
description: Whether this is the primary contact for the customer
example: true
contactTypes:
type: array
items:
$ref: '#/components/schemas/CustomerContactType'
description: Types/roles this contact serves
example:
- BILLING
- ACCOUNT_MANAGER
notifications:
type: array
items:
$ref: '#/components/schemas/CustomerContactNotificationType'
description: Shipment notification types to send to this contact
example:
- SHIPMENT_PICKED_UP
- SHIPMENT_DELIVERED
key:
type: string
maxLength: 512
description: Client-defined reference identifier
example: ERP-CONTACT-JOHN-001
CustomerContact:
type: object
required:
- id
- customer
- name
- isPrimary
- contactInfo
- createdAt
properties:
object:
type: string
enum:
- CUSTOMER_CONTACT
readOnly: true
description: Object type identifier
example: CUSTOMER_CONTACT
id:
type: string
format: uuid
readOnly: true
description: Unique contact identifier
example: 550e8400-e29b-41d4-a716-446655440000
customer:
$ref: '#/components/schemas/CustomerReference'
description: Customer this contact belongs to (full customer details)
name:
type: string
description: Contact person's name (denormalized from ContactInfo for convenience)
example: John Smith
contactInfo:
allOf:
- $ref: '#/components/schemas/ContactInfo'
description: Contact information details (email, phone, title) - nested from parent Contact record
phoneExtension:
type:
- string
- 'null'
description: Phone extension specific to this contact role
example: '1234'
isPrimary:
type: boolean
description: Whether this is the primary contact for the customer
example: true
contactTypes:
type:
- array
- 'null'
items:
$ref: '#/components/schemas/CustomerContactType'
description: Types/roles this contact serves
example:
- BILLING
- ACCOUNT_MANAGER
notifications:
type:
- array
- 'null'
items:
$ref: '#/components/schemas/CustomerContactNotificationType'
description: Shipment notification types to send to this contact
example:
- SHIPMENT_PICKED_UP
- SHIPMENT_DELIVERED
invitedUser:
anyOf:
- $ref: '#/components/schemas/UserReference'
- type: 'null'
readOnly: true
description: User account invited/created for this contact (full user details)
deletedBy:
anyOf:
- $ref: '#/components/schemas/UserReference'
- type: 'null'
readOnly: true
description: User who deleted this contact (full user details)
key:
type:
- string
- 'null'
maxLength: 512
description: Client-defined reference identifier
example: ERP-CONTACT-JOHN-001
createdAt:
type: string
format: date-time
readOnly: true
description: When the contact was created
example: '2025-01-15T10:00:00Z'
deletedAt:
type:
- string
- 'null'
format: date-time
readOnly: true
description: When the contact was soft deleted (null if active)
example: null
DatetimeFilter:
type: object
description: Filter options for datetime fields
properties:
equalTo:
type: string
format: date-time
description: Exact match
notEqualTo:
type: string
format: date-time
description: Not equal to
lessThan:
type: string
format: date-time
description: Before this datetime
lessThanOrEqualTo:
type: string
format: date-time
description: On or before this datetime
greaterThan:
type: string
format: date-time
description: After this datetime
greaterThanOrEqualTo:
type: string
format: date-time
description: On or after this datetime
isNull:
type: boolean
description: Field is null (true) or not null (false)
CustomerContactTypeFilter:
type: object
description: Filter for contact type enum array field
properties:
includes:
$ref: '#/components/schemas/CustomerContactType'
description: Array contains this contact type
notIncludes:
$ref: '#/components/schemas/CustomerContactType'
description: Array does not contain this contact type
isNull:
type: boolean
description: Field is null (true) or not null (false)
ContactInfo:
type: object
description: 'Contact information details (nested, without id).
This is an embedded object representing a Contact record. The id is managed
internally and not exposed in the API.
'
required:
- name
properties:
name:
type: string
description: Contact person's full name
example: John Smith
email:
type:
- string
- 'null'
format: email
description: Email address
example: john.smith@example.com
phoneNumber:
type:
- string
- 'null'
description: Phone number
example: +1-555-0100
title:
type:
- string
- 'null'
description: Job title or position
example: Operations Manager
ContactInfoInput:
type: object
description: Contact information for creating a new contact record
required:
- name
properties:
name:
type: string
description: Contact person's full name
example: John Smith
email:
type: string
format: email
description: Email address
example: john.smith@example.com
phoneNumber:
type: string
description: Phone number
example: +1-555-0100
title:
type: string
description: Job title or position
example: Operations Manager
Error:
type: object
required:
- error
- message
properties:
error:
type: string
description: Error code
message:
type: string
description: Human-readable error message
CustomerContactFilterRequest:
type: object
description: Request body for filtering contacts
properties:
filter:
$ref: '#/components/schemas/CustomerContactFilter'
description: 'Filter criteria (optional - omit to return all contacts).
Note: deletedAt automatically defaults to { isNull: true } unless explicitly overridden.
'
pageSize:
type: integer
minimum: 1
maximum: 250
default: 50
description: Number of results per page
cursor:
type: string
description: Pagination cursor for next page
example:
filter:
and:
- isPrimary:
equalTo: true
- contactTypes:
includes: BILLING
pageSize: 50
IDFilter:
type: object
description: Filter options for ID fields (limited operations - exact match only)
properties:
equalTo:
type: string
format: uuid
description: Exact match
in:
type: array
description: Matches any UUID in the array
items:
type: string
format: uuid
CustomerContactNotificationTypeFilter:
type: object
description: Filter for notification type enum array field
properties:
includes:
$ref: '#/components/schemas/CustomerContactNotificationType'
description: Array contains this notification type
notIncludes:
$ref: '#/components/schemas/CustomerContactNotificationType'
description: Array does not contain this notification type
isNull:
type: boolean
description: Field is null (true) or not null (false)
BooleanFilter:
type: object
description: Filter options for boolean fields
properties:
equalTo:
type: boolean
description: Exact match
notEqualTo:
type: boolean
description: Not equal to
isNull:
type: boolean
description: Field is null (true) or not null (false)
CustomerContactType:
type: string
description: Type of customer contact role
enum:
- ACCOUNT_MANAGER
- BILLING
- DOCK_SHIPPING
- EMERGENCY
- LOCATION_MANAGER
- OWNER
- PROCUREMENT
- PURCHASING
- RATES_PRICING
- RECEIVING
- SHIPPING
PaginationInfo:
type: object
required:
- pageSize
- hasNextPage
properties:
pageSize:
type: integer
description: Number of items per page
example: 50
hasNextPage:
type: boolean
description: Whether there are more pages
example: true
hasPreviousPage:
type: boolean
description: Whether there are previous pages
example: false
endCursor:
type:
- string
- 'null'
description: Cursor for the next page (null if no next page)
example: eyJpZCI6IjU1MGU4NDAwLWUyOWItNDFkNC1hNzE2LTQ0NjY1NTQ0MDAwMCJ9
ClientKeyFilter:
type: object
description: Filter options for client key fields (limited operations - exact match only)
properties:
equalTo:
type: string
description: Exact match
in:
type: array
description: Matches any value in the array
items:
type: string
isNull:
type: boolean
description: Field is null (true) or not null (false)
ContactInfoPatch:
type: object
description: 'Partial contact information update. All fields are optional.
- **Omitted fields**: Not modified (current value preserved)
- **Provided fields**: Updated to the new value
- **Null values**: Clear the field (set to null) where applicable
'
properties:
name:
type: string
description: Contact person's full name
example: John Smith
email:
type:
- string
- 'null'
format: email
description: Email address
example: john.smith@example.com
phoneNumber:
type:
- string
- 'null'
description: Phone number
example: +1-555-0100
title:
type:
- string
- 'null'
description: Job title or position
example: Operations Manager
StringFilter:
type: object
description: Filter options for string fields
properties:
equalTo:
type: string
description: Exact match
notEqualTo:
type: string
description: Not equal to
in:
type: array
items:
type: string
description: Matches any value in the array
notIn:
type: array
items:
type: string
description: Does not match any value in the array
includes:
type: string
description: Contains substring (case-insensitive)
notIncludes:
type: string
description: Does not contain substring (case-insensitive)
startsWith:
type: string
description: Starts with prefix (case-insensitive)
notStartsWith:
type: string
description: Does not start with prefix (case-insensitive)
endsWith:
type: string
description: Ends with suffix (case-insensitive)
notEndsWith:
type: string
description: Does not end
# --- truncated at 32 KB (34 KB total) ---
# Full source: https://raw.githubusercontent.com/api-evangelist/mvmnt/refs/heads/main/openapi/mvmnt-customer-contacts-api-openapi.yml