> ## Documentation Index
> Fetch the complete documentation index at: https://learn.nexudus.com/llms.txt
> Use this file to discover all available pages before exploring further.

# List Store Products

> Returns the list of products available in the store, with optional filtering by tag, type, and selected plans.

# List Store Products

Returns all products available in the ecommerce store for the current location. Supports filtering by tag, product type (time passes), and selected plans.

## Authentication

No authentication required for public product listing.

## Query Parameters

<ParamField query="profileId" type="number">
  Customer profile ID to personalise available products. Defaults to `0`.
</ParamField>

<ParamField query="tag" type="string">
  Filter by product tag. URL-encoded.
</ParamField>

<ParamField query="productId" type="number">
  Filter to a specific product by ID.
</ParamField>

<ParamField query="onlyTimePasses" type="boolean">
  When `true`, returns only time-pass products.
</ParamField>

<ParamField query="selectedPlans" type="number[]">
  Array of plan IDs to filter products compatible with specific plans.
</ParamField>

<ParamField query="_shape" type="string">
  Comma-separated list of field paths to include in the response. When provided, only the
  specified fields are returned — useful for reducing payload size. Supports nested paths
  using dot notation. Example: `_shape=Products.Name,Products.Price,Products.PriceFormatted`.
</ParamField>

## Response

Returns an object with a `Products` array. Each product has the following fields:

#### Identity

| Field      | Type     | Description                       |
| ---------- | -------- | --------------------------------- |
| `Id`       | `number` | Unique identifier for the product |
| `UniqueId` | `string` | GUID identifier                   |

#### Core

| Field               | Type      | Description                                 |
| ------------------- | --------- | ------------------------------------------- |
| `Name`              | `string`  | Display name of the product                 |
| `Description`       | `string`  | Product description (may contain HTML)      |
| `Tags`              | `string`  | Comma-separated tags                        |
| `DisplayOrder`      | `number`  | Sort order for display                      |
| `SystemProductType` | `number`  | Internal product type identifier            |
| `Visible`           | `boolean` | Whether the product is visible in the store |

#### Pricing

| Field                 | Type       | Description                   |
| --------------------- | ---------- | ----------------------------- |
| `Price`               | `number`   | Price amount                  |
| `PriceFormatted`      | `string`   | Locale-formatted price string |
| `ProductCurrencyCode` | `string`   | ISO currency code             |
| `Currency`            | `Currency` | Currency object (nested)      |
| `TaxRate`             | `number?`  | Applicable tax rate           |

#### Billing

| Field             | Type      | Description                        |
| ----------------- | --------- | ---------------------------------- |
| `Quantity`        | `number`  | Default quantity                   |
| `RegularCharge`   | `boolean` | Whether this is a recurring charge |
| `AlwaysRecurrent` | `boolean` | Always billed as recurring         |
| `AlwaysOneOff`    | `boolean` | Always billed as one-off           |
| `InvoiceCoworker` | `boolean` | Whether to invoice the coworker    |

#### Stock

| Field                | Type      | Description                       |
| -------------------- | --------- | --------------------------------- |
| `TrackStock`         | `boolean` | Whether stock tracking is enabled |
| `CurrentStock`       | `number?` | Current available stock           |
| `AllowNegativeStock` | `boolean` | Whether negative stock is allowed |

#### Business

| Field                | Type      | Description                                    |
| -------------------- | --------- | ---------------------------------------------- |
| `BusinessId`         | `number`  | Business identifier                            |
| `BusinessName`       | `string`  | Business name                                  |
| `BusinessWebAddress` | `string`  | Business web address                           |
| `HasTimePasses`      | `boolean` | Whether the product has associated time passes |

#### Timestamps (from base)

| Field          | Type     | Description                          |
| -------------- | -------- | ------------------------------------ |
| `CreatedOn`    | `string` | Record creation timestamp (local)    |
| `UpdatedOn`    | `string` | Record last-update timestamp (local) |
| `CreatedOnUtc` | `string` | Record creation timestamp (UTC)      |
| `UpdatedOnUtc` | `string` | Record last-update timestamp (UTC)   |

## Examples

### Fetch all store products

```http theme={null}
GET /api/public/store/products?profileId=0
```

### Fetch time passes only

```http theme={null}
GET /api/public/store/products?profileId=0&onlyTimePasses=true
```

## TypeScript Integration

```typescript theme={null}
import endpoints from '@/api/endpoints'

const { resource: store } = useTypedData(
  httpClient,
  endpoints.products.products({
    profileId: 0,
    tag: 'day-pass',
  }),
)
// store.Products
```
