Tool tree
gradeNot graded
get-businessAnswer
Business profile: locations, currency, hours, booking lead time, delivery methods, setup surfaces, and AI checkout mode.
View tool JSON
{
"name": "get-business",
"kind": "answer",
"impl": "imperative",
"description": "Business profile: locations, currency, hours, booking lead time, delivery methods, setup surfaces, and AI checkout mode.",
"inputSchema": {
"type": "object",
"properties": {}
}
}get-rentalAnswer
Details for one or more rentals: description, dimensions, images, price estimate, and the options tree (accessories, dropdown choices, separate units). Use option ids from here when adding options to a cart.
View tool JSON
{
"name": "get-rental",
"kind": "answer",
"impl": "imperative",
"description": "Details for one or more rentals: description, dimensions, images, price estimate, and the options tree (accessories, dropdown choices, separate units). Use option ids from here when adding options to a cart.",
"inputSchema": {
"type": "object",
"properties": {
"rental_ids": {
"type": "array",
"items": {
"type": "integer"
},
"minItems": 1,
"description": "Rental ids, e.g. from search-rentals."
},
"event_date": {
"type": "string",
"description": "YYYY-MM-DD; enables dated price estimates."
},
"start_time": {
"type": "string",
"description": "HH:MM, 24-hour. Optional: defaults to the business's usual start time, reported back as assumed_start_time."
},
"duration_hours": {
"type": "number",
"minimum": 0.5,
"maximum": 720,
"description": "Optional: defaults to the business's usual event duration, reported back as assumed_duration_hours. Omit it (or send null) to ask for that default — 0 is not a way to say 'unset' and is refused."
}
},
"required": [
"rental_ids"
]
}
}check-availabilityAnswer
Check whether rentals are available for an event date, time, and duration. Quantity is required — availability depends on it. If start_time or duration_hours is omitted the business default is used and the response says so; confirm any assumed value with the customer before creating a cart.
View tool JSON
{
"name": "check-availability",
"kind": "answer",
"impl": "imperative",
"description": "Check whether rentals are available for an event date, time, and duration. Quantity is required — availability depends on it. If start_time or duration_hours is omitted the business default is used and the response says so; confirm any assumed value with the customer before creating a cart.",
"inputSchema": {
"type": "object",
"properties": {
"event_date": {
"type": "string",
"description": "YYYY-MM-DD"
},
"end_date": {
"type": "string",
"description": "YYYY-MM-DD. Optional: check a whole range in one call — at most 14 days after event_date (wider spans are refused). The response then adds days[], one entry per day from event_date through end_date, each day fully conflict-checked at the same start time and duration. Range rows carry no price_estimate (per-day pricing is skipped for cost); price a chosen day with a single-date check or price-cart."
},
"start_time": {
"type": "string",
"description": "HH:MM, 24-hour. Optional: defaults to the business's usual start time, reported back as assumed_start_time."
},
"duration_hours": {
"type": "number",
"minimum": 0.5,
"maximum": 720,
"description": "Optional: defaults to the business's usual event duration, reported back as assumed_duration_hours. Omit it (or send null) to ask for that default — 0 is not a way to say 'unset' and is refused."
},
"items": {
"type": "array",
"items": {
"type": "object",
"properties": {
"rental_id": {
"type": "integer",
"description": "Rental id from search-rentals or get-rental."
},
"quantity": {
"type": "integer",
"minimum": 1,
"maximum": 99
}
},
"required": [
"rental_id",
"quantity"
]
},
"minItems": 1
}
},
"required": [
"event_date",
"items"
]
}
}price-cartAnswer
Fast discovery pricing for a set of items on a date. Estimate only: excludes tax, delivery, coupons, and conditional pricing. For exact totals, build a cart and set the event address — never create a quote just to see a price.
View tool JSON
{
"name": "price-cart",
"kind": "answer",
"impl": "imperative",
"description": "Fast discovery pricing for a set of items on a date. Estimate only: excludes tax, delivery, coupons, and conditional pricing. For exact totals, build a cart and set the event address — never create a quote just to see a price.",
"inputSchema": {
"type": "object",
"properties": {
"event_date": {
"type": "string",
"description": "YYYY-MM-DD"
},
"start_time": {
"type": "string",
"description": "HH:MM, 24-hour. Optional: defaults to the business's usual start time, reported back as assumed_start_time."
},
"duration_hours": {
"type": "number",
"minimum": 0.5,
"maximum": 720,
"description": "Optional: defaults to the business's usual event duration, reported back as assumed_duration_hours. Omit it (or send null) to ask for that default — 0 is not a way to say 'unset' and is refused."
},
"items": {
"type": "array",
"items": {
"type": "object",
"properties": {
"rental_id": {
"type": "integer",
"description": "Rental id from search-rentals or get-rental."
},
"quantity": {
"type": "integer",
"minimum": 1,
"maximum": 99
},
"options": {
"type": "array",
"items": {
"type": "object",
"properties": {
"option_id": {
"type": "integer",
"description": "Option id from the get-rental options tree."
},
"quantity": {
"type": "integer",
"minimum": 1,
"maximum": 99
},
"choice_id": {
"type": "integer",
"description": "Chosen dropdown choice id, when the option is a dropdown."
}
},
"required": [
"option_id"
]
}
}
},
"required": [
"rental_id",
"quantity"
]
},
"minItems": 1
}
},
"required": [
"event_date",
"items"
]
}
}get-delivery-optionsAnswer
Valid delivery methods for an address, whether the address is in the service area, and a distance-charge preview.
View tool JSON
{
"name": "get-delivery-options",
"kind": "answer",
"impl": "imperative",
"description": "Valid delivery methods for an address, whether the address is in the service area, and a distance-charge preview.",
"inputSchema": {
"type": "object",
"properties": {
"address": {
"type": "object",
"properties": {
"street": {
"type": "string"
},
"city": {
"type": "string"
},
"state": {
"type": "string"
},
"zip": {
"type": "string"
}
},
"required": [
"state",
"zip"
]
}
},
"required": [
"address"
]
}
}create-cartAction
Start a transaction. The event window is the required first step of any booking flow; the returned cart_id is needed by every later cart call. Unlike the discovery tools, this one does NOT assume a start time or duration — both must come from the customer, because this window is what they get quoted and committed to; confirm them when you create the cart, not as part of an up-front question list. Carts are free and invisible to the business — they hold no inventory and expire on their own, so create several to build alternative packages to compare.
View tool JSON
{
"name": "create-cart",
"kind": "act",
"impl": "imperative",
"description": "Start a transaction. The event window is the required first step of any booking flow; the returned cart_id is needed by every later cart call. Unlike the discovery tools, this one does NOT assume a start time or duration — both must come from the customer, because this window is what they get quoted and committed to; confirm them when you create the cart, not as part of an up-front question list. Carts are free and invisible to the business — they hold no inventory and expire on their own, so create several to build alternative packages to compare.",
"inputSchema": {
"type": "object",
"properties": {
"event_date": {
"type": "string",
"description": "YYYY-MM-DD"
},
"start_time": {
"type": "string",
"description": "HH:MM, 24-hour. Required — ask the customer, do not guess."
},
"duration_hours": {
"type": "number",
"minimum": 0.5,
"maximum": 720,
"description": "Required — ask the customer, do not guess."
},
"event_zip": {
"type": "string"
}
},
"required": [
"event_date",
"start_time",
"duration_hours"
]
}
}add-to-cartAction
Add items to a cart. Returns the full recalculated cart (price and availability per line) — no follow-up call needed.
View tool JSON
{
"name": "add-to-cart",
"kind": "act",
"impl": "imperative",
"description": "Add items to a cart. Returns the full recalculated cart (price and availability per line) — no follow-up call needed.",
"inputSchema": {
"type": "object",
"properties": {
"cart_id": {
"type": "string"
},
"items": {
"type": "array",
"items": {
"type": "object",
"properties": {
"rental_id": {
"type": "integer",
"description": "Rental id from search-rentals or get-rental."
},
"quantity": {
"type": "integer",
"minimum": 1,
"maximum": 99
},
"options": {
"type": "array",
"items": {
"type": "object",
"properties": {
"option_id": {
"type": "integer",
"description": "Option id from the get-rental options tree."
},
"quantity": {
"type": "integer",
"minimum": 1,
"maximum": 99
},
"choice_id": {
"type": "integer",
"description": "Chosen dropdown choice id, when the option is a dropdown."
}
},
"required": [
"option_id"
]
}
}
},
"required": [
"rental_id",
"quantity"
]
},
"minItems": 1
}
},
"required": [
"cart_id",
"items"
]
}
}update-cart-itemAction
Change quantity or options of items already in the cart. Quantity 0 removes the item. Returns the full recalculated cart.
View tool JSON
{
"name": "update-cart-item",
"kind": "act",
"impl": "imperative",
"description": "Change quantity or options of items already in the cart. Quantity 0 removes the item. Returns the full recalculated cart.",
"inputSchema": {
"type": "object",
"properties": {
"cart_id": {
"type": "string"
},
"items": {
"type": "array",
"items": {
"type": "object",
"properties": {
"rental_id": {
"type": "integer",
"description": "Rental id from search-rentals or get-rental."
},
"quantity": {
"type": "integer",
"minimum": 0,
"maximum": 99
},
"options": {
"type": "array",
"items": {
"type": "object",
"properties": {
"option_id": {
"type": "integer",
"description": "Option id from the get-rental options tree."
},
"quantity": {
"type": "integer",
"minimum": 1,
"maximum": 99
},
"choice_id": {
"type": "integer",
"description": "Chosen dropdown choice id, when the option is a dropdown."
}
},
"required": [
"option_id"
]
}
}
},
"required": [
"rental_id",
"quantity"
]
},
"minItems": 1
}
},
"required": [
"cart_id",
"items"
]
}
}get-cartAnswer
Current cart contents with prices, availability, fees, totals, and what is still missing before a quote can be created. To weigh several candidate carts against each other, use compare-carts instead of reading them one by one.
View tool JSON
{
"name": "get-cart",
"kind": "answer",
"impl": "imperative",
"description": "Current cart contents with prices, availability, fees, totals, and what is still missing before a quote can be created. To weigh several candidate carts against each other, use compare-carts instead of reading them one by one.",
"inputSchema": {
"type": "object",
"properties": {
"cart_id": {
"type": "string"
}
},
"required": [
"cart_id"
]
}
}set-cart-detailsAnswer
Set contact info, event address, delivery method, setup surface, a coupon code, or a new event window (event_date + start_time) on the cart. Returns the full cart with final tax and delivery. Moving the date re-prices the cart and re-checks availability — useful for comparing the same package on different dates before quoting.
View tool JSON
{
"name": "set-cart-details",
"kind": "answer",
"impl": "imperative",
"description": "Set contact info, event address, delivery method, setup surface, a coupon code, or a new event window (event_date + start_time) on the cart. Returns the full cart with final tax and delivery. Moving the date re-prices the cart and re-checks availability — useful for comparing the same package on different dates before quoting.",
"inputSchema": {
"type": "object",
"properties": {
"cart_id": {
"type": "string"
},
"event_date": {
"type": "string",
"description": "Move the event to a new date (YYYY-MM-DD). The cart re-prices and re-checks availability: items that conflict on the new date stay in the cart flagged has_conflict — only create-quote refuses on conflicts. Requires start_time. Useful for comparing the same package on different dates (weekend pricing can differ)."
},
"start_time": {
"type": "string",
"description": "Event start time (HH:MM, 24-hour). Required when changing event_date — ask the customer, do not guess."
},
"duration_hours": {
"type": "number",
"minimum": 0.5,
"maximum": 720,
"description": "Event duration in hours. Omit to keep the cart's CURRENT duration — that is state the customer already set, not an assumption made for them. 0 is not a way to say \"unset\" and is refused."
},
"contact": {
"type": "object",
"properties": {
"first_name": {
"type": "string"
},
"last_name": {
"type": "string"
},
"email": {
"type": "string"
},
"cellphone": {
"type": "string"
}
}
},
"event_address": {
"type": "object",
"properties": {
"street": {
"type": "string"
},
"city": {
"type": "string"
},
"state": {
"type": "string"
},
"zip": {
"type": "string"
}
}
},
"delivery_method": {
"type": "string"
},
"surface": {
"type": "string",
"description": "Setup surface at the event location — a top-level field, not part of event_address. Valid values are the surfaces list from get-business. Required before create-quote."
},
"coupon_code": {
"type": "string"
}
},
"required": [
"cart_id"
]
}
}create-quoteAction
Turn ONE cart — the package the customer explicitly chose — into a real quote with final pricing (tax, delivery, coupons). This notifies the business, enters their sales queue, and holds inventory: never call it to see a price (cart totals are already exact), and never quote more than one cart per event. Returns a quote reference and whether online booking is possible.
View tool JSON
{
"name": "create-quote",
"kind": "act",
"impl": "imperative",
"description": "Turn ONE cart — the package the customer explicitly chose — into a real quote with final pricing (tax, delivery, coupons). This notifies the business, enters their sales queue, and holds inventory: never call it to see a price (cart totals are already exact), and never quote more than one cart per event. Returns a quote reference and whether online booking is possible.",
"inputSchema": {
"type": "object",
"properties": {
"cart_id": {
"type": "string"
}
},
"required": [
"cart_id"
]
}
}create-checkout-sessionSensitive Action
Finish the transaction. Returns links for the customer: quote_url to review and book the quote (nothing is signed at the quote step), and — once the event is booked — payment_url to sign and pay, which is the same contract page contract_url points at. Before booking there is no payment link: the customer books from quote_url and pays on the page that follows. Or (when the business allows agent booking) a booked confirmation. Payment is never taken through this tool.
View tool JSON
{
"name": "create-checkout-session",
"kind": "transact",
"impl": "imperative",
"description": "Finish the transaction. Returns links for the customer: quote_url to review and book the quote (nothing is signed at the quote step), and — once the event is booked — payment_url to sign and pay, which is the same contract page contract_url points at. Before booking there is no payment link: the customer books from quote_url and pays on the page that follows. Or (when the business allows agent booking) a booked confirmation. Payment is never taken through this tool.",
"inputSchema": {
"type": "object",
"properties": {
"cart_id": {
"type": "string"
}
},
"required": [
"cart_id"
]
}
}compare-cartsAction
Price 2-4 candidate carts side-by-side: per-cart items and exact totals plus computed differences. Read-only — no quote is created, no inventory is held. Use before create-quote so the customer picks one package.
View tool JSON
{
"name": "compare-carts",
"kind": "act",
"impl": "imperative",
"description": "Price 2-4 candidate carts side-by-side: per-cart items and exact totals plus computed differences. Read-only — no quote is created, no inventory is held. Use before create-quote so the customer picks one package.",
"inputSchema": {
"type": "object",
"properties": {
"cart_ids": {
"type": "array",
"items": {
"type": "string"
},
"minItems": 2,
"maxItems": 4,
"description": "2-4 distinct cart ids (from create-cart) to compare."
}
},
"required": [
"cart_ids"
]
}
}render-rental-searchAction
Render a rental gallery from final search-rentals output. Always call search-rentals first, then pass its complete structured result as data.
View tool JSON
{
"name": "render-rental-search",
"kind": "act",
"impl": "imperative",
"description": "Render a rental gallery from final search-rentals output. Always call search-rentals first, then pass its complete structured result as data.",
"inputSchema": {
"type": "object",
"properties": {
"data": {
"type": "object",
"description": "The complete structured result returned by the required data/action tool.",
"additionalProperties": true
}
},
"required": [
"data"
]
}
}render-rentalAction
Render rental detail cards from final get-rental output. Always call get-rental first, then pass its complete structured result as data.
View tool JSON
{
"name": "render-rental",
"kind": "act",
"impl": "imperative",
"description": "Render rental detail cards from final get-rental output. Always call get-rental first, then pass its complete structured result as data.",
"inputSchema": {
"type": "object",
"properties": {
"data": {
"type": "object",
"description": "The complete structured result returned by the required data/action tool.",
"additionalProperties": true
}
},
"required": [
"data"
]
}
}render-cartAction
Render a cart from final create-cart, get-cart, add-to-cart, update-cart-item, or set-cart-details output. Call the relevant cart tool first, then pass its complete structured result as data.
View tool JSON
{
"name": "render-cart",
"kind": "act",
"impl": "imperative",
"description": "Render a cart from final create-cart, get-cart, add-to-cart, update-cart-item, or set-cart-details output. Call the relevant cart tool first, then pass its complete structured result as data.",
"inputSchema": {
"type": "object",
"properties": {
"data": {
"type": "object",
"description": "The complete structured result returned by the required data/action tool.",
"additionalProperties": true
}
},
"required": [
"data"
]
}
}render-cart-comparisonAction
Render a side-by-side comparison from final compare-carts output. Always call compare-carts first, then pass its complete structured result as data.
View tool JSON
{
"name": "render-cart-comparison",
"kind": "act",
"impl": "imperative",
"description": "Render a side-by-side comparison from final compare-carts output. Always call compare-carts first, then pass its complete structured result as data.",
"inputSchema": {
"type": "object",
"properties": {
"data": {
"type": "object",
"description": "The complete structured result returned by the required data/action tool.",
"additionalProperties": true
}
},
"required": [
"data"
]
}
}render-quoteAction
Render a quote receipt from final create-quote output. Always call create-quote first, then pass its complete structured result as data.
View tool JSON
{
"name": "render-quote",
"kind": "act",
"impl": "imperative",
"description": "Render a quote receipt from final create-quote output. Always call create-quote first, then pass its complete structured result as data.",
"inputSchema": {
"type": "object",
"properties": {
"data": {
"type": "object",
"description": "The complete structured result returned by the required data/action tool.",
"additionalProperties": true
}
},
"required": [
"data"
]
}
}search-rentalsAnswer
Search rental items by name, category or keyword — or call it with NO query to browse the catalogue grouped by category. Use the query-less form for "what can I rent?" style questions instead of guessing search terms. One call returns up to 50 items; when more remain the response carries next_cursor — pass it back as cursor to get the next page. Results are limited to items this page can actually rent, verified against the booking system on a best-effort basis.
View tool JSON
{
"name": "search-rentals",
"kind": "answer",
"impl": "imperative",
"description": "Search rental items by name, category or keyword — or call it with NO query to browse the catalogue grouped by category. Use the query-less form for \"what can I rent?\" style questions instead of guessing search terms. One call returns up to 50 items; when more remain the response carries next_cursor — pass it back as cursor to get the next page. Results are limited to items this page can actually rent, verified against the booking system on a best-effort basis.",
"inputSchema": {
"type": "object",
"properties": {
"query": {
"type": "string",
"description": "Optional. Words to match against item names, categories and descriptions. OMIT to browse the catalogue."
},
"cursor": {
"type": "string",
"description": "Optional. next_cursor from a previous browse response, to fetch the following page. Opaque — pass it back unchanged. Ignored when a query is given."
}
}
}
}