> ## Knowledge Base Index
> Fetch the complete knowledge base index at: https://helpdesk.resmarksystems.com/sitemap.xml
> Use this file to discover available pages before exploring further.
> Pure-Markdown content can be obtained by appending a '.md' suffix to the content URLs listed in the sitemap (without the trailing slash).

# Resmark API: Products

Products in Resmark represent the tours, activities, rentals, and other experiences your business offers for booking. The Product endpoints let you retrieve product listings, check available inventory with pricing, and look up pickup options.

### Get All Products

```
GET /product
```

Returns a paginated list of products.

| Parameter | Type | Required | Description |
| ---- |
| limit | number | No | Number of products to return. Default: 50. |
| page | number | No | Pagination offset. With `limit=50`, `page=1` returns results 51 through 100. Default: 0. |
| ids | csv | No | Filter by specific product ID(s). |
| tagIds | csv | No | Filter to products matching the specified tag IDs. |
| lastModified | ISO date | No | Returns products modified on or after this date. |
| productNumbers | string | No | Filter by product number(s). Multiple values as CSV. |
| productName | string | No | Filter by product name. Accepts full or partial name. |

### Get Single Product

```
GET /product/{searchTerm}
```

Returns a single product. The `searchTerm` can be a Product ID, Product Number, or Product Name.

### Product Response Fields

Both endpoints above return the same product object structure. Key fields include:

| Field | Type | Description |
| ---- |
| id | string | Product ID |
| productCode | string | Short product code |
| name | string | Product name |
| productNumber | number | Product number |
| price | string | Marketing price (not the actual booking price; see Get Product Inventory below for real pricing) |
| quantityLabel | string | Label for the quantity unit (e.g., "Guest") |
| quantityType | string | Type of quantity (e.g., "participant") |
| dateless | boolean | Whether the product has no specific dates |
| overview | string | Full marketing description |
| highlights | string | HTML highlights list |
| shortDescription | string | Brief marketing description |
| ageRestrictions | object | Contains `minAge` and `maxAge` strings |
| class | string | Product class (e.g., "groupActivity") |
| classTypes | array | List of activity type strings |
| location | array | Location objects with id, name, address, city, state, postalCode, country |
| modifiedDate | ISO date | Last modified date |
| dateSettings | object | Scheduling info: months, startTime, details, duration, seasonal |
| information | array | Named content sections (e.g., "What to Bring", "Includes") with `hideOnPublic` flag |
| videos | array | Video objects with url, vimeoId, youtubeId |
| images | array | Image objects with small, medium, large, xlarge URLs |
| pickup | object | Pickup configuration: mode, productZoneId, providerId, direction |
| tags | array | Tag objects with id and name |
| generalPolicies | array | Policy objects with name, detail, requireBeforeCart, requiredBeforeCheckout, displayConfirmationAfterPurchase |
| cancellationPolicies | object | Contains id, name, detail HTML, and preference (e.g., "CALL_TO_CANCEL") |

| The `price` field on a product is a marketing price for display purposes. For actual booking prices, use the Get Product Inventory endpoint below.

### Get Reseller Product

```
GET /product/{id}/searchReseller/{resellerEntityId}
```

Returns a product with reseller-specific customizations applied. When a reseller connected through TrueConnect has overridden product details (name, description, pricing, images), this endpoint returns the customized version.

| Parameter | Type | Required | Description |
| ---- |
| id | string | Yes | Product ID or Product Number |
| resellerEntityId | string | Yes | Reseller Business ID, found in the URL at **TrueConnect > Connected Reseller > Manage Connection** |

### Get Product Inventory

```
GET /product/{id}/item
```

Returns available dates, times, pricing per tier, and availability counts for a product. This is where you get the `activityId` needed to add inventory to a cart.

| Parameter | Type | Required | Description |
| ---- |
| id | string | Yes | Product ID or Product Number |
| from | string | No | Minimum start date. Format: `YYYY-MM` or `YYYY-MM-DD`. Defaults to current month. |
| to | string | No | Maximum start date. Format: `YYYY-MM` or `YYYY-MM-DD`. Defaults to current month. |
| pricingcode | string | No | Price category code. Defaults to the default pricing category. |

**Response structure:**

The response contains an `items` array and a `priceTiers` object.

Each item in the array represents a date, with a `timesAvailable` array containing individual time slots:

| Field | Type | Description |
| ---- |
| items[].date | string | Date (YYYY-MM-DD) |
| items[].timesAvailable[].activityId | string | The ID used to add this time slot to a cart. Passed as `itemId` in cart endpoints. |
| items[].timesAvailable[].startTime | ISO date | Start time in UTC |
| items[].timesAvailable[].endTime | ISO date | End time in UTC |
| items[].timesAvailable[].total | number | Total available seats |
| items[].timesAvailable[].tiersAvailable | object | Available seats per tier key |
| items[].timesAvailable[].restrictOrdersWithin | number | Order cutoff in days |
| items[].timesAvailable[].restrictOrdersWithinMinutes | number | Order cutoff in minutes |
| items[].timesAvailable[].price | object | Price per tier key (e.g., `{"Adult": 88, "Child": 77}`) |

The `priceTiers` object contains tier definitions keyed by tier ID, each with `key`, `label`, `deposit`, and `ageRange` (from/to).

|| The `activityId` from this endpoint is the same value you pass as `itemId` when adding inventory to a cart. The naming is different between endpoints, but the value is the same.

### Get Product Pickup Options

```
GET /product/{id}/pickup
```

Returns pickup zones, locations, and pickup detail IDs for a product. Required when a product has pickups configured. The `pickupDetailId` and `locationId` from this response are used when adding inventory to a cart.

| Parameter | Type | Required | Description |
| ---- |
| id | string | Yes | Product ID or Product Number |

**Response structure:**

| Field | Type | Description |
| ---- |
| data[].id | string | Pickup zone ID |
| data[].name | string | Pickup zone name |
| data[].locations | array | Location objects with `id` and `name` |
| data[].pickupDetails | array | Pickup detail objects with `id`, `name`, and price per tier |

### Finding Product IDs

Product IDs can be found in the URL when viewing a product in Resmark. Navigate to **Products**, then click a product name. The Product ID is in the URL.