---
title: "Filter customers"
method: POST
path: "/customers/filter"
tags: ["Customers"]
---

# Filter customers

`POST /customers/filter`

Filter customers using comprehensive query criteria with AND/OR logic and multiple operators.
Supports complex filtering similar to GraphQL capabilities.
Note: Soft-deleted customers are excluded by default (deletedAt defaults to { isNull: true }).

## Request body

- CustomerFilterRequest — Request body for filtering customers
  - `filter` CustomerFilter — Filter criteria for customers with AND/OR logic support
    - `and` CustomerFilter[] — All conditions must match (recursive)
    - `or` CustomerFilter[] — At least one condition must match (recursive)
    - `not` CustomerFilter — recursive
    - `id` IDFilter — Filter options for ID fields (limited operations - exact match only)
      - `equalTo` string, uuid — Exact match
      - `in` string[] — Matches any UUID in the array
    - `name` StringFilter — Filter options for string fields
      - `equalTo` string — Exact match
      - `notEqualTo` string — Not equal to
      - `in` string[] — Matches any value in the array
      - `notIn` string[] — Does not match any value in the array
      - `includes` string — Contains substring (case-insensitive)
      - `notIncludes` string — Does not contain substring (case-insensitive)
      - `startsWith` string — Starts with prefix (case-insensitive)
      - `notStartsWith` string — Does not start with prefix (case-insensitive)
      - `endsWith` string — Ends with suffix (case-insensitive)
      - `notEndsWith` string — Does not end with suffix (case-insensitive)
      - `isNull` boolean — Field is null (true) or not null (false)
    - `friendlyId` StringFilter — Filter options for string fields
      - `equalTo` string — Exact match
      - `notEqualTo` string — Not equal to
      - `in` string[] — Matches any value in the array
      - `notIn` string[] — Does not match any value in the array
      - `includes` string — Contains substring (case-insensitive)
      - `notIncludes` string — Does not contain substring (case-insensitive)
      - `startsWith` string — Starts with prefix (case-insensitive)
      - `notStartsWith` string — Does not start with prefix (case-insensitive)
      - `endsWith` string — Ends with suffix (case-insensitive)
      - `notEndsWith` string — Does not end with suffix (case-insensitive)
      - `isNull` boolean — Field is null (true) or not null (false)
    - `status` CustomerStatusFilter — Filter options for CustomerStatus enum
      - `equalTo` 'NEW' | 'CONTACTED' | 'QUALIFIED' | 'QUOTED' | 'NURTURING' | 'PENDING' | 'ACTIVE' | 'INACTIVE' | 'BLOCKED' | 'CLOSED' — 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
      - `notEqualTo` 'NEW' | 'CONTACTED' | 'QUALIFIED' | 'QUOTED' | 'NURTURING' | 'PENDING' | 'ACTIVE' | 'INACTIVE' | 'BLOCKED' | 'CLOSED' — 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
      - `in` CustomerStatus[] — Matches any value in the array
      - `notIn` CustomerStatus[] — Does not match any value in the array
      - `isNull` boolean — Field is null (true) or not null (false)
    - `serviceTier` CustomerServiceTierFilter — Filter options for CustomerServiceTier enum
      - `equalTo` 'TIER_1' | 'TIER_2' | 'TIER_3' — Service tier level for the customer
      - `notEqualTo` 'TIER_1' | 'TIER_2' | 'TIER_3' — Service tier level for the customer
      - `in` CustomerServiceTier[] — Matches any value in the array
      - `notIn` CustomerServiceTier[] — Does not match any value in the array
      - `isNull` boolean — Field is null (true) or not null (false)
    - `website` StringFilter — Filter options for string fields
      - `equalTo` string — Exact match
      - `notEqualTo` string — Not equal to
      - `in` string[] — Matches any value in the array
      - `notIn` string[] — Does not match any value in the array
      - `includes` string — Contains substring (case-insensitive)
      - `notIncludes` string — Does not contain substring (case-insensitive)
      - `startsWith` string — Starts with prefix (case-insensitive)
      - `notStartsWith` string — Does not start with prefix (case-insensitive)
      - `endsWith` string — Ends with suffix (case-insensitive)
      - `notEndsWith` string — Does not end with suffix (case-insensitive)
      - `isNull` boolean — Field is null (true) or not null (false)
    - `phoneNumber` StringFilter — Filter options for string fields
      - `equalTo` string — Exact match
      - `notEqualTo` string — Not equal to
      - `in` string[] — Matches any value in the array
      - `notIn` string[] — Does not match any value in the array
      - `includes` string — Contains substring (case-insensitive)
      - `notIncludes` string — Does not contain substring (case-insensitive)
      - `startsWith` string — Starts with prefix (case-insensitive)
      - `notStartsWith` string — Does not start with prefix (case-insensitive)
      - `endsWith` string — Ends with suffix (case-insensitive)
      - `notEndsWith` string — Does not end with suffix (case-insensitive)
      - `isNull` boolean — Field is null (true) or not null (false)
    - `industry` CustomerIndustryFilter — Filter options for CustomerIndustry enum
      - `equalTo` 'AGRICULTURE_FORESTRY' | 'CONSTRUCTION' | 'CONSUMER_GOODS' | 'EDUCATIONAL_SERVICES' | 'ENTERTAINMENT' | 'FOOD_SERVICES' | 'HEALTHCARE' | 'INDUSTRIAL_MACHINERY' | 'MANUFACTURING' | 'MINING' | 'RETAIL_TRADE' | 'TRANSPORTATION_WAREHOUSING' | 'UTILITIES' | 'WHOLESALE_TRADE' — Industry classification for the customer
      - `notEqualTo` 'AGRICULTURE_FORESTRY' | 'CONSTRUCTION' | 'CONSUMER_GOODS' | 'EDUCATIONAL_SERVICES' | 'ENTERTAINMENT' | 'FOOD_SERVICES' | 'HEALTHCARE' | 'INDUSTRIAL_MACHINERY' | 'MANUFACTURING' | 'MINING' | 'RETAIL_TRADE' | 'TRANSPORTATION_WAREHOUSING' | 'UTILITIES' | 'WHOLESALE_TRADE' — Industry classification for the customer
      - `in` CustomerIndustry[] — Matches any value in the array
      - `notIn` CustomerIndustry[] — Does not match any value in the array
      - `isNull` boolean — Field is null (true) or not null (false)
    - `annualRevenue` CustomerAnnualRevenueFilter — Filter options for CustomerAnnualRevenue enum
      - `equalTo` '_0_TO_500K' | '_500K_TO_3M' | '_3M_TO_10M' | '_10M_TO_25M' | '_25M_TO_50M' | '_50M_TO_100M' | '_100M_TO_500M' | '_500M_PLUS' — Annual revenue range
      - `notEqualTo` '_0_TO_500K' | '_500K_TO_3M' | '_3M_TO_10M' | '_10M_TO_25M' | '_25M_TO_50M' | '_50M_TO_100M' | '_100M_TO_500M' | '_500M_PLUS' — Annual revenue range
      - `in` CustomerAnnualRevenue[] — Matches any value in the array
      - `notIn` CustomerAnnualRevenue[] — Does not match any value in the array
      - `isNull` boolean — Field is null (true) or not null (false)
    - `annualSpend` CustomerAnnualSpendFilter — Filter options for CustomerAnnualSpend enum
      - `equalTo` '_0_TO_25K' | '_25_TO_150K' | '_150K_TO_300K' | '_300K_TO_1M' | '_1_TO_5M' | '_5M_TO_25M' | '_25M_TO_75M' | '_75M_PLUS' — Annual freight spend estimate range
      - `notEqualTo` '_0_TO_25K' | '_25_TO_150K' | '_150K_TO_300K' | '_300K_TO_1M' | '_1_TO_5M' | '_5M_TO_25M' | '_25M_TO_75M' | '_75M_PLUS' — Annual freight spend estimate range
      - `in` CustomerAnnualSpend[] — Matches any value in the array
      - `notIn` CustomerAnnualSpend[] — Does not match any value in the array
      - `isNull` boolean — Field is null (true) or not null (false)
    - `spendType` CustomerSpendTypeFilter — Filter options for CustomerSpendType enum
      - `equalTo` 'CONTRACT' | 'SPOT' — Customer spend type: - `CONTRACT`: Customer operates under contract pricing - `SPOT`: Customer operates on spot market pricing
      - `notEqualTo` 'CONTRACT' | 'SPOT' — Customer spend type: - `CONTRACT`: Customer operates under contract pricing - `SPOT`: Customer operates on spot market pricing
      - `in` CustomerSpendType[] — Matches any value in the array
      - `notIn` CustomerSpendType[] — Does not match any value in the array
      - `isNull` boolean — Field is null (true) or not null (false)
    - `naics` StringFilter — Filter options for string fields
      - `equalTo` string — Exact match
      - `notEqualTo` string — Not equal to
      - `in` string[] — Matches any value in the array
      - `notIn` string[] — Does not match any value in the array
      - `includes` string — Contains substring (case-insensitive)
      - `notIncludes` string — Does not contain substring (case-insensitive)
      - `startsWith` string — Starts with prefix (case-insensitive)
      - `notStartsWith` string — Does not start with prefix (case-insensitive)
      - `endsWith` string — Ends with suffix (case-insensitive)
      - `notEndsWith` string — Does not end with suffix (case-insensitive)
      - `isNull` boolean — Field is null (true) or not null (false)
    - `ein` StringFilter — Filter options for string fields
      - `equalTo` string — Exact match
      - `notEqualTo` string — Not equal to
      - `in` string[] — Matches any value in the array
      - `notIn` string[] — Does not match any value in the array
      - `includes` string — Contains substring (case-insensitive)
      - `notIncludes` string — Does not contain substring (case-insensitive)
      - `startsWith` string — Starts with prefix (case-insensitive)
      - `notStartsWith` string — Does not start with prefix (case-insensitive)
      - `endsWith` string — Ends with suffix (case-insensitive)
      - `notEndsWith` string — Does not end with suffix (case-insensitive)
      - `isNull` boolean — Field is null (true) or not null (false)
    - `duns` StringFilter — Filter options for string fields
      - `equalTo` string — Exact match
      - `notEqualTo` string — Not equal to
      - `in` string[] — Matches any value in the array
      - `notIn` string[] — Does not match any value in the array
      - `includes` string — Contains substring (case-insensitive)
      - `notIncludes` string — Does not contain substring (case-insensitive)
      - `startsWith` string — Starts with prefix (case-insensitive)
      - `notStartsWith` string — Does not start with prefix (case-insensitive)
      - `endsWith` string — Ends with suffix (case-insensitive)
      - `notEndsWith` string — Does not end with suffix (case-insensitive)
      - `isNull` boolean — Field is null (true) or not null (false)
    - `leadSource` StringFilter — Filter options for string fields
      - `equalTo` string — Exact match
      - `notEqualTo` string — Not equal to
      - `in` string[] — Matches any value in the array
      - `notIn` string[] — Does not match any value in the array
      - `includes` string — Contains substring (case-insensitive)
      - `notIncludes` string — Does not contain substring (case-insensitive)
      - `startsWith` string — Starts with prefix (case-insensitive)
      - `notStartsWith` string — Does not start with prefix (case-insensitive)
      - `endsWith` string — Ends with suffix (case-insensitive)
      - `notEndsWith` string — Does not end with suffix (case-insensitive)
      - `isNull` boolean — Field is null (true) or not null (false)
    - `deactivationReason` CustomerDeactivationReasonFilter — Filter options for CustomerDeactivationReason enum
      - `equalTo` 'NOT_PAYING_INVOICE' | 'ACQUIRED' | 'DUPLICATE' | 'NOT_IN_BUSINESS' | 'OTHER' — Reason for customer deactivation: - `NOT_PAYING_INVOICE`: Customer is not paying invoices - `ACQUIRED`: Customer was acquired by another company - `DUPLICATE`: Duplicate customer record - `NOT_IN_BUSINESS`: Customer is no longer in business - `OTHER`: Other reason (see deactivationNotes for details)
      - `notEqualTo` 'NOT_PAYING_INVOICE' | 'ACQUIRED' | 'DUPLICATE' | 'NOT_IN_BUSINESS' | 'OTHER' — Reason for customer deactivation: - `NOT_PAYING_INVOICE`: Customer is not paying invoices - `ACQUIRED`: Customer was acquired by another company - `DUPLICATE`: Duplicate customer record - `NOT_IN_BUSINESS`: Customer is no longer in business - `OTHER`: Other reason (see deactivationNotes for details)
      - `in` CustomerDeactivationReason[] — Matches any value in the array
      - `notIn` CustomerDeactivationReason[] — Does not match any value in the array
      - `isNull` boolean — Field is null (true) or not null (false)
    - `numberOfEmployees` CustomerNumberOfEmployeesFilter — Filter options for CustomerNumberOfEmployees enum
      - `equalTo` '_0_TO_1' | '_2_TO_5' | '_6_TO_9' | '_10_TO_24' | '_25_TO_99' | '_100_TO_249' | '_250_TO_499' | '_500_OR_MORE' — Number of employees in the company
      - `notEqualTo` '_0_TO_1' | '_2_TO_5' | '_6_TO_9' | '_10_TO_24' | '_25_TO_99' | '_100_TO_249' | '_250_TO_499' | '_500_OR_MORE' — Number of employees in the company
      - `in` CustomerNumberOfEmployees[] — Matches any value in the array
      - `notIn` CustomerNumberOfEmployees[] — Does not match any value in the array
      - `isNull` boolean — Field is null (true) or not null (false)
    - `currency` CustomerCurrencyFilter — Filter options for CustomerCurrency enum
      - `equalTo` 'USD' | 'CAD' | 'MXN' | 'EUR' | 'GBP' | 'JPY' | 'CNY' | 'AUD' | 'BRL' | 'INR' | 'KRW' | 'RUB' | 'SAR' | 'TRY' | 'IDR' | 'ARS' | 'ZAR' — Preferred currency for transactions
      - `notEqualTo` 'USD' | 'CAD' | 'MXN' | 'EUR' | 'GBP' | 'JPY' | 'CNY' | 'AUD' | 'BRL' | 'INR' | 'KRW' | 'RUB' | 'SAR' | 'TRY' | 'IDR' | 'ARS' | 'ZAR' — Preferred currency for transactions
      - `in` CustomerCurrency[] — Matches any value in the array
      - `notIn` CustomerCurrency[] — Does not match any value in the array
      - `isNull` boolean — Field is null (true) or not null (false)
    - `defaultMode` CustomerTransportationModeFilter — Filter options for CustomerTransportationMode enum
      - `equalTo` 'FTL' | 'LTL' | 'AIR' | 'OCEAN' | 'RAIL' | 'INTERMODAL' | 'DRAYAGE' | 'EXPEDITED_GROUND' | 'EXPEDITED_AIR' | 'AUTO' | 'PTL' | 'RLTL' — Transportation mode type
      - `notEqualTo` 'FTL' | 'LTL' | 'AIR' | 'OCEAN' | 'RAIL' | 'INTERMODAL' | 'DRAYAGE' | 'EXPEDITED_GROUND' | 'EXPEDITED_AIR' | 'AUTO' | 'PTL' | 'RLTL' — Transportation mode type
      - `in` CustomerTransportationMode[] — Matches any value in the array
      - `notIn` CustomerTransportationMode[] — Does not match any value in the array
      - `isNull` boolean — Field is null (true) or not null (false)
    - `key` ClientKeyFilter — Filter options for client key fields (limited operations - exact match only)
      - `equalTo` string — Exact match
      - `in` string[] — Matches any value in the array
      - `isNull` boolean — Field is null (true) or not null (false)
    - `createdAt` DatetimeFilter — Filter options for datetime fields
      - `equalTo` string, date-time — Exact match
      - `notEqualTo` string, date-time — Not equal to
      - `lessThan` string, date-time — Before this datetime
      - `lessThanOrEqualTo` string, date-time — On or before this datetime
      - `greaterThan` string, date-time — After this datetime
      - `greaterThanOrEqualTo` string, date-time — On or after this datetime
      - `isNull` boolean — Field is null (true) or not null (false)
    - `updatedAt` DatetimeFilter — Filter options for datetime fields
      - `equalTo` string, date-time — Exact match
      - `notEqualTo` string, date-time — Not equal to
      - `lessThan` string, date-time — Before this datetime
      - `lessThanOrEqualTo` string, date-time — On or before this datetime
      - `greaterThan` string, date-time — After this datetime
      - `greaterThanOrEqualTo` string, date-time — On or after this datetime
      - `isNull` boolean — Field is null (true) or not null (false)
    - `deletedAt` DatetimeFilter — Filter options for datetime fields
      - `equalTo` string, date-time — Exact match
      - `notEqualTo` string, date-time — Not equal to
      - `lessThan` string, date-time — Before this datetime
      - `lessThanOrEqualTo` string, date-time — On or before this datetime
      - `greaterThan` string, date-time — After this datetime
      - `greaterThanOrEqualTo` string, date-time — On or after this datetime
      - `isNull` boolean — Field is null (true) or not null (false)
    - `closedAt` DatetimeFilter — Filter options for datetime fields
      - `equalTo` string, date-time — Exact match
      - `notEqualTo` string, date-time — Not equal to
      - `lessThan` string, date-time — Before this datetime
      - `lessThanOrEqualTo` string, date-time — On or before this datetime
      - `greaterThan` string, date-time — After this datetime
      - `greaterThanOrEqualTo` string, date-time — On or after this datetime
      - `isNull` boolean — Field is null (true) or not null (false)
    - `deactivationDate` DatetimeFilter — Filter options for datetime fields
      - `equalTo` string, date-time — Exact match
      - `notEqualTo` string, date-time — Not equal to
      - `lessThan` string, date-time — Before this datetime
      - `lessThanOrEqualTo` string, date-time — On or before this datetime
      - `greaterThan` string, date-time — After this datetime
      - `greaterThanOrEqualTo` string, date-time — On or after this datetime
      - `isNull` boolean — Field is null (true) or not null (false)
  - `pageSize` integer — Number of results per page
  - `cursor` string — Pagination cursor for next page

