---
title: "Filter quotes"
method: POST
path: "/quotes/filter"
tags: ["Quotes"]
---

# Filter quotes

`POST /quotes/filter`

Search for quotes using filter criteria.

## Common Filters

- Active quotes: `{ "filter": { "status": { "in": ["DRAFT", "REQUESTED", "QUOTED"] } } }`
- Won quotes: `{ "filter": { "status": { "equalTo": "WON" } } }`
- By customer: `{ "filter": { "customerId": { "equalTo": "uuid" } } }`
- Expiring soon: `{ "filter": { "expiresAt": { "lessThanOrEqualTo": "2025-01-20T00:00:00Z" } } }`

## Request body

- QuoteFilterRequest
  - `filter` QuoteFilter
    - `id` UUIDFilter — Filter options for UUID fields (all operations)
      - `equalTo` string, uuid — Exact match
      - `notEqualTo` string, uuid — Not equal to
      - `in` string[] — Matches any UUID in the array
      - `notIn` string[] — Does not match any UUID in the array
      - `isNull` boolean — Field is null (true) or not null (false)
    - `status` QuoteStatusFilter
      - `equalTo` 'DRAFT' | 'REQUESTED' | 'QUOTED' | 'RECEIVED_REPLY' | 'SENT_REPLY' | 'RECEIVED_COUNTER' | 'SENT_COUNTER' | 'WON' | 'LOST' | 'PASS' | 'CANCELED' — Current status in the quote lifecycle. Initial states: - `DRAFT`: Quote being drafted - `REQUESTED`: Customer requested a quote (needs pricing) Active states: - `QUOTED`: Price sent to customer - `RECEIVED_REPLY`: Received reply from customer - `SENT_REPLY`: Sent reply to customer - `RECEIVED_COUNTER`: Received counter-offer - `SENT_COUNTER`: Sent counter-offer Final states: - `WON`: Customer accepted the quote - `LOST`: Quote not accepted - `PASS`: Broker declined to quote - `CANCELED`: Quote canceled
      - `notEqualTo` 'DRAFT' | 'REQUESTED' | 'QUOTED' | 'RECEIVED_REPLY' | 'SENT_REPLY' | 'RECEIVED_COUNTER' | 'SENT_COUNTER' | 'WON' | 'LOST' | 'PASS' | 'CANCELED' — Current status in the quote lifecycle. Initial states: - `DRAFT`: Quote being drafted - `REQUESTED`: Customer requested a quote (needs pricing) Active states: - `QUOTED`: Price sent to customer - `RECEIVED_REPLY`: Received reply from customer - `SENT_REPLY`: Sent reply to customer - `RECEIVED_COUNTER`: Received counter-offer - `SENT_COUNTER`: Sent counter-offer Final states: - `WON`: Customer accepted the quote - `LOST`: Quote not accepted - `PASS`: Broker declined to quote - `CANCELED`: Quote canceled
      - `in` QuoteStatus[]
      - `notIn` QuoteStatus[]
    - `side` QuoteSideFilter
      - `equalTo` 'SELL' | 'BUY' — Quote direction. - `SELL`: Selling to shipper (customer quote) - `BUY`: Buying from carrier (carrier quote)
      - `notEqualTo` 'SELL' | 'BUY' — Quote direction. - `SELL`: Selling to shipper (customer quote) - `BUY`: Buying from carrier (carrier quote)
      - `in` QuoteSide[]
    - `customerId` UUIDFilter — Filter options for UUID fields (all operations)
      - `equalTo` string, uuid — Exact match
      - `notEqualTo` string, uuid — Not equal to
      - `in` string[] — Matches any UUID in the array
      - `notIn` string[] — Does not match any UUID in the array
      - `isNull` boolean — Field is null (true) or not null (false)
    - `carrierId` UUIDFilter — Filter options for UUID fields (all operations)
      - `equalTo` string, uuid — Exact match
      - `notEqualTo` string, uuid — Not equal to
      - `in` string[] — Matches any UUID in the array
      - `notIn` string[] — Does not match any UUID in the array
      - `isNull` boolean — Field is null (true) or not null (false)
    - `assigneeId` UUIDFilter — Filter options for UUID fields (all operations)
      - `equalTo` string, uuid — Exact match
      - `notEqualTo` string, uuid — Not equal to
      - `in` string[] — Matches any UUID in the array
      - `notIn` string[] — Does not match any UUID in the array
      - `isNull` boolean — Field is null (true) or not null (false)
    - `amount` FloatFilter — Filter options for float/number fields
      - `equalTo` number, float — Exact match
      - `notEqualTo` number, float — Not equal to
      - `lessThan` number, float — Less than
      - `lessThanOrEqualTo` number, float — Less than or equal to
      - `greaterThan` number, float — Greater than
      - `greaterThanOrEqualTo` number, float — Greater than or equal to
      - `isNull` boolean — Field is null (true) or not null (false)
    - `expiresAt` 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)
    - `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)
    - `and` QuoteFilter[]
    - `or` QuoteFilter[]
    - `not` QuoteFilter — recursive
  - `pageSize` integer
  - `cursor` string

## Response `200`

Quotes matching filter criteria

- object
  - `data` Quote[], required
    - `id` string, uuid, required — Unique identifier
    - `key` string, required — Human-readable quote ID (e.g., "Q003602")
    - `side` 'SELL' | 'BUY', required — Quote direction. - `SELL`: Selling to shipper (customer quote) - `BUY`: Buying from carrier (carrier quote)
    - `status` 'DRAFT' | 'REQUESTED' | 'QUOTED' | 'RECEIVED_REPLY' | 'SENT_REPLY' | 'RECEIVED_COUNTER' | 'SENT_COUNTER' | 'WON' | 'LOST' | 'PASS' | 'CANCELED', required — Current status in the quote lifecycle. Initial states: - `DRAFT`: Quote being drafted - `REQUESTED`: Customer requested a quote (needs pricing) Active states: - `QUOTED`: Price sent to customer - `RECEIVED_REPLY`: Received reply from customer - `SENT_REPLY`: Sent reply to customer - `RECEIVED_COUNTER`: Received counter-offer - `SENT_COUNTER`: Sent counter-offer Final states: - `WON`: Customer accepted the quote - `LOST`: Quote not accepted - `PASS`: Broker declined to quote - `CANCELED`: Quote canceled
    - `amount` number, nullable — Quoted price
    - `target` number, nullable — Target price for margin calculation
    - `margin` number, nullable — Calculated margin percentage
    - `expiresAt` string, date-time, nullable — Quote expiration timestamp
    - `customer` CustomerReference — Enhanced reference to a customer resource (returned in responses). Includes full customer details in addition to id/key. Note: Does NOT include nested references (paymentTerm, contacts, etc.) to prevent recursion. Maximum nesting depth: 1 level.
      - `id` string, uuid, required — Customer UUID
      - `key` string, nullable — Client-defined reference ID if set
      - `name` string, required — Customer company name
      - `friendlyId` string, required — Human-readable customer identifier
      - `status` 'PROSPECT' | 'ACTIVE' | 'INACTIVE' | 'CHURNED', required — Customer status
      - `phoneNumber` string, nullable — Primary phone number
      - `website` string, nullable — Customer website URL
      - `createdAt` string, date-time, required — When the customer was created
      - `updatedAt` string, date-time, required — When the customer was last updated
      - `deletedAt` string, date-time, nullable — When the customer was soft deleted (null if active)
    - `carrier` CarrierReference — Enhanced reference to a carrier resource (returned in responses). Includes full carrier details in addition to id/key. Note: Does NOT include nested references (contacts, etc.) to prevent recursion. Maximum nesting depth: 1 level.
      - `id` string, uuid, required — Carrier UUID
      - `key` string, nullable — Client-defined reference ID if set
      - `name` string, required — Carrier company name
      - `phoneNumber` string, nullable — Primary phone number
      - `email` string, email, nullable — Primary email address
      - `createdAt` string, date-time, required — When the carrier was created
      - `updatedAt` string, date-time, required — When the carrier was last updated
      - `deletedAt` string, date-time, nullable — When the carrier was soft deleted (null if active)
    - `order` OrderSummary — Summary of order details (embedded in Quote response)
      - `id` string, uuid
      - `key` string, nullable
      - `mode` 'TL' | 'LTL' | 'AIR' | 'OCEAN' | 'RAIL' | 'INTERMODAL' | 'DRAYAGE' — Transportation mode. - `TL`: Full Truckload - `LTL`: Less than Truckload - `AIR`: Air freight - `OCEAN`: Ocean freight - `RAIL`: Rail freight - `INTERMODAL`: Intermodal (multiple modes) - `DRAYAGE`: Drayage/cartage
      - `origin` object
        - `city` string
        - `stateProvince` string
        - `postalCode` string, nullable
      - `destination` object
        - `city` string
        - `stateProvince` string
        - `postalCode` string, nullable
      - `pickUpDate` string, date, nullable
      - `deliveryDate` string, date, nullable
      - `equipment` string[]
      - `weight` number, nullable
      - `mileage` number, nullable
    - `lostReason` 'EXPIRED' | 'NO_REASON' | 'NO_RESPONSE' | 'TOO_HIGH' | 'TOO_SLOW' | 'TRUCK_NOT_AVAILABLE' | 'OTHER' — Reason why the quote was lost. - `EXPIRED`: Quote expired without response - `NO_REASON`: No specific reason given - `NO_RESPONSE`: Customer didn't respond - `TOO_HIGH`: Price was too high - `TOO_SLOW`: Response was too slow - `TRUCK_NOT_AVAILABLE`: Capacity not available - `OTHER`: Other reason (see lostReasonText)
    - `lostReasonText` string, nullable — Additional text for lost reason
    - `closedTime` string, date-time, nullable — When the quote was closed (won/lost)
    - `assignee` 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)
    - `shipmentId` string, uuid, nullable — Shipment ID if converted
    - `shipmentKey` string, nullable — Shipment friendly ID if converted
    - `createdAt` string, date-time, required
    - `updatedAt` string, date-time, nullable
  - `pagination` PaginationInfo, required
    - `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

---

[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)
