---
title: "Search customers"
method: POST
path: "/customers/search"
tags: ["Customers"]
---

# Search customers

`POST /customers/search`

Search customers using OpenSearch-powered full-text and field-specific search.

This endpoint provides fast, indexed search across customer 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) customers 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 customer objects with all relationships

## Request body

- CustomerSearchRequest — Request body for searching customers
  - `criteria` CustomerSearchCriteria — Search criteria for filtering customers. Note: Only active (non-deleted) customers are searchable. Soft-deleted records are automatically excluded.
    - `id` UUIDSearchCriteria — Search criteria for UUID fields
      - `operator` 'EQUALS' | 'NOT_EQUALS' | 'ONE_OF' | 'NOT_ONE_OF' | 'EXISTS' | 'DOES_NOT_EXIST', required — Search operator: - `EQUALS`: Exact match - `NOT_EQUALS`: Not equal to - `ONE_OF`: Matches any UUID in array - `NOT_ONE_OF`: Does not match any UUID in array - `EXISTS`: Field has a value (not null) - `DOES_NOT_EXIST`: Field is null
      - `values` string[] — Array of UUIDs for ONE_OF or NOT_ONE_OF operators
    - `friendlyId` KeywordSearchCriteria — Search criteria for keyword fields (exact match, no partial matching)
      - `operator` 'EQUALS' | 'NOT_EQUALS' | 'ONE_OF' | 'NOT_ONE_OF' | 'EXISTS' | 'DOES_NOT_EXIST', required — 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` string[] — Array of values for ONE_OF or NOT_ONE_OF operators
    - `name` TextSearchCriteria — Search criteria for text fields (supports wildcards and partial matching)
      - `operator` 'EQUALS' | 'NOT_EQUALS' | 'STARTS_WITH' | 'ENDS_WITH' | 'INCLUDES' | 'ONE_OF' | 'NOT_ONE_OF' | 'EXISTS' | 'DOES_NOT_EXIST', required — Search operator: - `EQUALS`: Exact match - `NOT_EQUALS`: Not equal to - `STARTS_WITH`: Begins with prefix - `ENDS_WITH`: Ends with suffix - `INCLUDES`: Contains substring - `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` string[] — Array of values for ONE_OF or NOT_ONE_OF operators
    - `dbaName` TextSearchCriteria — Search criteria for text fields (supports wildcards and partial matching)
      - `operator` 'EQUALS' | 'NOT_EQUALS' | 'STARTS_WITH' | 'ENDS_WITH' | 'INCLUDES' | 'ONE_OF' | 'NOT_ONE_OF' | 'EXISTS' | 'DOES_NOT_EXIST', required — Search operator: - `EQUALS`: Exact match - `NOT_EQUALS`: Not equal to - `STARTS_WITH`: Begins with prefix - `ENDS_WITH`: Ends with suffix - `INCLUDES`: Contains substring - `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` string[] — Array of values for ONE_OF or NOT_ONE_OF operators
    - `status` KeywordSearchCriteria — Search criteria for keyword fields (exact match, no partial matching)
      - `operator` 'EQUALS' | 'NOT_EQUALS' | 'ONE_OF' | 'NOT_ONE_OF' | 'EXISTS' | 'DOES_NOT_EXIST', required — 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` string[] — Array of values for ONE_OF or NOT_ONE_OF operators
    - `city` TextSearchCriteria — Search criteria for text fields (supports wildcards and partial matching)
      - `operator` 'EQUALS' | 'NOT_EQUALS' | 'STARTS_WITH' | 'ENDS_WITH' | 'INCLUDES' | 'ONE_OF' | 'NOT_ONE_OF' | 'EXISTS' | 'DOES_NOT_EXIST', required — Search operator: - `EQUALS`: Exact match - `NOT_EQUALS`: Not equal to - `STARTS_WITH`: Begins with prefix - `ENDS_WITH`: Ends with suffix - `INCLUDES`: Contains substring - `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` string[] — Array of values for ONE_OF or NOT_ONE_OF operators
    - `state` KeywordSearchCriteria — Search criteria for keyword fields (exact match, no partial matching)
      - `operator` 'EQUALS' | 'NOT_EQUALS' | 'ONE_OF' | 'NOT_ONE_OF' | 'EXISTS' | 'DOES_NOT_EXIST', required — 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` string[] — Array of values for ONE_OF or NOT_ONE_OF operators
    - `location` TextSearchCriteria — Search criteria for text fields (supports wildcards and partial matching)
      - `operator` 'EQUALS' | 'NOT_EQUALS' | 'STARTS_WITH' | 'ENDS_WITH' | 'INCLUDES' | 'ONE_OF' | 'NOT_ONE_OF' | 'EXISTS' | 'DOES_NOT_EXIST', required — Search operator: - `EQUALS`: Exact match - `NOT_EQUALS`: Not equal to - `STARTS_WITH`: Begins with prefix - `ENDS_WITH`: Ends with suffix - `INCLUDES`: Contains substring - `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` string[] — Array of values for ONE_OF or NOT_ONE_OF operators
    - `zip` KeywordSearchCriteria — Search criteria for keyword fields (exact match, no partial matching)
      - `operator` 'EQUALS' | 'NOT_EQUALS' | 'ONE_OF' | 'NOT_ONE_OF' | 'EXISTS' | 'DOES_NOT_EXIST', required — 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` string[] — Array of values for ONE_OF or NOT_ONE_OF operators
    - `country` KeywordSearchCriteria — Search criteria for keyword fields (exact match, no partial matching)
      - `operator` 'EQUALS' | 'NOT_EQUALS' | 'ONE_OF' | 'NOT_ONE_OF' | 'EXISTS' | 'DOES_NOT_EXIST', required — 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` string[] — Array of values for ONE_OF or NOT_ONE_OF operators
    - `teamId` UUIDSearchCriteria — Search criteria for UUID fields
      - `operator` 'EQUALS' | 'NOT_EQUALS' | 'ONE_OF' | 'NOT_ONE_OF' | 'EXISTS' | 'DOES_NOT_EXIST', required — Search operator: - `EQUALS`: Exact match - `NOT_EQUALS`: Not equal to - `ONE_OF`: Matches any UUID in array - `NOT_ONE_OF`: Does not match any UUID in array - `EXISTS`: Field has a value (not null) - `DOES_NOT_EXIST`: Field is null
      - `values` string[] — Array of UUIDs for ONE_OF or NOT_ONE_OF operators
    - `teamName` TextSearchCriteria — Search criteria for text fields (supports wildcards and partial matching)
      - `operator` 'EQUALS' | 'NOT_EQUALS' | 'STARTS_WITH' | 'ENDS_WITH' | 'INCLUDES' | 'ONE_OF' | 'NOT_ONE_OF' | 'EXISTS' | 'DOES_NOT_EXIST', required — Search operator: - `EQUALS`: Exact match - `NOT_EQUALS`: Not equal to - `STARTS_WITH`: Begins with prefix - `ENDS_WITH`: Ends with suffix - `INCLUDES`: Contains substring - `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` string[] — Array of values for ONE_OF or NOT_ONE_OF operators
    - `userIds` UUIDSearchCriteria — Search criteria for UUID fields
      - `operator` 'EQUALS' | 'NOT_EQUALS' | 'ONE_OF' | 'NOT_ONE_OF' | 'EXISTS' | 'DOES_NOT_EXIST', required — Search operator: - `EQUALS`: Exact match - `NOT_EQUALS`: Not equal to - `ONE_OF`: Matches any UUID in array - `NOT_ONE_OF`: Does not match any UUID in array - `EXISTS`: Field has a value (not null) - `DOES_NOT_EXIST`: Field is null
      - `values` string[] — Array of UUIDs for ONE_OF or NOT_ONE_OF operators
    - `userNames` TextSearchCriteria — Search criteria for text fields (supports wildcards and partial matching)
      - `operator` 'EQUALS' | 'NOT_EQUALS' | 'STARTS_WITH' | 'ENDS_WITH' | 'INCLUDES' | 'ONE_OF' | 'NOT_ONE_OF' | 'EXISTS' | 'DOES_NOT_EXIST', required — Search operator: - `EQUALS`: Exact match - `NOT_EQUALS`: Not equal to - `STARTS_WITH`: Begins with prefix - `ENDS_WITH`: Ends with suffix - `INCLUDES`: Contains substring - `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` string[] — Array of values for ONE_OF or NOT_ONE_OF operators
    - `accountOwnerId` UUIDSearchCriteria — Search criteria for UUID fields
      - `operator` 'EQUALS' | 'NOT_EQUALS' | 'ONE_OF' | 'NOT_ONE_OF' | 'EXISTS' | 'DOES_NOT_EXIST', required — Search operator: - `EQUALS`: Exact match - `NOT_EQUALS`: Not equal to - `ONE_OF`: Matches any UUID in array - `NOT_ONE_OF`: Does not match any UUID in array - `EXISTS`: Field has a value (not null) - `DOES_NOT_EXIST`: Field is null
      - `values` string[] — Array of UUIDs for ONE_OF or NOT_ONE_OF operators
    - `accountOwnerName` TextSearchCriteria — Search criteria for text fields (supports wildcards and partial matching)
      - `operator` 'EQUALS' | 'NOT_EQUALS' | 'STARTS_WITH' | 'ENDS_WITH' | 'INCLUDES' | 'ONE_OF' | 'NOT_ONE_OF' | 'EXISTS' | 'DOES_NOT_EXIST', required — Search operator: - `EQUALS`: Exact match - `NOT_EQUALS`: Not equal to - `STARTS_WITH`: Begins with prefix - `ENDS_WITH`: Ends with suffix - `INCLUDES`: Contains substring - `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` string[] — Array of values for ONE_OF or NOT_ONE_OF operators
    - `operatedById` UUIDSearchCriteria — Search criteria for UUID fields
      - `operator` 'EQUALS' | 'NOT_EQUALS' | 'ONE_OF' | 'NOT_ONE_OF' | 'EXISTS' | 'DOES_NOT_EXIST', required — Search operator: - `EQUALS`: Exact match - `NOT_EQUALS`: Not equal to - `ONE_OF`: Matches any UUID in array - `NOT_ONE_OF`: Does not match any UUID in array - `EXISTS`: Field has a value (not null) - `DOES_NOT_EXIST`: Field is null
      - `values` string[] — Array of UUIDs for ONE_OF or NOT_ONE_OF operators
    - `operatedByName` TextSearchCriteria — Search criteria for text fields (supports wildcards and partial matching)
      - `operator` 'EQUALS' | 'NOT_EQUALS' | 'STARTS_WITH' | 'ENDS_WITH' | 'INCLUDES' | 'ONE_OF' | 'NOT_ONE_OF' | 'EXISTS' | 'DOES_NOT_EXIST', required — Search operator: - `EQUALS`: Exact match - `NOT_EQUALS`: Not equal to - `STARTS_WITH`: Begins with prefix - `ENDS_WITH`: Ends with suffix - `INCLUDES`: Contains substring - `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` string[] — Array of values for ONE_OF or NOT_ONE_OF operators
    - `primaryContactName` TextSearchCriteria — Search criteria for text fields (supports wildcards and partial matching)
      - `operator` 'EQUALS' | 'NOT_EQUALS' | 'STARTS_WITH' | 'ENDS_WITH' | 'INCLUDES' | 'ONE_OF' | 'NOT_ONE_OF' | 'EXISTS' | 'DOES_NOT_EXIST', required — Search operator: - `EQUALS`: Exact match - `NOT_EQUALS`: Not equal to - `STARTS_WITH`: Begins with prefix - `ENDS_WITH`: Ends with suffix - `INCLUDES`: Contains substring - `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` string[] — Array of values for ONE_OF or NOT_ONE_OF operators
    - `primaryContactEmail` TextSearchCriteria — Search criteria for text fields (supports wildcards and partial matching)
      - `operator` 'EQUALS' | 'NOT_EQUALS' | 'STARTS_WITH' | 'ENDS_WITH' | 'INCLUDES' | 'ONE_OF' | 'NOT_ONE_OF' | 'EXISTS' | 'DOES_NOT_EXIST', required — Search operator: - `EQUALS`: Exact match - `NOT_EQUALS`: Not equal to - `STARTS_WITH`: Begins with prefix - `ENDS_WITH`: Ends with suffix - `INCLUDES`: Contains substring - `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` string[] — Array of values for ONE_OF or NOT_ONE_OF operators
    - `primaryContactPhone` TextSearchCriteria — Search criteria for text fields (supports wildcards and partial matching)
      - `operator` 'EQUALS' | 'NOT_EQUALS' | 'STARTS_WITH' | 'ENDS_WITH' | 'INCLUDES' | 'ONE_OF' | 'NOT_ONE_OF' | 'EXISTS' | 'DOES_NOT_EXIST', required — Search operator: - `EQUALS`: Exact match - `NOT_EQUALS`: Not equal to - `STARTS_WITH`: Begins with prefix - `ENDS_WITH`: Ends with suffix - `INCLUDES`: Contains substring - `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` string[] — Array of values for ONE_OF or NOT_ONE_OF operators
    - `serviceTier` KeywordSearchCriteria — Search criteria for keyword fields (exact match, no partial matching)
      - `operator` 'EQUALS' | 'NOT_EQUALS' | 'ONE_OF' | 'NOT_ONE_OF' | 'EXISTS' | 'DOES_NOT_EXIST', required — 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` string[] — Array of values for ONE_OF or NOT_ONE_OF operators
    - `yearsInBusiness` KeywordSearchCriteria — Search criteria for keyword fields (exact match, no partial matching)
      - `operator` 'EQUALS' | 'NOT_EQUALS' | 'ONE_OF' | 'NOT_ONE_OF' | 'EXISTS' | 'DOES_NOT_EXIST', required — 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` string[] — Array of values for ONE_OF or NOT_ONE_OF operators
    - `numberOfEmployees` KeywordSearchCriteria — Search criteria for keyword fields (exact match, no partial matching)
      - `operator` 'EQUALS' | 'NOT_EQUALS' | 'ONE_OF' | 'NOT_ONE_OF' | 'EXISTS' | 'DOES_NOT_EXIST', required — 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` string[] — Array of values for ONE_OF or NOT_ONE_OF operators
    - `industry` KeywordSearchCriteria — Search criteria for keyword fields (exact match, no partial matching)
      - `operator` 'EQUALS' | 'NOT_EQUALS' | 'ONE_OF' | 'NOT_ONE_OF' | 'EXISTS' | 'DOES_NOT_EXIST', required — 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` string[] — Array of values for ONE_OF or NOT_ONE_OF operators
    - `sic` KeywordSearchCriteria — Search criteria for keyword fields (exact match, no partial matching)
      - `operator` 'EQUALS' | 'NOT_EQUALS' | 'ONE_OF' | 'NOT_ONE_OF' | 'EXISTS' | 'DOES_NOT_EXIST', required — 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` string[] — Array of values for ONE_OF or NOT_ONE_OF operators
    - `naics` KeywordSearchCriteria — Search criteria for keyword fields (exact match, no partial matching)
      - `operator` 'EQUALS' | 'NOT_EQUALS' | 'ONE_OF' | 'NOT_ONE_OF' | 'EXISTS' | 'DOES_NOT_EXIST', required — 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` string[] — Array of values for ONE_OF or NOT_ONE_OF operators
    - `paymentTermName` KeywordSearchCriteria — Search criteria for keyword fields (exact match, no partial matching)
      - `operator` 'EQUALS' | 'NOT_EQUALS' | 'ONE_OF' | 'NOT_ONE_OF' | 'EXISTS' | 'DOES_NOT_EXIST', required — 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` string[] — Array of values for ONE_OF or NOT_ONE_OF operators
    - `creditLimit` FloatSearchCriteria — Search criteria for float/decimal fields
      - `operator` 'EQUALS' | 'NOT_EQUALS' | 'GREATER_THAN' | 'LESS_THAN' | 'BETWEEN' | 'NOT_BETWEEN' | 'EXISTS' | 'DOES_NOT_EXIST', required — Search operator: - `EQUALS`: Exact match - `NOT_EQUALS`: Not equal to - `GREATER_THAN`: Greater than value - `LESS_THAN`: Less than value - `BETWEEN`: Between min and max (inclusive) - `NOT_BETWEEN`: Not between min and max - `EXISTS`: Field has a value (not null) - `DOES_NOT_EXIST`: Field is null
      - `value` number, float — Single value for EQUALS, NOT_EQUALS, GREATER_THAN, LESS_THAN
      - `min` number, float — Minimum value for BETWEEN or NOT_BETWEEN
      - `max` number, float — Maximum value for BETWEEN or NOT_BETWEEN
    - `outstandingBalance` FloatSearchCriteria — Search criteria for float/decimal fields
      - `operator` 'EQUALS' | 'NOT_EQUALS' | 'GREATER_THAN' | 'LESS_THAN' | 'BETWEEN' | 'NOT_BETWEEN' | 'EXISTS' | 'DOES_NOT_EXIST', required — Search operator: - `EQUALS`: Exact match - `NOT_EQUALS`: Not equal to - `GREATER_THAN`: Greater than value - `LESS_THAN`: Less than value - `BETWEEN`: Between min and max (inclusive) - `NOT_BETWEEN`: Not between min and max - `EXISTS`: Field has a value (not null) - `DOES_NOT_EXIST`: Field is null
      - `value` number, float — Single value for EQUALS, NOT_EQUALS, GREATER_THAN, LESS_THAN
      - `min` number, float — Minimum value for BETWEEN or NOT_BETWEEN
      - `max` number, float — Maximum value for BETWEEN or NOT_BETWEEN
    - `totalRevenue` FloatSearchCriteria — Search criteria for float/decimal fields
      - `operator` 'EQUALS' | 'NOT_EQUALS' | 'GREATER_THAN' | 'LESS_THAN' | 'BETWEEN' | 'NOT_BETWEEN' | 'EXISTS' | 'DOES_NOT_EXIST', required — Search operator: - `EQUALS`: Exact match - `NOT_EQUALS`: Not equal to - `GREATER_THAN`: Greater than value - `LESS_THAN`: Less than value - `BETWEEN`: Between min and max (inclusive) - `NOT_BETWEEN`: Not between min and max - `EXISTS`: Field has a value (not null) - `DOES_NOT_EXIST`: Field is null
      - `value` number, float — Single value for EQUALS, NOT_EQUALS, GREATER_THAN, LESS_THAN
      - `min` number, float — Minimum value for BETWEEN or NOT_BETWEEN
      - `max` number, float — Maximum value for BETWEEN or NOT_BETWEEN
    - `totalTransportationCost` FloatSearchCriteria — Search criteria for float/decimal fields
      - `operator` 'EQUALS' | 'NOT_EQUALS' | 'GREATER_THAN' | 'LESS_THAN' | 'BETWEEN' | 'NOT_BETWEEN' | 'EXISTS' | 'DOES_NOT_EXIST', required — Search operator: - `EQUALS`: Exact match - `NOT_EQUALS`: Not equal to - `GREATER_THAN`: Greater than value - `LESS_THAN`: Less than value - `BETWEEN`: Between min and max (inclusive) - `NOT_BETWEEN`: Not between min and max - `EXISTS`: Field has a value (not null) - `DOES_NOT_EXIST`: Field is null
      - `value` number, float — Single value for EQUALS, NOT_EQUALS, GREATER_THAN, LESS_THAN
      - `min` number, float — Minimum value for BETWEEN or NOT_BETWEEN
      - `max` number, float — Maximum value for BETWEEN or NOT_BETWEEN
    - `totalGrossProfit` FloatSearchCriteria — Search criteria for float/decimal fields
      - `operator` 'EQUALS' | 'NOT_EQUALS' | 'GREATER_THAN' | 'LESS_THAN' | 'BETWEEN' | 'NOT_BETWEEN' | 'EXISTS' | 'DOES_NOT_EXIST', required — Search operator: - `EQUALS`: Exact match - `NOT_EQUALS`: Not equal to - `GREATER_THAN`: Greater than value - `LESS_THAN`: Less than value - `BETWEEN`: Between min and max (inclusive) - `NOT_BETWEEN`: Not between min and max - `EXISTS`: Field has a value (not null) - `DOES_NOT_EXIST`: Field is null
      - `value` number, float — Single value for EQUALS, NOT_EQUALS, GREATER_THAN, LESS_THAN
      - `min` number, float — Minimum value for BETWEEN or NOT_BETWEEN
      - `max` number, float — Maximum value for BETWEEN or NOT_BETWEEN
    - `ordersCount` IntSearchCriteria — Search criteria for integer fields
      - `operator` 'EQUALS' | 'NOT_EQUALS' | 'GREATER_THAN' | 'LESS_THAN' | 'BETWEEN' | 'NOT_BETWEEN' | 'EXISTS' | 'DOES_NOT_EXIST', required — Search operator: - `EQUALS`: Exact match - `NOT_EQUALS`: Not equal to - `GREATER_THAN`: Greater than value - `LESS_THAN`: Less than value - `BETWEEN`: Between min and max (inclusive) - `NOT_BETWEEN`: Not between min and max - `EXISTS`: Field has a value (not null) - `DOES_NOT_EXIST`: Field is null
      - `value` integer — Single value for EQUALS, NOT_EQUALS, GREATER_THAN, LESS_THAN
      - `min` integer — Minimum value for BETWEEN or NOT_BETWEEN
      - `max` integer — Maximum value for BETWEEN or NOT_BETWEEN
    - `quotesCount` IntSearchCriteria — Search criteria for integer fields
      - `operator` 'EQUALS' | 'NOT_EQUALS' | 'GREATER_THAN' | 'LESS_THAN' | 'BETWEEN' | 'NOT_BETWEEN' | 'EXISTS' | 'DOES_NOT_EXIST', required — Search operator: - `EQUALS`: Exact match - `NOT_EQUALS`: Not equal to - `GREATER_THAN`: Greater than value - `LESS_THAN`: Less than value - `BETWEEN`: Between min and max (inclusive) - `NOT_BETWEEN`: Not between min and max - `EXISTS`: Field has a value (not null) - `DOES_NOT_EXIST`: Field is null
      - `value` integer — Single value for EQUALS, NOT_EQUALS, GREATER_THAN, LESS_THAN
      - `min` integer — Minimum value for BETWEEN or NOT_BETWEEN
      - `max` integer — Maximum value for BETWEEN or NOT_BETWEEN
    - `quotesWon` IntSearchCriteria — Search criteria for integer fields
      - `operator` 'EQUALS' | 'NOT_EQUALS' | 'GREATER_THAN' | 'LESS_THAN' | 'BETWEEN' | 'NOT_BETWEEN' | 'EXISTS' | 'DOES_NOT_EXIST', required — Search operator: - `EQUALS`: Exact match - `NOT_EQUALS`: Not equal to - `GREATER_THAN`: Greater than value - `LESS_THAN`: Less than value - `BETWEEN`: Between min and max (inclusive) - `NOT_BETWEEN`: Not between min and max - `EXISTS`: Field has a value (not null) - `DOES_NOT_EXIST`: Field is null
      - `value` integer — Single value for EQUALS, NOT_EQUALS, GREATER_THAN, LESS_THAN
      - `min` integer — Minimum value for BETWEEN or NOT_BETWEEN
      - `max` integer — Maximum value for BETWEEN or NOT_BETWEEN
    - `quoteWinRate` FloatSearchCriteria — Search criteria for float/decimal fields
      - `operator` 'EQUALS' | 'NOT_EQUALS' | 'GREATER_THAN' | 'LESS_THAN' | 'BETWEEN' | 'NOT_BETWEEN' | 'EXISTS' | 'DOES_NOT_EXIST', required — Search operator: - `EQUALS`: Exact match - `NOT_EQUALS`: Not equal to - `GREATER_THAN`: Greater than value - `LESS_THAN`: Less than value - `BETWEEN`: Between min and max (inclusive) - `NOT_BETWEEN`: Not between min and max - `EXISTS`: Field has a value (not null) - `DOES_NOT_EXIST`: Field is null
      - `value` number, float — Single value for EQUALS, NOT_EQUALS, GREATER_THAN, LESS_THAN
      - `min` number, float — Minimum value for BETWEEN or NOT_BETWEEN
      - `max` number, float — Maximum value for BETWEEN or NOT_BETWEEN
    - `mostRecentOrderCreationAt` DatetimeSearchCriteria — Search criteria for datetime fields. Supports both absolute datetime values and relative time expressions.
      - `operator` 'EQUALS' | 'NOT_EQUALS' | 'BEFORE' | 'AFTER' | 'BETWEEN' | 'NOT_BETWEEN' | 'EXISTS' | 'DOES_NOT_EXIST', required — Search operator: - `EQUALS`: Exact match - `NOT_EQUALS`: Not equal to - `BEFORE`: Before datetime - `AFTER`: After datetime - `BETWEEN`: Between min and max (inclusive) - `NOT_BETWEEN`: Not between min and max - `EXISTS`: Field has a value (not null) - `DOES_NOT_EXIST`: Field is null
      - `value` string, date-time — Absolute datetime for EQUALS, NOT_EQUALS
      - `min` string, date-time — Minimum datetime for BETWEEN or NOT_BETWEEN
      - `max` string, date-time — Maximum datetime for BETWEEN or NOT_BETWEEN
      - `valueRelative` integer — Relative time from now (negative for past, positive for future). Example: -7 with WEEK unit means 7 weeks ago.
      - `valueRelativeUnit` 'YEAR' | 'MONTH' | 'WEEK' | 'DAY' | 'HOUR' | 'MINUTE' | 'SECOND' — Time unit for relative time calculations: - `YEAR`: Years - `MONTH`: Months - `WEEK`: Weeks - `DAY`: Days - `HOUR`: Hours - `MINUTE`: Minutes - `SECOND`: Seconds
      - `minRelative` integer — Relative time for min boundary
      - `minRelativeUnit` 'YEAR' | 'MONTH' | 'WEEK' | 'DAY' | 'HOUR' | 'MINUTE' | 'SECOND' — Time unit for relative time calculations: - `YEAR`: Years - `MONTH`: Months - `WEEK`: Weeks - `DAY`: Days - `HOUR`: Hours - `MINUTE`: Minutes - `SECOND`: Seconds
      - `maxRelative` integer — Relative time for max boundary
      - `maxRelativeUnit` 'YEAR' | 'MONTH' | 'WEEK' | 'DAY' | 'HOUR' | 'MINUTE' | 'SECOND' — Time unit for relative time calculations: - `YEAR`: Years - `MONTH`: Months - `WEEK`: Weeks - `DAY`: Days - `HOUR`: Hours - `MINUTE`: Minutes - `SECOND`: Seconds
    - `nextFollowUp` DateSearchCriteria — Search criteria for date fields (no time component). Supports both absolute date values and relative time expressions.
      - `operator` 'EQUALS' | 'NOT_EQUALS' | 'BEFORE' | 'AFTER' | 'BETWEEN' | 'NOT_BETWEEN' | 'EXISTS' | 'DOES_NOT_EXIST', required — Search operator (same as DatetimeSearchCriteria)
      - `value` string, date — Absolute date for EQUALS, NOT_EQUALS
      - `min` string, date — Minimum date for BETWEEN or NOT_BETWEEN
      - `max` string, date — Maximum date for BETWEEN or NOT_BETWEEN
      - `valueRelative` integer — Relative time from now
      - `valueRelativeUnit` 'YEAR' | 'MONTH' | 'WEEK' | 'DAY' | 'HOUR' | 'MINUTE' | 'SECOND' — Time unit for relative time calculations: - `YEAR`: Years - `MONTH`: Months - `WEEK`: Weeks - `DAY`: Days - `HOUR`: Hours - `MINUTE`: Minutes - `SECOND`: Seconds
      - `minRelative` integer
      - `minRelativeUnit` 'YEAR' | 'MONTH' | 'WEEK' | 'DAY' | 'HOUR' | 'MINUTE' | 'SECOND' — Time unit for relative time calculations: - `YEAR`: Years - `MONTH`: Months - `WEEK`: Weeks - `DAY`: Days - `HOUR`: Hours - `MINUTE`: Minutes - `SECOND`: Seconds
      - `maxRelative` integer
      - `maxRelativeUnit` 'YEAR' | 'MONTH' | 'WEEK' | 'DAY' | 'HOUR' | 'MINUTE' | 'SECOND' — Time unit for relative time calculations: - `YEAR`: Years - `MONTH`: Months - `WEEK`: Weeks - `DAY`: Days - `HOUR`: Hours - `MINUTE`: Minutes - `SECOND`: Seconds
    - `lastOutreach` DatetimeSearchCriteria — Search criteria for datetime fields. Supports both absolute datetime values and relative time expressions.
      - `operator` 'EQUALS' | 'NOT_EQUALS' | 'BEFORE' | 'AFTER' | 'BETWEEN' | 'NOT_BETWEEN' | 'EXISTS' | 'DOES_NOT_EXIST', required — Search operator: - `EQUALS`: Exact match - `NOT_EQUALS`: Not equal to - `BEFORE`: Before datetime - `AFTER`: After datetime - `BETWEEN`: Between min and max (inclusive) - `NOT_BETWEEN`: Not between min and max - `EXISTS`: Field has a value (not null) - `DOES_NOT_EXIST`: Field is null
      - `value` string, date-time — Absolute datetime for EQUALS, NOT_EQUALS
      - `min` string, date-time — Minimum datetime for BETWEEN or NOT_BETWEEN
      - `max` string, date-time — Maximum datetime for BETWEEN or NOT_BETWEEN
      - `valueRelative` integer — Relative time from now (negative for past, positive for future). Example: -7 with WEEK unit means 7 weeks ago.
      - `valueRelativeUnit` 'YEAR' | 'MONTH' | 'WEEK' | 'DAY' | 'HOUR' | 'MINUTE' | 'SECOND' — Time unit for relative time calculations: - `YEAR`: Years - `MONTH`: Months - `WEEK`: Weeks - `DAY`: Days - `HOUR`: Hours - `MINUTE`: Minutes - `SECOND`: Seconds
      - `minRelative` integer — Relative time for min boundary
      - `minRelativeUnit` 'YEAR' | 'MONTH' | 'WEEK' | 'DAY' | 'HOUR' | 'MINUTE' | 'SECOND' — Time unit for relative time calculations: - `YEAR`: Years - `MONTH`: Months - `WEEK`: Weeks - `DAY`: Days - `HOUR`: Hours - `MINUTE`: Minutes - `SECOND`: Seconds
      - `maxRelative` integer — Relative time for max boundary
      - `maxRelativeUnit` 'YEAR' | 'MONTH' | 'WEEK' | 'DAY' | 'HOUR' | 'MINUTE' | 'SECOND' — Time unit for relative time calculations: - `YEAR`: Years - `MONTH`: Months - `WEEK`: Weeks - `DAY`: Days - `HOUR`: Hours - `MINUTE`: Minutes - `SECOND`: Seconds
    - `quickbooksCustomerId` KeywordSearchCriteria — Search criteria for keyword fields (exact match, no partial matching)
      - `operator` 'EQUALS' | 'NOT_EQUALS' | 'ONE_OF' | 'NOT_ONE_OF' | 'EXISTS' | 'DOES_NOT_EXIST', required — 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` string[] — Array of values for ONE_OF or NOT_ONE_OF operators
    - `tags` TextSearchCriteria — Search criteria for text fields (supports wildcards and partial matching)
      - `operator` 'EQUALS' | 'NOT_EQUALS' | 'STARTS_WITH' | 'ENDS_WITH' | 'INCLUDES' | 'ONE_OF' | 'NOT_ONE_OF' | 'EXISTS' | 'DOES_NOT_EXIST', required — Search operator: - `EQUALS`: Exact match - `NOT_EQUALS`: Not equal to - `STARTS_WITH`: Begins with prefix - `ENDS_WITH`: Ends with suffix - `INCLUDES`: Contains substring - `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` string[] — Array of values for ONE_OF or NOT_ONE_OF operators
    - `createdAt` DatetimeSearchCriteria — Search criteria for datetime fields. Supports both absolute datetime values and relative time expressions.
      - `operator` 'EQUALS' | 'NOT_EQUALS' | 'BEFORE' | 'AFTER' | 'BETWEEN' | 'NOT_BETWEEN' | 'EXISTS' | 'DOES_NOT_EXIST', required — Search operator: - `EQUALS`: Exact match - `NOT_EQUALS`: Not equal to - `BEFORE`: Before datetime - `AFTER`: After datetime - `BETWEEN`: Between min and max (inclusive) - `NOT_BETWEEN`: Not between min and max - `EXISTS`: Field has a value (not null) - `DOES_NOT_EXIST`: Field is null
      - `value` string, date-time — Absolute datetime for EQUALS, NOT_EQUALS
      - `min` string, date-time — Minimum datetime for BETWEEN or NOT_BETWEEN
      - `max` string, date-time — Maximum datetime for BETWEEN or NOT_BETWEEN
      - `valueRelative` integer — Relative time from now (negative for past, positive for future). Example: -7 with WEEK unit means 7 weeks ago.
      - `valueRelativeUnit` 'YEAR' | 'MONTH' | 'WEEK' | 'DAY' | 'HOUR' | 'MINUTE' | 'SECOND' — Time unit for relative time calculations: - `YEAR`: Years - `MONTH`: Months - `WEEK`: Weeks - `DAY`: Days - `HOUR`: Hours - `MINUTE`: Minutes - `SECOND`: Seconds
      - `minRelative` integer — Relative time for min boundary
      - `minRelativeUnit` 'YEAR' | 'MONTH' | 'WEEK' | 'DAY' | 'HOUR' | 'MINUTE' | 'SECOND' — Time unit for relative time calculations: - `YEAR`: Years - `MONTH`: Months - `WEEK`: Weeks - `DAY`: Days - `HOUR`: Hours - `MINUTE`: Minutes - `SECOND`: Seconds
      - `maxRelative` integer — Relative time for max boundary
      - `maxRelativeUnit` 'YEAR' | 'MONTH' | 'WEEK' | 'DAY' | 'HOUR' | 'MINUTE' | 'SECOND' — Time unit for relative time calculations: - `YEAR`: Years - `MONTH`: Months - `WEEK`: Weeks - `DAY`: Days - `HOUR`: Hours - `MINUTE`: Minutes - `SECOND`: Seconds
    - `updatedAt` DatetimeSearchCriteria — Search criteria for datetime fields. Supports both absolute datetime values and relative time expressions.
      - `operator` 'EQUALS' | 'NOT_EQUALS' | 'BEFORE' | 'AFTER' | 'BETWEEN' | 'NOT_BETWEEN' | 'EXISTS' | 'DOES_NOT_EXIST', required — Search operator: - `EQUALS`: Exact match - `NOT_EQUALS`: Not equal to - `BEFORE`: Before datetime - `AFTER`: After datetime - `BETWEEN`: Between min and max (inclusive) - `NOT_BETWEEN`: Not between min and max - `EXISTS`: Field has a value (not null) - `DOES_NOT_EXIST`: Field is null
      - `value` string, date-time — Absolute datetime for EQUALS, NOT_EQUALS
      - `min` string, date-time — Minimum datetime for BETWEEN or NOT_BETWEEN
      - `max` string, date-time — Maximum datetime for BETWEEN or NOT_BETWEEN
      - `valueRelative` integer — Relative time from now (negative for past, positive for future). Example: -7 with WEEK unit means 7 weeks ago.
      - `valueRelativeUnit` 'YEAR' | 'MONTH' | 'WEEK' | 'DAY' | 'HOUR' | 'MINUTE' | 'SECOND' — Time unit for relative time calculations: - `YEAR`: Years - `MONTH`: Months - `WEEK`: Weeks - `DAY`: Days - `HOUR`: Hours - `MINUTE`: Minutes - `SECOND`: Seconds
      - `minRelative` integer — Relative time for min boundary
      - `minRelativeUnit` 'YEAR' | 'MONTH' | 'WEEK' | 'DAY' | 'HOUR' | 'MINUTE' | 'SECOND' — Time unit for relative time calculations: - `YEAR`: Years - `MONTH`: Months - `WEEK`: Weeks - `DAY`: Days - `HOUR`: Hours - `MINUTE`: Minutes - `SECOND`: Seconds
      - `maxRelative` integer — Relative time for max boundary
      - `maxRelativeUnit` 'YEAR' | 'MONTH' | 'WEEK' | 'DAY' | 'HOUR' | 'MINUTE' | 'SECOND' — Time unit for relative time calculations: - `YEAR`: Years - `MONTH`: Months - `WEEK`: Weeks - `DAY`: Days - `HOUR`: Hours - `MINUTE`: Minutes - `SECOND`: Seconds
  - `pagination` SearchPaginationInput — Pagination options for search requests
    - `pageNumber` integer — Page number (1-based)
    - `pageSize` integer — Number of results per page (max 250)
  - `sort` SearchSortOption[] — Sort options for the search results
    - `field` string, required — Field name to sort by (must be an indexed field)
    - `order` 'asc' | 'desc', required — Sort direction (ascending or descending)
  - `savedSearch` SavedSearchLookup — Reference to a saved search by ID or client key. Provide either id or key (not both).
    - `id` string, uuid — Saved search UUID
    - `key` string — Client-defined key for the saved search
  - `format` 'flat' | 'full' — Response format: - flat: Returns only indexed fields (default, faster) - full: Returns complete customer objects

## Response `200`

Successful search results

- CustomerSearchResponse — Response for customer search requests. Note: Only active (non-deleted) customers are included in results.
  - `data` union[], required — Search results - either flat rows or full customer objects based on format parameter
    - union
      - CustomerSearchRow — Flattened customer data from search index. Note: This represents only active customers. Soft-deleted records are never returned.
        - `object` 'CUSTOMER_SEARCH_ROW', required — Object type identifier for discriminating between flat and full response formats
        - `id` string, uuid, required
        - `friendlyId` string, required
        - `name` string, required
        - `dbaName` string, nullable
        - `status` 'ACTIVE' | 'INACTIVE' | 'PENDING' | 'SUSPENDED' | 'ARCHIVED', required
        - `city` string, nullable
        - `state` string, nullable — State/Province code (uppercase)
        - `location` string, nullable — Computed as "city, state"
        - `zip` string, nullable
        - `country` string, nullable — Country code (uppercase)
        - `teamId` string, uuid, nullable — Team ID (maps from groupId)
        - `teamName` string, nullable — Team name (maps from groupName)
        - `userIds` string[] — IDs of users associated with this customer
        - `userNames` string[] — Names of users associated with this customer (may be hidden in some contexts)
        - `accountOwnerId` string, uuid, nullable
        - `accountOwnerName` string, nullable
        - `operatedById` string, uuid, nullable
        - `operatedByName` string, nullable
        - `primaryContactName` string, nullable
        - `primaryContactEmail` string, email, nullable
        - `primaryContactPhone` string, nullable
        - `serviceTier` string, nullable
        - `yearsInBusiness` string, nullable
        - `numberOfEmployees` string, nullable
        - `industry` string, nullable
        - `sic` string, nullable — Standard Industrial Classification code
        - `naics` string, nullable — North American Industry Classification System code
        - `paymentTermName` string, nullable
        - `creditLimit` number, float, nullable
        - `outstandingBalance` number, float, nullable
        - `totalRevenue` number, float, nullable
        - `totalTransportationCost` number, float, nullable
        - `totalGrossProfit` number, float, nullable — Computed as totalRevenue - totalTransportationCost
        - `ordersCount` integer, nullable — Number of non-canceled/rejected shipments
        - `quotesCount` integer, nullable
        - `quotesWon` integer, nullable
        - `quoteWinRate` number, float, nullable — Win rate percentage (0-100)
        - `mostRecentOrderCreationAt` string, date-time, nullable
        - `nextFollowUp` string, date, nullable
        - `lastOutreach` string, date-time, nullable
        - `quickbooksCustomerId` string, nullable — QuickBooks Online customer ID (maps from qboCustomerId)
        - `tags` string[] — Tag labels
        - `createdAt` string, date-time, required
        - `updatedAt` string, date-time, required
      - 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' — 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
          - `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
          - `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` SearchPaginationInfo, required — Pagination information for search results
    - `pageNumber` integer, required — Current page number
    - `pageSize` integer, required — Number of results returned on this page
    - `totalPages` integer, required — Total number of pages available
  - `totalResults` integer, required — Total number of matching results (excluding soft-deleted records)

## 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.net/mvmnt/apis/mvmnt-api.md) · [All operations](https://skmtc.net/mvmnt/apis/mvmnt-api/llms.txt) · [OpenAPI document](https://skmtc-service-staging.skmtc.workers.dev/v1/apis/mvmnt/mvmnt-api/versions/c44e5e7a4256/schema)