## Response `200`

Successful response

- object
  - `data` Customer[]
    - `object` 'CUSTOMER' — Object type identifier
    - `id` string, uuid, required — Unique customer identifier
    - `name` string, required — Customer company name
    - `friendlyId` string, required — Human-readable customer identifier, starts with "A"
    - `status` 'NEW' | 'CONTACTED' | 'QUALIFIED' | 'QUOTED' | 'NURTURING' | 'PENDING' | 'ACTIVE' | 'INACTIVE' | 'BLOCKED' | 'CLOSED', required — 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
    - `serviceTier` 'TIER_1' | 'TIER_2' | 'TIER_3' — Service tier level for the customer
    - `website` string, nullable — Customer website URL
    - `phoneNumber` string, nullable — Primary phone number
    - `industry` 'AGRICULTURE_FORESTRY' | 'CONSTRUCTION' | 'CONSUMER_GOODS' | 'EDUCATIONAL_SERVICES' | 'ENTERTAINMENT' | 'FOOD_SERVICES' | 'HEALTHCARE' | 'INDUSTRIAL_MACHINERY' | 'MANUFACTURING' | 'MINING' | 'RETAIL_TRADE' | 'TRANSPORTATION_WAREHOUSING' | 'UTILITIES' | 'WHOLESALE_TRADE' — Industry classification for the customer
    - `annualRevenue` '_0_TO_500K' | '_500K_TO_3M' | '_3M_TO_10M' | '_10M_TO_25M' | '_25M_TO_50M' | '_50M_TO_100M' | '_100M_TO_500M' | '_500M_PLUS' — Annual revenue range
    - `annualSpend` '_0_TO_25K' | '_25_TO_150K' | '_150K_TO_300K' | '_300K_TO_1M' | '_1_TO_5M' | '_5M_TO_25M' | '_25M_TO_75M' | '_75M_PLUS' — Annual freight spend estimate range
    - `spendType` 'CONTRACT' | 'SPOT' — Customer spend type: - `CONTRACT`: Customer operates under contract pricing - `SPOT`: Customer operates on spot market pricing
    - `naics` string, nullable — NAICS industry code
    - `ein` string, nullable — Employer Identification Number
    - `duns` string, nullable — Dun & Bradstreet number
    - `leadSource` string, nullable — How this customer was acquired
    - `dbaName` string, nullable — Doing business as name
    - `numberOfEmployees` '_0_TO_1' | '_2_TO_5' | '_6_TO_9' | '_10_TO_24' | '_25_TO_99' | '_100_TO_249' | '_250_TO_499' | '_500_OR_MORE' — Number of employees in the company
    - `externalId` string, nullable — External system identifier
    - `currency` 'USD' | 'CAD' | 'MXN' | 'EUR' | 'GBP' | 'JPY' | 'CNY' | 'AUD' | 'BRL' | 'INR' | 'KRW' | 'RUB' | 'SAR' | 'TRY' | 'IDR' | 'ARS' | 'ZAR' — Preferred currency for transactions
    - `creditLimit` number, float, nullable — Maximum credit allowed
    - `creditUsageWarning` number, float, nullable — Credit usage warning threshold
    - `freeCreditReq` number, float, nullable — Free credit requirement
    - `defaultMode` 'FTL' | 'LTL' | 'AIR' | 'OCEAN' | 'RAIL' | 'INTERMODAL' | 'DRAYAGE' | 'EXPEDITED_GROUND' | 'EXPEDITED_AIR' | 'AUTO' | 'PTL' | 'RLTL' — Transportation mode type
    - `defaultMargin` number, float, nullable — Default margin percentage (0-1, e.g., 0.15 for 15%)
    - `minMargin` number, float, nullable — Minimum margin threshold
    - `maxMargin` number, float, nullable — Maximum margin threshold
    - `defaultInternalNotes` string, nullable — Default internal notes template
    - `defaultCarrierNotes` string, nullable — Default carrier-facing notes template used when note splitting is enabled
    - `defaultExternalNotes` string, nullable — Default external notes template
    - `defaultShowNotes` 'ALL' | 'SPLIT' — Controls whether external notes are shown on all documents or split from carrier-facing notes. - `ALL`: Use external notes on customer-facing and carrier-facing documents - `SPLIT`: Use external notes on customer-facing documents and carrier notes on carrier-facing documents
    - `autoAcceptTender` boolean, nullable — Auto-accept tender flag
    - `group` ResourceReference — Reference to another resource (returned in responses)
      - `id` string, uuid, required — Resource UUID
      - `key` string, nullable — Client-defined reference ID if set
    - `paymentTerm` PaymentTermReference — Enhanced reference to a payment term resource (returned in responses). Includes full payment term details in addition to id/key.
      - `id` string, uuid, required — Payment term UUID
      - `key` string, nullable — Client-defined reference ID if set
      - `name` string, required — Payment term name
      - `description` string, nullable — Payment term description or notes
      - `days` integer, nullable — Number of days until payment is due
      - `quickPayFee` number, float, nullable — Quick pay fee percentage (e.g., 0.05 for 5%)
      - `apOnly` boolean, nullable — Whether this payment term is for accounts payable only
      - `doNotUse` boolean, nullable — Flag to prevent using this payment term for new transactions
      - `createdAt` string, date-time, required — When the payment term was created
      - `updatedAt` string, date-time, required — When the payment term was last updated
      - `deletedAt` string, date-time, nullable — When the payment term was soft deleted (null if active)
    - `notes` string, nullable — Internal notes about this customer
    - `deactivationReason` 'NOT_PAYING_INVOICE' | 'ACQUIRED' | 'DUPLICATE' | 'NOT_IN_BUSINESS' | 'OTHER' — Reason for customer deactivation: - `NOT_PAYING_INVOICE`: Customer is not paying invoices - `ACQUIRED`: Customer was acquired by another company - `DUPLICATE`: Duplicate customer record - `NOT_IN_BUSINESS`: Customer is no longer in business - `OTHER`: Other reason (see deactivationNotes for details)
    - `deactivationNotes` string, nullable — Additional details about deactivation
    - `deactivationDate` string, date-time, nullable — When the customer was deactivated
    - `closedAt` string, date-time, nullable — When the customer account was closed
    - `closedBy` UserReference — 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.
      - `id` string, uuid, required — User UUID
      - `key` string, nullable — Client-defined reference ID if set
      - `email` string, email, required — User's email address
      - `name` string, nullable — User's full name
      - `phone` string, nullable — User's phone number
      - `phoneExt` string, nullable — Phone extension
      - `status` 'PENDING' | 'ACTIVE' | 'INACTIVE', required — User account status
      - `avatarId` string, uuid, nullable — Profile avatar document ID
      - `createdAt` string, date-time, required — When the user was created
      - `updatedAt` string, date-time, required — When the user was last updated
      - `deletedAt` string, date-time, nullable — When the user was soft deleted (null if active)
    - `closedNotes` string, nullable — Notes about account closure
    - `corporateAddress` Address — Physical address/location details (nested, without id). This is an embedded object representing a Location record. The id is managed internally and not exposed in the API.
      - `line1` string, required — Primary street address line
      - `line2` string, nullable — Secondary address line (suite, floor, etc.)
      - `city` string, required — City name
      - `state` string, nullable — State or province code
      - `zipCode` string, nullable — Postal / ZIP code
      - `country` string, required — Country name or code
      - `market` string, required — Market or region identifier
      - `latitude` string, nullable — Latitude coordinate
      - `longitude` string, nullable — Longitude coordinate
      - `isAirportOrAirbase` boolean, required — Whether this location is an airport or airbase
      - `isConstructionOrUtilitySite` boolean, required — Whether this location is a construction or utility site
      - `isSmartyValidated` boolean, required — Whether address has been validated by SmartyStreets
      - `obeysDst` boolean, required — Whether this location observes daylight saving time
      - `cityId` string, uuid, nullable — Reference to standardized city record (internal use)
    - `billingAddress` Address — Physical address/location details (nested, without id). This is an embedded object representing a Location record. The id is managed internally and not exposed in the API.
      - `line1` string, required — Primary street address line
      - `line2` string, nullable — Secondary address line (suite, floor, etc.)
      - `city` string, required — City name
      - `state` string, nullable — State or province code
      - `zipCode` string, nullable — Postal / ZIP code
      - `country` string, required — Country name or code
      - `market` string, required — Market or region identifier
      - `latitude` string, nullable — Latitude coordinate
      - `longitude` string, nullable — Longitude coordinate
      - `isAirportOrAirbase` boolean, required — Whether this location is an airport or airbase
      - `isConstructionOrUtilitySite` boolean, required — Whether this location is a construction or utility site
      - `isSmartyValidated` boolean, required — Whether address has been validated by SmartyStreets
      - `obeysDst` boolean, required — Whether this location observes daylight saving time
      - `cityId` string, uuid, nullable — Reference to standardized city record (internal use)
    - `qboCustomerId` string, nullable — QuickBooks Online customer ID
    - `key` string, nullable — Client-defined reference identifier for this customer
    - `contacts` CustomerContactReference[] — Contacts for this customer
      - `object` 'CUSTOMER_CONTACT' — Object type identifier
      - `id` string, uuid, required — Unique contact identifier
      - `key` string, nullable — Client-defined reference identifier
      - `name` string, required — Contact person's name
      - `contactInfo` ContactInfo, required — 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.
        - `name` string, required — Contact person's full name
        - `email` string, email, nullable — Email address
        - `phoneNumber` string, nullable — Phone number
        - `title` string, nullable — Job title or position
      - `phoneExtension` string, nullable — Phone extension specific to this contact role
      - `isPrimary` boolean, required — Whether this is the primary contact
      - `contactTypes` CustomerContactType[], nullable — Types/roles this contact serves
      - `notifications` CustomerContactNotificationType[], nullable — Shipment notification types
      - `invitedUser` UserReference — 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.
        - `id` string, uuid, required — User UUID
        - `key` string, nullable — Client-defined reference ID if set
        - `email` string, email, required — User's email address
        - `name` string, nullable — User's full name
        - `phone` string, nullable — User's phone number
        - `phoneExt` string, nullable — Phone extension
        - `status` 'PENDING' | 'ACTIVE' | 'INACTIVE', required — User account status
        - `avatarId` string, uuid, nullable — Profile avatar document ID
        - `createdAt` string, date-time, required — When the user was created
        - `updatedAt` string, date-time, required — When the user was last updated
        - `deletedAt` string, date-time, nullable — When the user was soft deleted (null if active)
      - `deletedBy` UserReference — 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.
        - `id` string, uuid, required — User UUID
        - `key` string, nullable — Client-defined reference ID if set
        - `email` string, email, required — User's email address
        - `name` string, nullable — User's full name
        - `phone` string, nullable — User's phone number
        - `phoneExt` string, nullable — Phone extension
        - `status` 'PENDING' | 'ACTIVE' | 'INACTIVE', required — User account status
        - `avatarId` string, uuid, nullable — Profile avatar document ID
        - `createdAt` string, date-time, required — When the user was created
        - `updatedAt` string, date-time, required — When the user was last updated
        - `deletedAt` string, date-time, nullable — When the user was soft deleted (null if active)
      - `createdAt` string, date-time, required — When the contact was created
      - `deletedAt` string, date-time, nullable — When the contact was soft deleted
    - `createdAt` string, date-time, required — Timestamp when customer was created
    - `updatedAt` string, date-time, required — Timestamp when customer was last updated
    - `deletedAt` string, date-time, nullable — Timestamp when customer was soft-deleted (null if active)
    - `deletedBy` UserReference — 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.
      - `id` string, uuid, required — User UUID
      - `key` string, nullable — Client-defined reference ID if set
      - `email` string, email, required — User's email address
      - `name` string, nullable — User's full name
      - `phone` string, nullable — User's phone number
      - `phoneExt` string, nullable — Phone extension
      - `status` 'PENDING' | 'ACTIVE' | 'INACTIVE', required — User account status
      - `avatarId` string, uuid, nullable — Profile avatar document ID
      - `createdAt` string, date-time, required — When the user was created
      - `updatedAt` string, date-time, required — When the user was last updated
      - `deletedAt` string, date-time, nullable — When the user was soft deleted (null if active)
  - `pagination` PaginationInfo
    - `pageSize` integer, required — Number of items per page
    - `hasNextPage` boolean, required — Whether there are more pages
    - `hasPreviousPage` boolean — Whether there are previous pages
    - `endCursor` string, nullable — Cursor for the next page (null if no next page)

## Other responses

- `400` — Bad request - invalid input
- `401` — Unauthorized - invalid or missing access token
- `422` — Validation error - invalid field values
- `429` — Rate limit exceeded

---

[API](https://skmtc.dev/mvmnt/apis/mvmnt-api.md) · [All operations](https://skmtc.dev/mvmnt/apis/mvmnt-api/llms.txt) · [OpenAPI document](https://skmtc-service-production.skmtc.workers.dev/v1/apis/mvmnt/mvmnt-api/revisions/7af4e91459ca/schema)
