---
title: "List products"
method: GET
path: "/v1/products"
tags: ["Products"]
---

# List products

`GET /v1/products`

## Request

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

Retrieve a paginated list of products and services with optional search.

## Query parameters

- `limit` integer
- `offset` integer
- `cursor` string
- `from` string, date
- `to` string, date
- `q` string
- `fields` string
- `isActive` boolean

## Response `200`

A paginated list of products

- object
  - `data` Product[]
    - `id` string: Unique identifier
    - `createdAt` string, date-time
    - `updatedAt` string, date-time
    - `name` string, required: Product or service name
    - `unitPrice` number, required: Unit price
    - `description` string: Product description
    - `taxRate` number: Default tax rate percentage
  - `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)
