Products Tools (Rental)
These tools are only advertised to AI clients when the supplier has the Rentals module enabled. See Per-supplier tool filtering for details.
Manage your rental product catalog, check availability, calculate pricing, and track inventory levels.
Required scope: products:read for read tools, products:write for write tools
Tools Overviewโ
| Tool | Description | Read-only? |
|---|---|---|
list_products | List rental products with optional filters | Yes |
get_product | Get detailed product information | Yes |
create_product | Create a new rental product | No |
update_product | Update an existing product | No |
check_product_availability | Check availability for specific dates | Yes |
calculate_rental_price | Calculate exact pricing for a date range | Yes |
get_inventory | Get inventory status for a product | Yes |
get_inventory_status | Get per-item status (available, rented, in workshop) | Yes |
get_low_inventory_products | Get products with low current availability | Yes |
get_expiring_compliance | Inspection and insurance dates for every boat | Yes |
list_productsโ
List rental products with optional filters. Returns product details including starting price.
Parametersโ
| Name | Type | Required | Description |
|---|---|---|---|
search | string | No | Search by name or SKU |
category_id | integer | No | Filter by category |
status | string | No | Filter by status: active, inactive, archived |
limit | integer | No | Number of results (default 10) |
get_productโ
Get detailed information about a product.
Parametersโ
| Name | Type | Required | Description |
|---|---|---|---|
product_id | integer | No | The product ID |
name | string | No | Search by product name |
Provide either product_id or name.
For a boat (product type Boats) the response carries a compliance object with the
same fields as the REST compliance object.
list_products carries it on each boat too.
create_productโ
Create a new rental product. Supports flat (single price) or schedule (tiered) pricing, with optional seasonal pricing.
Parametersโ
| Name | Type | Required | Description |
|---|---|---|---|
name | string | Yes | Product name |
category_id | integer | No | Primary category ID (use list_product_categories to find IDs). Use category_ids for multiple. |
category_ids | integer[] | No | Put the product in multiple categories (primary first). |
daily_price | number | No | For flat pricing: the single rental price |
price_interval | string | No | Pricing interval: day, hour, week. Defaults to day |
schedule_tiers | array | No | For tiered pricing: [{interval, price}] with whole-number intervals. For a half-day rate use half_day_price, not a fractional interval |
half_day_price | number | No | Optional half-day rate. Day-based pricing only โ adds a "ยฝ day" price (an interval: 0.5 row) for rentals up to half a day, alongside the daily rate. Combine with a day-based schedule_tiers, or with daily_price (which is promoted to a day schedule). Ignored for hourly/weekly pricing |
additional_charge_per_interval | number | No | Extra charge per interval beyond the last tier |
description | string | No | Product description |
sku | string | No | SKU/product code |
price_applies | string | No | yearRound (default) or seasonal |
seasonal_pricing | array | No | Per-season pricing: [{season_id, price, price_interval, schedule_tiers, half_day_price}] (half_day_price is the season's day-based half-day rate) |
whats_included | array | No | [{label, description}] rows. See Content Blocks. |
does_not_include | array | No | [{label, description}] rows โ what's not included. See Content Blocks. |
itinerary | array | No | [{time, title, description}] rows. |
highlights | array | No | Flat list of strings (pill chips). |
check_in_details | string | No | Rich-text HTML, sanitized to the allowlist at write time. |
what_to_bring | array | No | Flat list of strings (pill chips). |
restrictions | string | No | Rich-text HTML. |
health_and_safety | string | No | Rich-text HTML. |
cancellation_notes | string | No | Rich-text HTML. |
custom_sections | array | No | Ordered [{heading, body}] blocks beyond the eight fixed sections. heading is plain text; body is rich-text HTML. |
min_rental_value | integer or null | No | Shortest rental for this item. 0 means no minimum; null or omitted follows the shop minimum. |
min_rental_unit | string | No | Minutes, Hours or Days. Defaults to Hours. |
user_confirmed | boolean | Yes | Must be true to create |
Example: Flat Pricingโ
{
"name": "Mountain Bike",
"daily_price": 35,
"price_interval": "day",
"user_confirmed": true
}
Example: Tiered Pricingโ
{
"name": "Kayak",
"price_interval": "hour",
"schedule_tiers": [
{"interval": 1, "price": 20},
{"interval": 2, "price": 30},
{"interval": 3, "price": 35}
],
"additional_charge_per_interval": 5,
"user_confirmed": true
}
Example: Day Rate with a Half-Day Priceโ
half_day_price adds a "ยฝ day" rate (an interval: 0.5 row) for day-based rentals up to half a day, alongside the daily rate. Provide it with a day-based schedule_tiers, or (as below) with a plain daily_price โ which is promoted to a day schedule so both rates persist.
{
"name": "Paddleboard",
"daily_price": 60,
"price_interval": "day",
"half_day_price": 35,
"user_confirmed": true
}
update_productโ
Update an existing product.
Parametersโ
| Name | Type | Required | Description |
|---|---|---|---|
product_id | integer | Yes | The product ID to update |
name | string | No | New product name |
description | string | No | New description |
sku | string | No | New SKU |
price | number | No | New base price |
inventory_tracking | string | No | item for individually labeled stock, or group for one total. Existing stock determines its tracking method. |
inventory_identifiers | string[] | No | With inventory_tracking: item, number an unused stock pool using one distinct label per unit, or keep the same saved labels without adding stock. Changing used stock numbers is refused. |
turnaround_minutes | integer | No | Keep returned stock unavailable for this many minutes, from 0 to 525600. Zero removes the gap. |
status | string | No | New status: active, inactive |
category_id | integer | No | New primary category ID. Use category_ids for multiple. |
category_ids | integer[] | No | Replace the product's categories with this set (primary first). |
whats_included | array | No | [{label, description}] rows. See Content Blocks. |
does_not_include | array | No | [{label, description}] rows โ what's not included. See Content Blocks. |
itinerary | array | No | [{time, title, description}] rows. |
highlights | array | No | Flat list of strings. |
check_in_details | string | No | Rich-text HTML. |
what_to_bring | array | No | Flat list of strings. |
restrictions | string | No | Rich-text HTML. |
health_and_safety | string | No | Rich-text HTML. |
cancellation_notes | string | No | Rich-text HTML. |
custom_sections | array | No | Ordered [{heading, body}] blocks. heading plain text; body rich-text HTML. |
inspection_expiry | string | No | Boats only. Date the inspection runs out, YYYY-MM-DD. none removes it. |
insurance_expiry | string | No | Boats only. Date the insurance runs out, YYYY-MM-DD. none removes it. |
insurance_policy_number | string | No | Boats only. none removes it. |
inspection_document_location | string | No | Boats only. An http or https link to the inspection certificate. none removes it. |
insurance_document_location | string | No | Boats only. An http or https link to the insurance document. none removes it. |
block_bookings_if_lapsed | boolean | No | Boats only. Stop bookings for the boat, and every experience that uses it, while a date has lapsed. |
user_confirmed | boolean | Yes | Must be true to update |
check_product_availabilityโ
Check if a product is available for specific dates and quantity. Returns availability status and estimated pricing.
Parametersโ
| Name | Type | Required | Description |
|---|---|---|---|
product_id | integer | Yes | The product ID |
start_date | string | Yes | Start date for the period |
end_date | string | Yes | End date for the period |
quantity | integer | No | Quantity needed (default 1) |
calculate_rental_priceโ
Calculate the exact rental price for one or more products over a date range using the system pricing engine. Use this instead of calculating prices manually.
Parametersโ
| Name | Type | Required | Description |
|---|---|---|---|
product_ids | array | Yes | Array of product IDs to calculate prices for |
start_date | string | Yes | Rental start datetime (YYYY-MM-DD HH:MM:SS) |
end_date | string | Yes | Rental end datetime (YYYY-MM-DD HH:MM:SS) |
quantity | integer | No | Quantity per product (default 1) |
variation_id | integer | No | Variation to price. When the product prices by variation and this variation has its own pricing, that pricing is used; otherwise the base price applies. |
location_id | integer | No | Pickup location to price at. Most specific scope wins: variation-at-location โ location โ variation โ base. |
get_inventoryโ
Get inventory status for a product. Optionally check per-item availability for a date range.
Parametersโ
| Name | Type | Required | Description |
|---|---|---|---|
product_id | integer | Yes | The product ID |
start_date | string | No | Check availability from this datetime |
end_date | string | No | Check availability until this datetime |
variation_id | integer | No | Filter to a specific variation |
location_id | integer | No | Filter to a business location. |
limit | integer | No | Records per page, from 1 to 100. Default 30. |
offset | integer | No | Records to skip. Default zero. Use pagination.next_offset for the next page. |
The response includes pagination.total_records, has_more, and next_offset. inventory_records counts the returned page. Read subsequent pages before reporting a complete list of unit numbers. Availability totals still cover all matching inventory.
get_inventory_statusโ
Get status of individual inventory items for a product, showing which items are available, rented, or in the workshop.
Parametersโ
| Name | Type | Required | Description |
|---|---|---|---|
product_id | integer | Yes | The product ID |
get_low_inventory_productsโ
Get products with low current availability. Shows products where available quantity (accounting for active bookings) is below the threshold. Point-in-time availability for today.
Parametersโ
| Name | Type | Required | Description |
|---|---|---|---|
threshold | integer | No | Consider inventory low if available quantity is below this number (default 5) |
get_expiring_complianceโ
Inspection and insurance for every boat (a rental product of type Boats), plus any older
charter experience that keeps its own dates. Each row has name, kind (boat or
experience), product_id or experience_id, and the fields of the REST
compliance object.
Allowed with products:read or experiences:read.
Parametersโ
| Name | Type | Required | Description |
|---|---|---|---|
show | string | No | all (default) lists every boat. needs_attention lists only boats whose inspection or insurance has lapsed or runs out within days. |
days | integer | No | With needs_attention: the window in days (default 30, max 365). Lapsed dates are always included. Sending days alone implies needs_attention. |
To change a date, call update_product.
Relatedโ
- Products REST API - REST API endpoints for products
- Bundles Tools - Product bundle packages
- Categories Tools - Product category management
- Workshop Tools - Equipment maintenance tracking