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

# List products.

`GET /api/v1/products`

## Request

- Base URL: `https://app.tracepass.eu`
- URL: `https://app.tracepass.eu/api/v1/products`
- Auth: one of:
  - HTTP bearer
  - OAuth 2 (authorization code, authorization URL `https://app.tracepass.eu/api/oauth/authorize`, token URL `https://app.tracepass.eu/api/oauth/token`, scopes: `passports:read`)

Paginated list of products in the workspace.

## Query parameters

- `page` integer
- `limit` integer
- `category` string
- `status` 'active' | 'archived'
- `search` string

## Response `200`

Paginated product list.

- PaginatedProducts
  - `total` integer, required
  - `page` integer, required
  - `limit` integer, required
  - `totalPages` integer, required
  - `items` Product[], required
    - `_id` string: MongoDB ObjectId hex string (24 chars).
    - `name` string
    - `model` string
    - `category` string
    - `templateId` string: MongoDB ObjectId hex string (24 chars).
    - `defaultFieldValues` object: Seed values for passports created from this product, keyed by template field. Each value is checked against the template: a numeric string for a number field is stored as a number, and any other value the template rejects answers 400 `Invalid default field values` with `details` (in a batch, that item's result is an error).
    - `imageUrls` string[]
    - `passportCount` integer
    - `status` 'active' | 'archived'
    - `sourceLocale` string
    - `createdAt` string, date-time
    - `updatedAt` string, date-time

## Other responses

- `401`: Missing or invalid API key.
- `403`: Plan-gate or workspace permission denied.
- `429`: Daily v1 write or passport-read budget exhausted. Resets at 00:00 UTC.

---

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