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-locations-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 Locations 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: Locations
description: Location management operations
paths:
/locations/filter:
post:
tags:
- Locations
summary: Filter locations
description: 'Query locations using flexible filter criteria with AND/OR logic.
By default, only non-deleted locations are returned (deletedAt: { isNull: true }).
Override this by explicitly setting deletedAt filter criteria.
'
operationId: filterLocations
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/LocationFilterRequest'
responses:
'200':
description: Filtered locations with pagination
content:
application/json:
schema:
type: object
required:
- data
- pageInfo
properties:
data:
type: array
items:
$ref: '#/components/schemas/Location'
pageInfo:
$ref: '#/components/schemas/PaginationInfo'
'400':
$ref: '#/components/responses/BadRequestError'
'401':
$ref: '#/components/responses/UnauthorizedError'
'500':
$ref: '#/components/responses/InternalServerError'
/locations:
post:
tags:
- Locations
summary: Create a new location
description: 'Create a new location for a customer.
Locations represent pickup or delivery points (warehouses, distribution centers, etc.).
'
operationId: createLocation
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/LocationInput'
examples:
warehouse:
summary: Warehouse location
value:
customerId: 550e8400-e29b-41d4-a716-446655440000
name: ABC Warehouse - Dallas
key: ERP-LOC-DALLAS-01
type: SHIPPER
isAppointmentRequired: true
notes: Call 24 hours ahead for appointment
distribution_center:
summary: Distribution center
value:
customerId: 550e8400-e29b-41d4-a716-446655440000
name: XYZ Distribution Center
type: BOTH
isAppointmentRequired: false
responses:
'201':
description: Location created successfully
content:
application/json:
schema:
$ref: '#/components/schemas/Location'
'400':
$ref: '#/components/responses/BadRequestError'
'401':
$ref: '#/components/responses/UnauthorizedError'
'409':
$ref: '#/components/responses/ConflictError'
'500':
$ref: '#/components/responses/InternalServerError'
/locations/{id}:
get:
tags:
- Locations
summary: Get a location by ID
description: 'Retrieve a single location by its unique identifier.
'
operationId: getLocationById
parameters:
- $ref: '#/components/parameters/IdOrClientKey'
responses:
'200':
description: Location found
content:
application/json:
schema:
$ref: '#/components/schemas/Location'
'400':
$ref: '#/components/responses/BadRequestError'
'401':
$ref: '#/components/responses/UnauthorizedError'
'404':
$ref: '#/components/responses/NotFoundError'
'500':
$ref: '#/components/responses/InternalServerError'
patch:
tags:
- Locations
summary: Update a location
description: 'Partially update a location. 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
'
operationId: updateLocation
parameters:
- $ref: '#/components/parameters/IdOrClientKey'
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/LocationPatch'
examples:
updateNotes:
summary: Update notes
value:
notes: Updated appointment requirements
updateType:
summary: Update location type
value:
type: BOTH
responses:
'200':
description: Location updated successfully
content:
application/json:
schema:
$ref: '#/components/schemas/Location'
'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:
- Locations
summary: Delete a location
description: 'Soft delete a location (sets deletedAt timestamp).
The location will no longer appear in default queries but can be retrieved
by explicitly filtering for deleted records.
'
operationId: deleteLocation
parameters:
- $ref: '#/components/parameters/IdOrClientKey'
responses:
'204':
description: Location deleted successfully
'400':
$ref: '#/components/responses/BadRequestError'
'401':
$ref: '#/components/responses/UnauthorizedError'
'404':
$ref: '#/components/responses/NotFoundError'
'500':
$ref: '#/components/responses/InternalServerError'
/locations/search:
post:
summary: Search locations
description: 'Search locations using OpenSearch-powered full-text and field-specific search.
This endpoint provides fast, indexed search across location data with support for:
- Full-text search across multiple fields
- Field-specific filtering with various operators
- Geographic search capabilities
- Sorting and pagination
- Saved search preferences
**Note:** Only active (non-deleted) locations 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 location objects with all relationships
'
operationId: searchLocations
tags:
- Locations
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/LocationSearchRequest'
responses:
'200':
description: Successful search results
content:
application/json:
schema:
$ref: '#/components/schemas/LocationSearchResponse'
'400':
$ref: '#/components/responses/BadRequestError'
'401':
$ref: '#/components/responses/UnauthorizedError'
'422':
$ref: '#/components/responses/ValidationError'
'429':
$ref: '#/components/responses/RateLimitExceeded'
components:
schemas:
CustomerStatus:
type: string
enum:
- NEW
- CONTACTED
- QUALIFIED
- QUOTED
- NURTURING
- PENDING
- ACTIVE
- INACTIVE
- BLOCKED
- CLOSED
description: 'Customer account status (includes lead stages):
- `NEW`: New lead, not yet contacted
- `CONTACTED`: Initial contact made with lead
- `QUALIFIED`: Lead has been qualified as potential customer
- `QUOTED`: Quote has been provided to lead
- `NURTURING`: Lead being nurtured for future opportunity
- `PENDING`: Customer prospect pending activation
- `ACTIVE`: Active customer account
- `INACTIVE`: Deactivated customer account
- `BLOCKED`: Customer account blocked from operations
- `CLOSED`: Customer account permanently closed
'
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: 'Customer account status (includes lead stages):'
children: []
type: text
annotations: []
slots: {}
type: inline
annotations: []
slots: {}
type: paragraph
annotations: []
slots: {}
- $$mdtype: Node
errors: []
lines:
- 1
- 11
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: NEW
children: []
type: code
annotations: []
slots: {}
- $$mdtype: Node
errors: []
lines:
- 1
- 2
inline: true
attributes:
content: ': New lead, not yet contacted'
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: CONTACTED
children: []
type: code
annotations: []
slots: {}
- $$mdtype: Node
errors: []
lines:
- 2
- 3
inline: true
attributes:
content: ': Initial contact made with lead'
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: QUALIFIED
children: []
type: code
annotations: []
slots: {}
- $$mdtype: Node
errors: []
lines:
- 3
- 4
inline: true
attributes:
content: ': Lead has been qualified as potential customer'
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: QUOTED
children: []
type: code
annotations: []
slots: {}
- $$mdtype: Node
errors: []
lines:
- 4
- 5
inline: true
attributes:
content: ': Quote has been provided to lead'
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: NURTURING
children: []
type: code
annotations: []
slots: {}
- $$mdtype: Node
errors: []
lines:
- 5
- 6
inline: true
attributes:
content: ': Lead being nurtured for future opportunity'
children: []
type: text
annotations: []
slots: {}
type: inline
annotations: []
slots: {}
type: item
annotations: []
slots: {}
- $$mdtype: Node
errors: []
lines:
- 6
- 7
inline: false
attributes: {}
children:
- $$mdtype: Node
errors: []
lines:
- 6
- 7
inline: false
attributes: {}
children:
- $$mdtype: Node
errors: []
lines:
- 6
- 7
inline: true
attributes:
content: PENDING
children: []
type: code
annotations: []
slots: {}
- $$mdtype: Node
errors: []
lines:
- 6
- 7
inline: true
attributes:
content: ': Customer prospect pending activation'
children: []
type: text
annotations: []
slots: {}
type: inline
annotations: []
slots: {}
type: item
annotations: []
slots: {}
- $$mdtype: Node
errors: []
lines:
- 7
- 8
inline: false
attributes: {}
children:
- $$mdtype: Node
errors: []
lines:
- 7
- 8
inline: false
attributes: {}
children:
- $$mdtype: Node
errors: []
lines:
- 7
- 8
inline: true
attributes:
content: ACTIVE
children: []
type: code
annotations: []
slots: {}
- $$mdtype: Node
errors: []
lines:
- 7
- 8
inline: true
attributes:
content: ': Active customer account'
children: []
type: text
annotations: []
slots: {}
type: inline
annotations: []
slots: {}
type: item
annotations: []
slots: {}
- $$mdtype: Node
errors: []
lines:
- 8
- 9
inline: false
attributes: {}
children:
- $$mdtype: Node
errors: []
lines:
- 8
- 9
inline: false
attributes: {}
children:
- $$mdtype: Node
errors: []
lines:
- 8
- 9
inline: true
attributes:
content: INACTIVE
children: []
type: code
annotations: []
slots: {}
- $$mdtype: Node
errors: []
lines:
- 8
- 9
inline: true
attributes:
content: ': Deactivated customer account'
children: []
type: text
annotations: []
slots: {}
type: inline
annotations: []
slots: {}
type: item
annotations: []
slots: {}
- $$mdtype: Node
errors: []
lines:
- 9
- 10
inline: false
attributes: {}
children:
- $$mdtype: Node
errors: []
lines:
- 9
- 10
inline: false
attributes: {}
children:
- $$mdtype: Node
errors: []
lines:
- 9
- 10
inline: true
attributes:
content: BLOCKED
children: []
type: code
annotations: []
slots: {}
- $$mdtype: Node
errors: []
lines:
- 9
- 10
inline: true
attributes:
content: ': Customer account blocked from operations'
children: []
type: text
annotations: []
slots: {}
type: inline
annotations: []
slots: {}
type: item
annotations: []
slots: {}
- $$mdtype: Node
errors: []
lines:
- 10
- 11
inline: false
attributes: {}
children:
- $$mdtype: Node
errors: []
lines:
- 10
- 11
inline: false
attributes: {}
children:
- $$mdtype: Node
errors: []
lines:
- 10
- 11
inline: true
attributes:
content: CLOSED
children: []
type: code
annotations: []
slots: {}
- $$mdtype: Node
errors: []
lines:
- 10
- 11
inline: true
attributes:
content: ': Customer account permanently closed'
children: []
type: text
annotations: []
slots: {}
type: inline
annotations: []
slots: {}
type: item
annotations: []
slots: {}
type: list
annotations: []
slots: {}
PaymentTermReference:
type: object
description: 'Enhanced reference to a payment term resource (returned in responses).
Includes full payment term details in addition to id/key.
'
required:
- id
- name
- createdAt
- updatedAt
properties:
id:
type: string
format: uuid
description: Payment term UUID
example: 550e8400-e29b-41d4-a716-446655440000
key:
type:
- string
- 'null'
maxLength: 512
description: Client-defined reference ID if set
example: ERP-PAYTERM-NET30
name:
type: string
description: Payment term name
example: Net 30
description:
type:
- string
- 'null'
description: Payment term description or notes
example: Payment due 30 days from invoice date
days:
type:
- integer
- 'null'
description: Number of days until payment is due
example: 30
quickPayFee:
type:
- number
- 'null'
format: float
description: Quick pay fee percentage (e.g., 0.05 for 5%)
example: 0.05
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: Quick pay fee percentage (e.g., 0.05 for 5%)
children: []
type: text
annotations: []
slots: {}
type: inline
annotations: []
slots: {}
type: paragraph
annotations: []
slots: {}
apOnly:
type:
- boolean
- 'null'
description: Whether this payment term is for accounts payable only
example: false
doNotUse:
type:
- boolean
- 'null'
description: Flag to prevent using this payment term for new transactions
example: false
createdAt:
type: string
format: date-time
description: When the payment term was created
example: '2025-01-15T10:00:00Z'
updatedAt:
type: string
format: date-time
description: When the payment term was last updated
example: '2025-01-15T14:30:00Z'
deletedAt:
type:
- string
- 'null'
format: date-time
description: When the payment term was soft deleted (null if active)
example: null
LocationContactReference:
type: object
description: 'Location contact reference for embedding in Location responses.
Identical to LocationContact but excludes the location and locationId fields to avoid circular references.
'
required:
- id
- customerContactId
- isPrimary
- createdAt
- updatedAt
properties:
object:
type: string
enum:
- LOCATION_CONTACT
readOnly: true
description: Object type identifier
example: LOCATION_CONTACT
id:
type: string
format: uuid
readOnly: true
description: Unique location contact identifier
example: 880e8400-e29b-41d4-a716-446655440000
customerContactId:
type: string
format: uuid
description: Customer contact linked to this location
example: 660e8400-e29b-41d4-a716-446655440000
customerContact:
$ref: '#/components/schemas/CustomerContact'
readOnly: true
description: The customer contact details
isPrimary:
type: boolean
description: Whether this is the primary contact for the location
example: true
contactTypes:
type: array
items:
$ref: '#/components/schemas/LocationContactType'
description: Roles/types for this location contact
example:
- LOCATION_MANAGER
- SHIPPING
key:
type:
- string
- 'null'
maxLength: 512
description: Client-defined reference identifier for this location contact
example: ERP-LOC-CONTACT-001
createdAt:
type: string
format: date-time
readOnly: true
description: Timestamp when location contact was created
example: '2025-01-15T10:00:00Z'
updatedAt:
type: string
format: date-time
readOnly: true
description: Timestamp when location contact was last updated
example: '2025-01-15T14:30:00Z'
deletedAt:
type:
- string
- 'null'
format: date-time
readOnly: true
description: Timestamp when location contact was soft-deleted (null if active)
example: null
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:
# --- truncated at 32 KB (101 KB total) ---
# Full source: https://raw.githubusercontent.com/api-evangelist/mvmnt/refs/heads/main/openapi/mvmnt-locations-api-openapi.yml