# List Quotes

`GET /crm/quotes`

Group: CRM › Quotes · Operation ID: `listQuotes`

Returns a list of quotes, most recently created first. To filter by memo text, quote number or sales arrangement, or by more than one value of a field, use POST crm/quotes/search.

Only ids, enums, booleans and dates filter this endpoint. To filter by the memo text, quoteNumber or salesArrangementId, or to pass more than one value of a field, use POST crm/quotes/search. An unrecognized filter value matches nothing rather than failing. The item schema here is the quote header alone. GET crm/quotes/:id and POST crm/quotes/search also return the quote's priced lines.

[Open in the interactive reference](https://docs.api.lensing.ai/?op=listQuotes)

## Parameters

| Name | In | Type | Required | Description |
| --- | --- | --- | --- | --- |
| `Api-Version` | header | `"v1"` | yes | The API version this request targets, named by its public identifier. Required on every request; omitting it, or naming a version this company does not have, is answered with 400. This document describes version `v1`. |
| `quoteId` | query | string | no | Limits results to the quote with this id. |
| `quoteType` | query | string | no | Limits results to quotes of this kind. Possible values: 'new', 'upsell', 'renewal', 'changeOrder'. Omit for every kind. |
| `status` | query | string | no | Limits results to quotes in this business state. Possible values: 'created', 'underApproval', 'approved', 'underSigning', 'signed', 'completed'. Omit for every state. |
| `approvalStatus` | query | string | no | Limits results to quotes in this approval state. Possible values: 'pendingSubmission', 'pendingApproval', 'approved', 'rejected'. Omit for every state. |
| `isPrimary` | query | boolean | no | Limits results to primary quotes when true, or non-primary quotes when false. Pair with opportunityId to find an opportunity's primary quote. Omit for both. |
| `opportunityId` | query | string | no | Limits results to quotes of this opportunity. Omit for every opportunity. |
| `quoteDateFrom` | query | string | no | Limits results to quotes drawn up on or after this date. Format YYYY-MM-DD. Inclusive. |
| `quoteDateTo` | query | string | no | Limits results to quotes drawn up on or before this date. Format YYYY-MM-DD. Inclusive. |
| `modifiedFrom` | query | string | no | Limits results to quotes changed at or after this time, in UTC. Format YYYY-MM-DDTHH:mm:ss.sssZ. Inclusive. |
| `modifiedTo` | query | string | no | Limits results to quotes changed at or before this time, in UTC. Format YYYY-MM-DDTHH:mm:ss.sssZ. Inclusive. |
| `cursor` | query | string | no | The cursor from the previous response's pagination.nextCursor. Omit on the first request. |
| `pageSize` | query | number | no | The number of quotes per page. Defaults to 50, and a value above 200 is treated as 200, not rejected. |

## Response

`200` Success

Under `data` (listQuotesOutput):

| Field | Type | Required | Description |
| --- | --- | --- | --- |
| `items` | array of object | yes | The quotes on this page, most recently created first. An empty array when nothing matches. |
| `items[].id` | string | yes | The unique identifier for the quote. |
| `items[].quoteNumber` | string | no | The system-generated quote number, for example 'QT-1042'. Absent while none has been assigned. |
| `items[].quoteType` | string | yes | The kind of quote. Possible values: 'new', 'upsell', 'renewal', 'changeOrder'. |
| `items[].status` | string | no | Where the quote stands in its business process. Possible values: 'created', 'underApproval', 'approved', 'underSigning', 'signed', 'completed'. Absent on a quote that has not entered the process. |
| `items[].approvalStatus` | string | no | Where the quote stands in its approval process. Possible values: 'pendingSubmission', 'pendingApproval', 'approved', 'rejected'. Absent until the approval process has run. |
| `items[].isPrimary` | boolean | yes | Whether this is the primary quote of its opportunity. |
| `items[].quoteDate` | string (date) | yes | The date the quote was drawn up. Format YYYY-MM-DD. Product prices are validated against the opportunity's price book as of this date. |
| `items[].serviceStartDate` | string (date) | yes | The first date products or services on this quote are delivered. Format YYYY-MM-DD. No subscription on the quote starts before it. |
| `items[].signDate` | string (date) | no | The date the quote was signed by the customer and the legal entity. Format YYYY-MM-DD. Absent when not recorded. |
| `items[].paymentTerm` | string | yes | The code of the payment term applied to invoices created from this quote. See code on GET accounting/payment-terms. |
| `items[].memo` | string | no | A free-text memo recorded on the quote. Absent when none is set. |
| `items[].needsPSACalculation` | boolean | no | Whether the quote takes its product data from a PSA project rather than from the product catalog. |
| `items[].currency` | string | no | The currency of every amount on the quote. A quote takes the currency of its opportunity and has none of its own. Format ISO 4217, for example 'USD'. |
| `items[].totalPrice` | string (decimal) | no | The sum of the quote's lines before tax, less any one-time discount, in the quote's currency. |
| `items[].oneTimeDiscountAmount` | string (decimal) | no | A one-time discount applied to the whole quote, in the quote's currency. |
| `items[].oneTimeDiscountAllocation` | string | no | How oneTimeDiscountAmount is spread across the quote's invoices. Possible values: 'firstInvoice', 'alignToInvoiceFrequency', 'custom'. |
| `items[].billableTimeEstimate` | string (decimal) | no | The estimated total of the quote's billable-time lines, in the quote's currency. |
| `items[].billableTimeCappedPrice` | string (decimal) | no | The ceiling on the total of the quote's billable-time lines, in the quote's currency. |
| `items[].opportunityId` | string | yes | The opportunity this quote belongs to. See id on GET crm/opportunities/:id. |
| `items[].opportunityName` | string | no | The name of the opportunity this quote belongs to. Absent when the opportunity has no name. |
| `items[].opportunityNumber` | string | no | The opportunity number of the opportunity this quote belongs to, for example 'OP-1042'. Absent while none has been assigned. |
| `items[].billToAddressId` | string | no | The bill-to address on the quote, a copy the quote keeps of its own rather than the source it was copied from. There is no endpoint for it. |
| `items[].soldToAddressId` | string | no | The sold-to address on the quote, a copy the quote keeps of its own rather than the source it was copied from. There is no endpoint for it. |
| `items[].salesArrangementId` | string | no | The sales arrangement this quote is assigned to. Set on change-order quotes. There is no endpoint for it. |
| `items[].lastModifiedDate` | string (date-time) | yes | The date and time the quote record last changed, in UTC. Format YYYY-MM-DDTHH:mm:ss.sssZ. |
| `pagination` | object | yes | The pagination details for this page. |
| `pagination.nextCursor` | string | no | The cursor for the next page. Pass it back as cursor. Absent on the last page. |
| `pagination.hasMore` | boolean | yes | Whether another page follows. A full page may still be the last, so branch on this. |

## Statuses

- `400` — Invalid request or business failure
- `401` — Missing or invalid access token
- `403` — Not authorized
- `404` — Not found
- `429` — Too many requests
- `500` — Internal server error
