---
title: "List quotes"
method: GET
path: "/v1/quotes"
tags: ["Quotes"]
---

# List quotes

`GET /v1/quotes`

## Request

- Base URL: `https://api.frihet.io`
- URL: `https://api.frihet.io/v1/quotes`
- Auth: API key in header `X-API-Key`

Retrieve a paginated list of quotes with optional filters for status, date range, and search.

## Query parameters

- `limit` integer
- `offset` integer
- `cursor` string
- `status` 'draft' | 'sent' | 'accepted' | 'rejected' | 'expired'
- `from` string, date
- `to` string, date
- `q` string
- `fields` string
- `clientId` string
- `seriesId` string

## Response `200`

A paginated list of quotes

- object
  - `data` Quote[]
    - `id` string: Unique identifier
    - `createdAt` string, date-time
    - `updatedAt` string, date-time
    - `clientName` string, required: Client name
    - `items` LineItem[], required
      - `description` string, required: Item description
      - `quantity` number, required: Quantity
      - `unitPrice` number, required: Price per unit
    - `validUntil` string, date: Quote expiration date
    - `status` 'draft' | 'sent' | 'accepted' | 'rejected' | 'expired'
    - `notes` string: Additional notes
    - `documentNumber` string: Auto-generated quote number
    - `subtotal` number: Subtotal before tax
    - `tax` number: Tax amount
    - `total` number: Total amount including tax
  - `total` integer: Total number of items matching the query
  - `limit` integer: Number of items per page
  - `offset` integer: Current offset
  - `nextCursor` string: Cursor for fetching the next page of results. Only present when there are more results available. Pass this value as the `cursor` query parameter in the next request. Base64url-encoded.
  - `truncated` boolean: Only present (and `true`) when the underlying search query saturated the internal 500-document cap. `total` therefore reports the size of the first 500 matches, not the full match count. Narrow the search query (taxId / fiscal id, exact email) to ensure you see every result.

## Other responses

- `400`: Bad request - invalid parameters or request body
- `401`: Authentication required or invalid API key
- `429`: Rate limit exceeded (100 requests per minute)
- `500`: Internal server error

---

[API](https://skmtc.dev/frihet/apis/frihet-api.md) · [All operations](https://skmtc.dev/frihet/apis/frihet-api/llms.txt) · [OpenAPI document](https://skmtc.dev/frihet/apis/frihet-api/revisions/3dd37f6a72d1?raw)
