# List products

`GET /v1/products`

Returns the company's product catalogue (varekartotek), ordered by name.

**Scopes:** any of `products:read`, `read:ledger`

## Request

```bash
curl https://api.numina.app/v1/products \
  -H "Authorization: Bearer numi_YOUR_API_KEY"
```

## Query parameters

- `search` (string, optional): Search by partial name or product number (max 200 chars)
- `product_number` (string, optional): Exact product number (max 64 chars)
- `limit` (integer, optional): Maximum number of results (default 100, max 500) Default: `100`. (1–500)
- `offset` (integer, optional, nullable): Number of results to skip for pagination Default: `0`. (≥ 0)

## Response `200`

List of products

```json
{
  "products": [
    {
      "id": "550e8400-e29b-41d4-a716-446655440000",
      "product_number": "1001",
      "description": "Consulting hour",
      "quantity": 1,
      "unit": "hour",
      "unit_price": 950,
      "sales_account_number": 1000,
      "use_account_vat": true,
      "vat_code": null
    }
  ],
  "has_more": false,
  "next_offset": 0
}
```

## Errors

- `400` Bad Request - Invalid input or validation failed
- `401` Unauthorized - Invalid or missing authentication
- `403` Forbidden - Missing scope, or the company is archived
- `429` Too Many Requests - Rate limit exceeded
- `500` Internal Server Error

See https://developers.numina.app/errors.md for the error format.
