Work with this as data
Every API here is available over the APIs.io API and to AI agents over MCP.
MCP server
One button, every client — Claude, Cursor, VS Code and the rest.
https://apis.io/mcp
Tools for apis
7 MCP tools reach this
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.
Call it yourself
curl for this page
This API
curl "https://apis.io/api/v1/apis/mvmnt-users-api"
All apis
curl "https://apis.io/api/v1/apis?limit=25"
Discovery needs no key. Ratings and market analysis are Pro.
OpenAPI Specification
openapi: 3.2.0
info:
title: MVMNT Users 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: Users
description: User management operations
paths:
/users/filter:
post:
summary: Filter users
description: 'Filter users using comprehensive query criteria with AND/OR logic and multiple operators.
Supports complex filtering similar to GraphQL capabilities.
Note: Soft-deleted users are excluded by default (deletedAt defaults to { isNull: true }).
'
operationId: filterUsers
tags:
- Users
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/UserFilterRequest'
responses:
'200':
description: Successful response
content:
application/json:
schema:
type: object
properties:
data:
type: array
items:
$ref: '#/components/schemas/User'
pagination:
$ref: '#/components/schemas/PaginationInfo'
'400':
$ref: '#/components/responses/BadRequestError'
'401':
$ref: '#/components/responses/UnauthorizedError'
'422':
$ref: '#/components/responses/ValidationError'
'429':
$ref: '#/components/responses/RateLimitExceeded'
x-parsed-md-description:
result:
- $$mdtype: Node
errors: []
lines:
- 0
- 3
inline: false
attributes: {}
children:
- $$mdtype: Node
errors: []
lines:
- 0
- 3
inline: false
attributes: {}
children:
- $$mdtype: Node
errors: []
lines:
- 0
- 3
inline: true
attributes:
content: Filter users using comprehensive query criteria with AND/OR logic and multiple operators.
children: []
type: text
annotations: []
slots: {}
- $$mdtype: Node
errors: []
lines:
- 0
- 3
inline: true
attributes: {}
children: []
type: softbreak
annotations: []
slots: {}
- $$mdtype: Node
errors: []
lines:
- 0
- 3
inline: true
attributes:
content: Supports complex filtering similar to GraphQL capabilities.
children: []
type: text
annotations: []
slots: {}
- $$mdtype: Node
errors: []
lines:
- 0
- 3
inline: true
attributes: {}
children: []
type: softbreak
annotations: []
slots: {}
- $$mdtype: Node
errors: []
lines:
- 0
- 3
inline: true
attributes:
content: 'Note: Soft-deleted users are excluded by default (deletedAt defaults to { isNull: true }).'
children: []
type: text
annotations: []
slots: {}
type: inline
annotations: []
slots: {}
type: paragraph
annotations: []
slots: {}
/users:
post:
summary: Create user
description: Create a new user in your organization
operationId: createUser
tags:
- Users
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/UserInput'
responses:
'201':
description: User created successfully
content:
application/json:
schema:
$ref: '#/components/schemas/User'
'400':
$ref: '#/components/responses/BadRequestError'
'401':
$ref: '#/components/responses/UnauthorizedError'
'422':
$ref: '#/components/responses/ValidationError'
'429':
$ref: '#/components/responses/RateLimitExceeded'
/users/{id}:
get:
summary: Get user
description: Retrieve a user by ID or client key
operationId: getUser
tags:
- Users
parameters:
- $ref: '#/components/parameters/IdOrClientKey'
- $ref: '#/components/parameters/LookupBy'
responses:
'200':
description: Successful response
content:
application/json:
schema:
$ref: '#/components/schemas/User'
'401':
$ref: '#/components/responses/UnauthorizedError'
'404':
$ref: '#/components/responses/NotFoundError'
'429':
$ref: '#/components/responses/RateLimitExceeded'
patch:
summary: Update user
description: Partially update a user. Only provided fields will be updated.
operationId: updateUser
tags:
- Users
parameters:
- $ref: '#/components/parameters/IdOrClientKey'
- $ref: '#/components/parameters/LookupBy'
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/UserPatch'
responses:
'200':
description: User updated successfully
content:
application/json:
schema:
$ref: '#/components/schemas/User'
'400':
$ref: '#/components/responses/BadRequestError'
'401':
$ref: '#/components/responses/UnauthorizedError'
'404':
$ref: '#/components/responses/NotFoundError'
'422':
$ref: '#/components/responses/ValidationError'
'429':
$ref: '#/components/responses/RateLimitExceeded'
delete:
summary: Delete user
description: Soft delete a user (sets deletedAt timestamp)
operationId: deleteUser
tags:
- Users
parameters:
- $ref: '#/components/parameters/IdOrClientKey'
- $ref: '#/components/parameters/LookupBy'
responses:
'204':
description: User deleted successfully
'401':
$ref: '#/components/responses/UnauthorizedError'
'404':
$ref: '#/components/responses/NotFoundError'
'429':
$ref: '#/components/responses/RateLimitExceeded'
/users/search:
post:
summary: Search users
description: 'Search users using OpenSearch-powered full-text and field-specific search.
This endpoint provides fast, indexed search across user data with support for:
- Full-text search across multiple fields
- Field-specific filtering with various operators
- Sorting and pagination
- Saved search preferences
**Note:** Only active (non-deleted) users are searchable. Soft-deleted records are automatically excluded from all search results.
**Response Formats:**
- `flat` (default): Returns indexed fields only for faster performance
- `full`: Returns complete user objects with all relationships
'
operationId: searchUsers
tags:
- Users
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/UserSearchRequest'
responses:
'200':
description: Successful search results
content:
application/json:
schema:
$ref: '#/components/schemas/UserSearchResponse'
'400':
$ref: '#/components/responses/BadRequestError'
'401':
$ref: '#/components/responses/UnauthorizedError'
'422':
$ref: '#/components/responses/ValidationError'
'429':
$ref: '#/components/responses/RateLimitExceeded'
components:
schemas:
UserSearchResponse:
type: object
description: 'Response for user search requests.
Note: Only active (non-deleted) users are included in results.
'
required:
- data
- pagination
- totalResults
properties:
data:
type: array
description: Search results - either flat rows or full user objects based on format parameter
items:
oneOf:
- $ref: '#/components/schemas/UserSearchRow'
- $ref: '#/components/schemas/User'
discriminator:
propertyName: object
mapping:
USER_SEARCH_ROW: '#/components/schemas/UserSearchRow'
USER: '#/components/schemas/User'
pagination:
$ref: '#/components/schemas/SearchPaginationInfo'
totalResults:
type: integer
description: Total number of matching results (excluding soft-deleted records)
minimum: 0
RelativeTimeUnit:
type: string
enum:
- YEAR
- MONTH
- WEEK
- DAY
- HOUR
- MINUTE
- SECOND
description: 'Time unit for relative time calculations:
- `YEAR`: Years
- `MONTH`: Months
- `WEEK`: Weeks
- `DAY`: Days
- `HOUR`: Hours
- `MINUTE`: Minutes
- `SECOND`: Seconds
'
SearchPaginationInput:
type: object
description: Pagination options for search requests
properties:
pageNumber:
type: integer
minimum: 1
default: 1
description: Page number (1-based)
example: 1
pageSize:
type: integer
minimum: 1
maximum: 250
default: 50
description: Number of results per page (max 250)
example: 50
example:
pageNumber: 1
pageSize: 50
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)
KeywordSearchCriteria:
type: object
required:
- operator
description: Search criteria for keyword fields (exact match, no partial matching)
properties:
operator:
type: string
enum:
- EQUALS
- NOT_EQUALS
- ONE_OF
- NOT_ONE_OF
- EXISTS
- DOES_NOT_EXIST
description: 'Search operator:
- `EQUALS`: Exact match
- `NOT_EQUALS`: Not equal to
- `ONE_OF`: Matches any value in array
- `NOT_ONE_OF`: Does not match any value in array
- `EXISTS`: Field has a value (not null)
- `DOES_NOT_EXIST`: Field is null
'
values:
type: array
items:
type: string
description: Array of values for ONE_OF or NOT_ONE_OF operators
example:
- ACTIVE
- PENDING
example:
operator: ONE_OF
values:
- ACTIVE
- PENDING
UserSearchRow:
type: object
description: 'Flattened user data from search index.
Note: This represents only active users. Soft-deleted records are never returned.
'
properties:
object:
type: string
enum:
- USER_SEARCH_ROW
description: Object type identifier for discriminating between flat and full response formats
id:
type: string
format: uuid
name:
type: string
email:
type: string
format: email
emailVerified:
type: boolean
description: Whether email is verified
phone:
type:
- string
- 'null'
status:
type: string
enum:
- pending
- active
- inactive
roles:
type: array
items:
type: string
description: User roles
visibility:
type:
- string
- 'null'
enum:
- ALL
- LIMITED
teamIds:
type: array
items:
type: string
format: uuid
description: Team IDs (maps from groupIds)
teamNames:
type: array
items:
type: string
description: Team names (maps from groupNames)
customersCount:
type: integer
description: Number of customers (maps from shippersCount)
quotesCount:
type:
- integer
- 'null'
quotesWon:
type:
- integer
- 'null'
quoteWinRate:
type:
- number
- 'null'
format: float
description: Win rate percentage
ordersCount:
type: integer
description: Number of shipments
ordersTotalRevenue:
type: number
format: float
description: Total shipment revenue
ordersTotalTransportationCost:
type: number
format: float
description: Total transportation cost
ordersTotalGrossProfit:
type: number
format: float
description: Total gross profit
averageGrossProfitPerOrder:
type:
- number
- 'null'
format: float
description: Average gross profit per shipment
carriersCount:
type: integer
description: Number of carriers
createdAt:
type: string
format: date-time
lastInvitedAt:
type:
- string
- 'null'
format: date-time
required:
- object
- id
- name
- email
- emailVerified
- status
- customersCount
- ordersCount
- ordersTotalRevenue
- ordersTotalTransportationCost
- ordersTotalGrossProfit
- carriersCount
- createdAt
UserSearchRequest:
type: object
description: Request body for searching users
properties:
criteria:
$ref: '#/components/schemas/UserSearchCriteria'
description: Search criteria to filter users
pagination:
$ref: '#/components/schemas/SearchPaginationInput'
sort:
type: array
items:
$ref: '#/components/schemas/SearchSortOption'
maxItems: 3
description: Sort options for the search results
savedSearch:
$ref: '#/components/schemas/SavedSearchLookup'
description: 'Optional saved search to load preferences from.
When provided, the saved search criteria will be loaded and merged with any explicit criteria.
'
format:
type: string
enum:
- flat
- full
default: flat
description: 'Response format:
- flat: Returns only indexed fields (default, faster)
- full: Returns complete user objects
'
UserSearchCriteria:
type: object
description: 'Search criteria for filtering users.
Note: Only active (non-deleted) users are searchable. Soft-deleted records are automatically excluded.
'
properties:
id:
$ref: '#/components/schemas/UUIDSearchCriteria'
name:
$ref: '#/components/schemas/TextSearchCriteria'
description: User name
email:
$ref: '#/components/schemas/TextSearchCriteria'
description: Email address
emailVerified:
$ref: '#/components/schemas/BooleanSearchCriteria'
description: Whether email is verified
phone:
$ref: '#/components/schemas/TextSearchCriteria'
description: Phone number
status:
$ref: '#/components/schemas/KeywordSearchCriteria'
description: Status (pending, active, inactive)
roles:
$ref: '#/components/schemas/KeywordSearchCriteria'
description: User roles
visibility:
$ref: '#/components/schemas/KeywordSearchCriteria'
description: Visibility level (ALL, LIMITED)
teamIds:
$ref: '#/components/schemas/UUIDSearchCriteria'
description: Team IDs (internal field groupIds)
teamNames:
$ref: '#/components/schemas/TextSearchCriteria'
description: Team names (internal field groupNames)
customersCount:
$ref: '#/components/schemas/IntSearchCriteria'
description: Number of customers (internal field shippersCount)
quotesCount:
$ref: '#/components/schemas/IntSearchCriteria'
description: Number of quotes
quotesWon:
$ref: '#/components/schemas/IntSearchCriteria'
description: Number of quotes won
quoteWinRate:
$ref: '#/components/schemas/FloatSearchCriteria'
description: Quote win rate percentage
ordersCount:
$ref: '#/components/schemas/IntSearchCriteria'
description: Number of shipments
ordersTotalRevenue:
$ref: '#/components/schemas/FloatSearchCriteria'
description: Total shipment revenue
ordersTotalTransportationCost:
$ref: '#/components/schemas/FloatSearchCriteria'
description: Total shipment transportation cost
ordersTotalGrossProfit:
$ref: '#/components/schemas/FloatSearchCriteria'
description: Total shipment gross profit
averageGrossProfitPerOrder:
$ref: '#/components/schemas/FloatSearchCriteria'
description: Average gross profit per shipment
carriersCount:
$ref: '#/components/schemas/IntSearchCriteria'
description: Number of carriers
createdAt:
$ref: '#/components/schemas/DatetimeSearchCriteria'
lastInvitedAt:
$ref: '#/components/schemas/DatetimeSearchCriteria'
description: When the user was last invited
SavedSearchLookup:
type: object
description: 'Reference to a saved search by ID or client key.
Provide either id or key (not both).
'
properties:
id:
type: string
format: uuid
description: Saved search UUID
example: 550e8400-e29b-41d4-a716-446655440000
key:
type: string
maxLength: 512
description: Client-defined key for the saved search
example: my-carrier-search
example:
id: 550e8400-e29b-41d4-a716-446655440000
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)
UserRole:
type: string
enum:
- CUSTOMER_REP
- CARRIER_REP
- AR_AP
- COMPLIANCE
- ADMIN
description: 'User role within the organization:
- `CUSTOMER_REP`: Customer service representative
- `CARRIER_REP`: Carrier service representative
- `AR_AP`: Accounts receivable/payable
- `COMPLIANCE`: Compliance officer
- `ADMIN`: System administrator
'
x-parsed-md-description:
result:
- $$mdtype: Node
errors: []
lines:
- 0
- 1
inline: false
attributes: {}
children:
- $$mdtype: Node
errors: []
lines:
- 0
- 1
inline: false
attributes: {}
children:
- $$mdtype: Node
errors: []
lines:
- 0
- 1
inline: true
attributes:
content: 'User role within the organization:'
children: []
type: text
annotations: []
slots: {}
type: inline
annotations: []
slots: {}
type: paragraph
annotations: []
slots: {}
- $$mdtype: Node
errors: []
lines:
- 1
- 6
inline: false
attributes:
ordered: false
marker: '-'
children:
- $$mdtype: Node
errors: []
lines:
- 1
- 2
inline: false
attributes: {}
children:
- $$mdtype: Node
errors: []
lines:
- 1
- 2
inline: false
attributes: {}
children:
- $$mdtype: Node
errors: []
lines:
- 1
- 2
inline: true
attributes:
content: CUSTOMER_REP
children: []
type: code
annotations: []
slots: {}
- $$mdtype: Node
errors: []
lines:
- 1
- 2
inline: true
attributes:
content: ': Customer service representative'
children: []
type: text
annotations: []
slots: {}
type: inline
annotations: []
slots: {}
type: item
annotations: []
slots: {}
- $$mdtype: Node
errors: []
lines:
- 2
- 3
inline: false
attributes: {}
children:
- $$mdtype: Node
errors: []
lines:
- 2
- 3
inline: false
attributes: {}
children:
- $$mdtype: Node
errors: []
lines:
- 2
- 3
inline: true
attributes:
content: CARRIER_REP
children: []
type: code
annotations: []
slots: {}
- $$mdtype: Node
errors: []
lines:
- 2
- 3
inline: true
attributes:
content: ': Carrier service representative'
children: []
type: text
annotations: []
slots: {}
type: inline
annotations: []
slots: {}
type: item
annotations: []
slots: {}
- $$mdtype: Node
errors: []
lines:
- 3
- 4
inline: false
attributes: {}
children:
- $$mdtype: Node
errors: []
lines:
- 3
- 4
inline: false
attributes: {}
children:
- $$mdtype: Node
errors: []
lines:
- 3
- 4
inline: true
attributes:
content: AR_AP
children: []
type: code
annotations: []
slots: {}
- $$mdtype: Node
errors: []
lines:
- 3
- 4
inline: true
attributes:
content: ': Accounts receivable/payable'
children: []
type: text
annotations: []
slots: {}
type: inline
annotations: []
slots: {}
type: item
annotations: []
slots: {}
- $$mdtype: Node
errors: []
lines:
- 4
- 5
inline: false
attributes: {}
children:
- $$mdtype: Node
errors: []
lines:
- 4
- 5
inline: false
attributes: {}
children:
- $$mdtype: Node
errors: []
lines:
- 4
- 5
inline: true
attributes:
content: COMPLIANCE
children: []
type: code
annotations: []
slots: {}
- $$mdtype: Node
errors: []
lines:
- 4
- 5
inline: true
attributes:
content: ': Compliance officer'
children: []
type: text
annotations: []
slots: {}
type: inline
annotations: []
slots: {}
type: item
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: ADMIN
children: []
type: code
annotations: []
slots: {}
- $$mdtype: Node
errors: []
lines:
- 5
- 6
inline: true
attributes:
content: ': System administrator'
children:
# --- truncated at 32 KB (74 KB total) ---
# Full source: https://raw.githubusercontent.com/api-evangelist/mvmnt/refs/heads/main/openapi/mvmnt-users-api-openapi.yml