MAQAMI Travel
Server Details
search and Book hotels and flights at best prices
- Status
- Healthy
- Last Tested
- Transport
- Streamable HTTP · MCP 2025-11-25
- URL
TDQS
Scored across 89 tools
With 89 tools, many hotel search/discovery tools overlap (e.g., get_data_hotels, get_data_hotel_search, get_data_hotels_semantic_search, get_data_hotels_room_search) and multiple booking retrieval tools exist for hotels and flights. An agent could easily misselect between similar reference or booking tools, though descriptions provide some differentiation.
Names mix camelCase, snake_case, and PascalCase, and some use HTTP-method prefixes while others do not (e.g., get_bookings vs searchBookings vs getExperienceBooking). The inconsistent conventions make the set harder to scan, though most names remain descriptive.
89 tools is far beyond the typical 3-15 range and exceeds the 50+ threshold for extreme mismatch, even for a broad travel platform. The surface is bloated with many granular reference-data and search endpoints.
The set covers hotel, flight, and experience booking lifecycles including search, prebook, book, cancel, amend, rebook, ancillaries, vouchers, loyalty, and analytics. Minor gaps exist (e.g., flight booking amendment), but core workflows are well represented.
Available Tools
89 toolschargeFlightExtraChargesAInspect
Overview
Confirms a pending extra-charge batch created by /extra-charges/precharges. Captures the Stripe PaymentIntent or bills the credit line, then appends the lines to the booking.
Access
Requires Flights API access. Post-booking extra charges are not enabled by default — contact the LiteAPI support team to request access.
Idempotency
Idempotent on chargesId, mirroring POST /flights/bookings prebookId replay:
Already confirmed — HTTP 200 with
data.messageand the persisted extras (no re-capture / no duplicate credit-line billing)Concurrent confirm — HTTP 409 /
45035while another confirm for the samechargesIdholds the Redis lock; retry after the first completes
When to Use
After the customer confirmed the Stripe PaymentIntent (status
requires_capture/succeeded), or immediately forCREDITbookings
Constraints
Body only needs
chargesId+payment(charge lines are encoded inchargesId)payment.methodmust match the booking's original payment (TRANSACTION_IDorCREDIT)For Stripe,
payment.transactionIdmust be the id returned by precharges
| Name | Required | Description | Default |
|---|---|---|---|
| payment | Yes | Payment details for capturing the extra charge. method must match the booking original payment. | |
| bookingId | Yes | Flight booking identifier | |
| chargesId | Yes | Opaque token from precharges |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description explicitly states 'Idempotent on chargesId' and details replay behavior (HTTP 200 on already-confirmed, 409/45035 on concurrent confirm), but the annotations declare idempotentHint=false. This directly contradicts the structured hint and could mislead an agent into replaying the call.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The markdown headers (Overview, Access, Idempotency, When to Use, Constraints) make it easy to scan and the key purpose is front-loaded. It is somewhat verbose for a 3-parameter tool, but each section carries distinct information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a mutation tool with no output schema and 3 required nested params, the description covers access gating (support-team enablement), idempotency/replay semantics, error codes, and required vs optional fields. An agent has everything needed to invoke it correctly, aside from the annotation conflict.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is already 100%, so the baseline is 3, but the description adds real meaning beyond the schema: only chargesId + payment are needed (lines encoded in chargesId), payment.method must match the booking's original payment, and transactionId must be the id from precharges.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Confirms a pending extra-charge batch created by /extra-charges/precharges') and describes the side effects (Stripe capture, credit-line billing, appending lines to the booking). An agent can clearly distinguish it from the sibling prechargeFlightExtraCharges, which creates the batch this tool confirms.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The 'When to Use' section gives an explicit precondition (after the customer confirmed the PaymentIntent at requires_capture/succeeded, or immediately for CREDIT bookings) and the Overview names the upstream tool that produces chargesId. Alternatives and timing are fully specified.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
createExperienceBookingAInspect
Capture Stripe payment then confirm cart with experiences-api. Cart status completed maps to dispatcher PENDING_CONFIRMATION; final CONFIRMED arrives via webhook. Cart status ERROR returns 502.
Public booking responses expose partner sell in price and partner earn in commission / clientCommission. Provider retail / invoice (providerPayment) is omitted.
| Name | Required | Description | Default |
|---|---|---|---|
| billing | Yes | ||
| payment | Yes | ||
| traveler | Yes | ||
| prebookId | Yes | Dispatcher prebook id from `POST /experiences/tours/{id}/prebooks`. | |
| customTags | No | Optional bag of up to 5 user-defined key/value labels persisted with the booking. Keys must match `^[A-Z0-9_-]+$`; values are strings up to 255 characters. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the annotations it discloses non-obvious behavior: cart status `completed` maps to dispatcher `PENDING_CONFIRMATION`, final `CONFIRMED` arrives via webhook, and `ERROR` returns 502 – all essential for interpreting a non-idempotent, open-world mutation. It also explains that responses expose partner sell in `price` and earn in `commission`/`clientCommission` while `providerPayment` is omitted, which is real behavioral context not present in annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the core action and then the status/response semantics in compact sentences; every sentence carries information. The price/commission note is slightly tangential but still useful for interpreting the return value.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a mutation tool with no output schema and 40% param coverage the description supplies the crucial missing pieces: async confirmation flow, error mapping, and response field semantics. It leaves the billing/traveler payloads and the prebook-prerequisite unsaid, but the core operational picture is complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is only 40% and the description adds no parameter-level semantics for `billing`, `traveler`, or `customTags`; it only alludes to the payment step already documented by the schema's `transactionId` note. With the majority of parameters undocumented in both places, the description does not compensate for the coverage gap.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description gives a specific two-step verb sequence (capture Stripe payment, confirm cart with experiences-api) and names the concrete resource (cart/prebook). It clearly implies the post-prebook booking step, though it never names a sibling like prebookExperienceTour to differentiate explicitly.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is implied: it consumes a prebookId from the prebook endpoint and completes the booking, and it hints that CONFIRMED arrives asynchronously via webhook. But there is no explicit when-to-use vs. when-not, no stated prerequisites (e.g. must call prebookExperienceTour first), and no routing to an alternative.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delete_VoucherADestructiveInspect
Overview
Permanently remove a voucher from your system. Use with caution - deleted vouchers cannot be recovered.
When to Use
Cleanup - Remove expired or unused vouchers
Error correction - Delete vouchers created by mistake
Inventory management - Remove vouchers no longer needed
What You Get
Confirmation - Success message when voucher is deleted
Important Notes
Permanent action - Deleted vouchers cannot be restored
Usage check - Ensure vouchers aren't needed before deleting
Quick Start
Provide the voucher ID in the URL path. Returns confirmation of deletion.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Unique identifier of the voucher to be deleted |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true and readOnlyHint=false, but the description adds useful context that deletion is permanent and cannot be recovered, plus that a confirmation is returned. It does not mention authentication requirements or edge cases like a missing voucher, but it meaningfully supplements the annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The markdown structure is clear and front-loaded, but it contains redundancy across Overview, Important Notes, and Quick Start regarding permanent deletion. Several sentences restate the same caution, so it is longer than necessary for a single-parameter delete tool.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple delete operation with one documented parameter and full annotation coverage, the description is nearly complete. It tells the agent what the tool does, when to use it, and that it returns confirmation, though it could note failure behavior or prerequisites.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the id parameter is already documented. The description adds value by specifying that the voucher ID must be provided in the URL path, which goes beyond the schema and clarifies invocation.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states a specific verb and resource: 'Permanently remove a voucher from your system.' It distinguishes the destructive nature of the operation, but it does not explicitly contrast this tool with siblings like put_vouchers_id_status or get_vouchers_voucherid.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The 'When to Use' section gives three concrete contexts: cleanup, error correction, and inventory management. It lacks any 'when not to use' guidance or explicit alternatives, so it falls short of the top score.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_bookingsBRead-onlyIdempotentInspect
Overview
Get all bookings associated with your API key, with optional filtering by date ranges. Perfect for generating reports and managing your booking inventory.
When to Use
Booking reports - Generate reports of all bookings
Date range queries - Find bookings within specific date ranges
Administrative overview - View all bookings in your system
Analytics - Analyze booking patterns and trends
What You Get
Complete booking list - All bookings linked to your API key
Filtered results - Optional filtering by stay dates or booking creation dates
Booking details - Full information for each booking
Status information - Current status of each booking
Filtering Options
Stay period - Filter by check-in/check-out date range (
startDate,endDate)Booking period - Filter by when bookings were created (
bookingStartDate,bookingEndDate)Status - Filter by booking status (optional)
Quick Start
No parameters required for all bookings. Optionally provide date ranges to filter results. Returns all matching bookings with complete details.
| Name | Required | Description | Default |
|---|---|---|---|
| status | No | Status of the bookings. | |
| endDate | No | End date of the stay period. Returns bookings where the stay (check-in to check-out) overlaps with this date range. | |
| sandbox | No | Indicates if the request was made in a sandbox (test) environment. When omitted, no sandbox filter is applied and both production and sandbox bookings are returned. | |
| startDate | No | Start date of the stay period. Returns bookings where the stay (check-in to check-out) overlaps with this date range. | |
| customTags | No | Filter by customTags. Comma-separated `KEY:VALUE` pairs (e.g. `SOURCE:GOOGLE,TIER:GOLD`); all pairs are joined with AND. Keys must match `^[A-Z0-9_-]+$`, up to 5 keys, value up to 255 characters. Value matching is case-insensitive. | |
| paymentStatus | No | Filter by payment status. | |
| bookingEndDate | No | End date of the booking creation period. Only bookings that were created on or before this date will be included. | |
| bookingStartDate | No | Start date of the booking creation period. Only bookings that were created on or after this date will be included. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, openWorldHint, and destructiveHint=false, so the safety profile is fully covered and the description needn't repeat it. The description adds scoping context (results tied to your API key, optional stay vs. booking creation filters) but omits pagination, result caps, sorting, or rate-limit behavior for a potentially large listing.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded and well-organized with headers, but heavily over-formatted for a simple list tool: four sections, bulleted marketing phrasing ('Perfect for generating reports', 'Administrative overview'), and a redundant Quick Start that repeats the zero-parameter case. The signal-to-length ratio is mediocre.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Covers what the tool returns at a high level (complete booking list, full details, status) and the filter categories, which is useful since there is no output schema. However, it never addresses result volume, pagination, or ordering — material gaps for a tool that can return 'all bookings' on an account.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents all eight parameters, including the overlap semantics for startDate/endDate and the customTags syntax. The description only restates a subset (stay period, booking period, status) and omits paymentStatus, customTags, and sandbox, adding little beyond the schema — baseline 3.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Get all bookings associated with your API key') with clear scope (all bookings under the key, optional date filtering). It does not, however, differentiate itself from overlapping siblings like listBookings, searchBookings, or get_bookings_bookingid, so an agent cannot tell from the text alone which retrieval tool to pick.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The 'When to Use' section lists use cases (reports, date-range queries, administrative overview, analytics), which gives implied context for invocation. But it offers no 'when not to use' and never names an alternative, despite several sibling list/search tools that plausibly overlap. Guidance is present but does not resolve tool selection.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_bookings_bookingidARead-onlyIdempotentInspect
Overview
Get complete details for a specific booking by its booking ID. Returns all booking information including status, guest details, pricing, and cancellation policies.
When to Use
Booking details page - Display complete booking information
Status checks - Verify current booking status
Confirmation lookup - Retrieve booking confirmation details
Support queries - Look up booking information for customer service
What You Get
Complete booking details - All information about the booking
Booking status - Current status (confirmed, cancelled, etc.)
Guest information - Name, email, and contact details
Stay information - Check-in/check-out dates, hotel details
Pricing breakdown - Total cost, taxes, fees, and payment status
Cancellation policies - Terms and conditions for cancellation
Hotel confirmation - Hotel confirmation code and reference
Quick Start
Provide the bookingId in the URL path. Returns complete booking details including status and all associated information.
| Name | Required | Description | Default |
|---|---|---|---|
| timeout | No | request timeout in seconds | |
| bookingId | Yes | (Required) The unique identifier of the booking you would like to update. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, openWorldHint, and non-destructive behavior, so the safety profile is covered. With no output schema, the 'What You Get' section meaningfully discloses the return payload (status, guest info, pricing breakdown, cancellation policy, hotel confirmation code). No mention of auth requirements or behavior on an invalid/missing booking ID.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded and well-sectioned, but padded: the overview already says it returns 'status, guest details, pricing, and cancellation policies,' which the 'What You Get' bullets then restate in six lines. For a single-ID getter, the markdown is longer than the task warrants.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple read-by-ID tool with full annotation coverage, the definition covers purpose, contexts, and response contents adequately, and no output schema means return values do not need separate treatment. It omits error/not-found behavior, which is a minor gap.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the baseline is 3. The description adds only that bookingId goes in the URL path; it does not clarify the timeout parameter or the ID format. Note the schema's own bookingId description says 'booking you would like to update,' which conflicts with this read operation, but the description correctly frames it as a lookup.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource: 'Get complete details for a specific booking by its booking ID.' That distinguishes it in kind from list/search siblings like get_bookings and searchBookings, though it never explicitly names an alternative. Clear and specific, but no direct sibling differentiation.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The 'When to Use' section gives four concrete contexts (details page, status checks, confirmation lookup, support queries), which is solid situational guidance. It stops short of naming when NOT to use it or pointing to the list/search siblings for broader queries.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_bookings_guest_nationality_reportARead-onlyIdempotentInspect
Overview
Returns analytics on the source markets (guest nationality) of bookings. Compares the current period to the previous period of equal length, with per-nationality booking counts, sales in USD, average booking value, and period-over-period change.
When to Use
Source market analysis - See which nationalities drive the most bookings and sales
Period comparison - Compare current vs previous period totals and per-nationality growth
Geographic dashboards - Track performance by guest country (ISO code)
Marketing and sales planning - Identify growing or declining markets
What You Get
Period definition - Date ranges for current and previous periods
Summary - Total sales (USD), change percent/amount, and count of nationalities
Per-nationality data - For each guest nationality: booking count, total sales USD, avg booking value; current and previous period; and change (sales percent/amount, booking count change)
New markets - Nationalities with no previous-period data have
previous_period: nulland change expressed as 100% growth
Quick Start
Pass query parameters from, to, and sandbox. The API derives the previous period (same length, immediately before). Returns period metadata, summary totals, and an array of nationality-level metrics.
| Name | Required | Description | Default |
|---|---|---|---|
| to | Yes | End date of the current period YYYY-MM-DD (ISO 8601) | |
| from | Yes | Start date of the current period YYYY-MM-DD (ISO 8601) | |
| sandbox | No | Filter by environment: "true" for sandbox, "false" for production |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare read-only, idempotent, non-destructive, open-world behavior, so the bar is lower. The description still adds real context: the previous period is auto-derived as an equal-length window immediately before, and new nationalities return previous_period: null with change expressed as 100% growth — useful edge-case behavior the annotations do not convey.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Markdown headers front-load Overview, When to Use, What You Get, and Quick Start, and the content is scannable. It is longer than strictly necessary for a three-parameter read tool, with some overlap between 'What You Get' and the overview paragraph, but nothing is wasted.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
There is no output schema, and the description thoroughly covers the return shape: period metadata, summary totals, per-nationality booking/sales/average metrics, and the new-market null case. Combined with the annotations covering safety, an agent has everything needed to call and interpret this tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3, but the description adds meaning beyond the schema: it names from/to/sandbox as the query inputs and explains that the API derives the prior comparison period from them rather than requiring a separate parameter.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource: analytics on guest-nationality source markets of bookings, with period-over-period comparison. It is clear what the tool produces, but it does not differentiate itself from the very similar sibling get_bookings_source_markets_report, so an agent must guess which report to pick.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Four explicit 'When to Use' bullets give concrete scenarios (source market analysis, period comparison, geographic dashboards, marketing planning), which is well above implied usage. It stops short of an exclusion or an alternative-tool pointer, which would be needed for a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_bookings_hotels_sales_reportARead-onlyIdempotentInspect
Overview
Returns analytics on properties (hotels): per-hotel sales, buying price, profit, and profit margin. Compares the current period to the previous period of equal length. Results are ordered by current-period sales (highest first) and limited by the limit parameter.
When to Use
Property performance - See which hotels drive the most sales and profit
Period comparison - Compare current vs previous period sales, profit, and bookings per hotel
Profit analysis - Track total_buying_price_usd, total_profit_usd, and profit_margin_percent by property
Top properties dashboards - Rank hotels by sales or profit
What You Get
Period definition - Date ranges for current and previous periods
Summary - Totals for sales (USD), profit (USD), bookings, count of hotels in the result, and average profit margin percent; all with period-over-period change
Per-hotel data - For each property: hotel_id, hotel_name, city, country; current and previous period (booking_count, total_sales_usd, avg_booking_value_usd, total_buying_price_usd, total_profit_usd, profit_margin_percent); and change (sales/profit percent and amount, booking_count_change)
New properties - Hotels with no previous-period data have
previous_period: null
Quick Start
Pass query parameters from, to, sandbox, and optionally limit (default controls how many top hotels are returned). The API derives the previous period (same length, immediately before). Returns period metadata, summary totals, and an array of hotel-level metrics.
| Name | Required | Description | Default |
|---|---|---|---|
| to | Yes | End date of the current period YYYY-MM-DD (ISO 8601) | |
| from | Yes | Start date of the current period YYYY-MM-DD (ISO 8601) | |
| limit | No | Maximum number of hotels to return (ordered by current-period sales, highest first) | |
| sandbox | No | Filter by environment: "true" for sandbox, "false" for production |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly, idempotent, non-destructive, openWorld, so safety is covered. The description adds real behavioral context: automatic derivation of the previous period of equal length, ordering by current-period sales, limit-bounded output, and the null previous_period for new hotels. Does not mention rate limits or pagination beyond 'limit'.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Markdown headers (Overview, When to Use, What You Get, Quick Start) front-load purpose and usage. Content is a bit long with some overlap between Overview and Quick Start, but every section earns its place for an analytics endpoint. Slight redundancy keeps it from a 5.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
No output schema exists, yet the 'What You Get' section documents the return shape in detail (period metadata, summary totals, per-hotel fields, nulls for new properties). This compensates well for the missing output schema. It still omits guidance on limits, defaults, or authentication, so it's complete but not exhaustive.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so baseline is 3. The description goes beyond the schema by explaining that the previous period is auto-derived from from/to and that limit ranks by current-period sales, adding semantic value about how from/to and limit interact with the result set.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource: returns hotel-level sales analytics (sales, buying price, profit, margin) with period-over-period comparison. Scope is concrete and concrete metrics are named. However, it never contrasts itself against closely related siblings like post_analytics_hotels or getPriceIndexHotels, so an agent can't tell from the description alone which of these to call.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The 'When to Use' block gives implied usage (property performance, period comparison, profit analysis, dashboards) but does not name alternatives or exclusion conditions, e.g., when to prefer post_analytics_report or post_analytics_markets. Useful but not decisive for sibling selection.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_bookings_source_markets_reportARead-onlyIdempotentInspect
Overview
Returns analytics on destinations (the country where the hotel is located). Compares the current period to the previous period of equal length, with per-destination booking count, hotel count, sales in USD, average booking value, and period-over-period change.
When to Use
Destination performance - See which countries (hotel locations) drive the most bookings and sales
Period comparison - Compare current vs previous period totals and per-destination growth
Geographic dashboards - Track performance by destination country (ISO code)
Inventory and commercial planning - Identify growing or declining destinations
What You Get
Period definition - Date ranges for current and previous periods
Summary - Total sales (USD), change percent/amount, and count of destination countries
Per-destination data - For each country: booking count, hotel count, total sales USD, avg booking value; current and previous period; and change (sales percent/amount, booking count change)
New or inactive destinations - Countries with no previous-period data have
previous_period: null; destinations with no current-period activity may have zeros and negative change
Quick Start
Pass query parameters from, to, and sandbox. The API derives the previous period (same length, immediately before). Returns period metadata, summary totals, and an array of destination-level metrics.
| Name | Required | Description | Default |
|---|---|---|---|
| to | Yes | End date of the current period YYYY-MM-DD (ISO 8601) | |
| from | Yes | Start date of the current period YYYY-MM-DD (ISO 8601) | |
| sandbox | No | Filter by environment: "true" for sandbox, "false" for production |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover read-only, idempotent, non-destructive behavior, so the bar is lower, yet the description adds real substance: the previous period is auto-derived (not supplied), and new/inactive destinations appear with previous_period:null or zeroed values with negative change. That edge-case disclosure is genuinely useful. It does not discuss pagination or row limits.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Markdown headings keep it scannable and the Overview is front-loaded with the core concept. It is slightly padded - 'Quick Start' largely restates what the Overview and 'What You Get' already convey - but nothing is confusing.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description carries the return-value burden, and the 'What You Get' section enumerates period metadata, summary totals, and per-destination metrics including null handling. That is sufficient for correct invocation and interpretation; row caps and ordering are the only omissions.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so baseline is 3, but the description adds meaning beyond the schema by stating that from/to define the current period and that the API derives the matching previous period, plus noting sandbox is a query parameter. This tells the agent why there is no previous-period argument.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource in the Overview ('Returns analytics on destinations') and defines the key scope: destination = hotel country, current vs previous equal-length period. It is clearly separable from siblings like get_bookings_hotels_sales_report or get_bookings_guest_nationality_report by its destination-country focus, though it never names those siblings explicitly.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The 'When to Use' section gives four concrete scenarios (destination performance, period comparison, geographic dashboards, inventory planning), which is strong context. It stops short of explicit when-not-to-use guidance or naming the alternative report tools an agent should pick instead.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_data_chainsARead-onlyIdempotentInspect
Overview
Get all available hotel chains (e.g., Marriott, Hilton, IHG). Use chain IDs to filter hotel searches by brand.
When to Use
Chain filters - Filter hotels by chain/brand
Brand selection - Let users search for specific hotel chains
Reference data - Get chain IDs for use in search filters
What You Get
Chain list - All available hotel chains
Chain IDs - Numeric IDs for use in search filters
Chain names - Hotel chain/brand names
Quick Start
No parameters required. Returns all hotel chains with IDs. Use chain IDs in hotel search filters.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare this a safe, idempotent, open-world read, so the description's burden is reduced. It usefully adds that no parameters are required, that the full chain list is returned with numeric IDs, and the intended downstream use of those IDs — behavior the annotations cannot express, and valuable since there is no output schema.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The markdown headers make it skimmable and the key line is front-loaded, but four sections restate the same single idea (returns all chains, IDs usable in filters) with heavy repetition. For a zero-parameter reference endpoint, roughly half the text is redundant.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema and no parameters, the description must carry the return-value burden, and it does — it enumerates chain list, IDs and names explicitly. Complete enough to call correctly; only the relationship to get_data_hoteltypes is left unaddressed.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
There are zero parameters, so the baseline is 4 per the rubric. The description reinforces this with 'No parameters required,' leaving no ambiguity that this is a no-argument listing call.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The overview states a specific verb and resource — 'Get all available hotel chains' with concrete examples (Marriott, Hilton, IHG) — and ties it to chain filtering in hotel searches. It is clearly distinguishable from get_data_hotels/get_data_hotel_search, though it never explicitly differentiates itself from the near-neighbour get_data_hoteltypes, which an agent could plausibly confuse it with.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The 'When to Use' section gives three concrete scenarios (chain filters, brand selection, reference data), which is more than most sibling definitions offer. It stops short of exclusions or naming an alternative tool, so it is clear context without routing rules.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_data_citiesARead-onlyIdempotentInspect
Overview
Get a list of all cities within a specific country. Perfect for building location dropdowns and city selection interfaces.
When to Use
City dropdowns - Populate city selection lists
Location filters - Filter hotels by city
Geographic data - Get city lists for specific countries
Form autocomplete - Build city autocomplete features
What You Get
City list - All cities in the specified country
City names - Formatted city names ready for display
Quick Start
Provide the countryCode in ISO-2 format (e.g., "US", "GB"). Returns all cities in that country. Use the Get Country List endpoint to get country codes.
| Name | Required | Description | Default |
|---|---|---|---|
| timeout | No | request timeout in seconds | |
| countryCode | Yes | Country code in iso-2 format (example: SG) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, non-destructive, and openWorld, so the safety profile is covered. The description adds the ISO-2 requirement and that all cities for a country are returned, but says nothing about rate limits, result size, ordering, or error behavior.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded and skimmable via headers, but the 'What You Get' bullets ('City list', 'City names') are redundant filler for a simple list endpoint, and the use-case bullets overlap heavily. Not wasteful enough to drop below 3, but not tight either.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a one-required-parameter read-only list tool with full annotation coverage and no output schema, the description is largely sufficient: it names the input format and the companion endpoint. Missing only minor details like result ordering or volume.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% and both parameters are documented in the schema itself. The description reinforces ISO-2 format with examples ('US', 'GB') and points to the country-code endpoint, which is mildly useful but largely restates the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource: 'Get a list of all cities within a specific country.' This clearly distinguishes it from siblings like get_data_countries or get_data_places, which cover different geographic resources.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
A dedicated 'When to Use' section gives concrete contexts (dropdowns, location filters, autocomplete) and the Quick Start explicitly routes to the country list endpoint to obtain countryCode. It lacks any 'when not to use' or sibling-alternative guidance, which keeps it from a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_data_countriesARead-onlyIdempotentInspect
Overview
Get a complete list of all countries available in the system with their ISO-2 country codes. Essential for building country selection interfaces.
When to Use
Country dropdowns - Populate country selection lists
Location filters - Filter hotels or searches by country
Form inputs - Build country selection forms
Reference data - Get country codes for use in other endpoints
What You Get
Country list - All available countries
ISO-2 codes - Standard country codes (e.g., "US", "GB", "FR")
Country names - Full country names
Quick Start
No parameters required. Returns all countries with their ISO-2 codes.
| Name | Required | Description | Default |
|---|---|---|---|
| timeout | No | request timeout in seconds |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, openWorldHint and destructiveHint=false, so the safety profile is fully covered. The description adds value the annotations cannot: it discloses the exact payload shape (all countries, ISO-2 codes, full names) and that no parameters are needed, which matters since there is no output schema. It stops short of mentioning caching, rate limits, or result size.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
It is well front-loaded with the Overview first, but for a trivial no-argument lookup the content is inflated into five markdown sections. 'What You Get' and 'Quick Start' restate the same facts (country list, ISO-2 codes, no parameters) already given in the Overview, so several sentences do not earn their place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple read-only reference endpoint, the description covers purpose, use cases, returned fields, and the fact that no input is required. With annotations handling behavioral hints and no output schema to lean on, the description supplies nearly everything an agent needs; only caching/pagination-style operational details are absent, which is low impact here.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% for the single optional 'timeout' parameter, so the schema fully documents it and the baseline of 3 applies. The description's 'No parameters required' is consistent with the zero-required-parameter reality but adds nothing the schema does not already convey.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource ('Get a complete list of all countries... with their ISO-2 country codes') and names the returned data precisely. It is clear what the tool does, but it never explicitly distinguishes itself from the many sibling reference-data tools (get_data_cities, get_data_currencies, get_data_languages), so an agent must infer the boundary from the resource name alone.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The 'When to Use' section gives four concrete scenarios (dropdowns, location filters, form inputs, reference data for other endpoints), which is solid context for an agent deciding when to reach for this tool. It offers no exclusions or named alternatives, so it stops short of the explicit when-not guidance that would warrant a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_data_currenciesARead-onlyIdempotentInspect
Overview
Get all available currencies with their codes, names, and the countries where each currency is used. Perfect for building currency selection interfaces.
When to Use
Currency dropdowns - Populate currency selection lists
Price display - Show prices in different currencies
Currency conversion - Get currency information for conversion
Reference data - Get currency codes for use in booking endpoints
What You Get
Currency list - All available currencies
Currency codes - ISO currency codes (e.g., "USD", "EUR", "GBP")
Currency names - Full currency names
Country mapping - Countries where each currency is used
Quick Start
No parameters required. Returns all currencies with codes, names, and country mappings.
| Name | Required | Description | Default |
|---|---|---|---|
| timeout | No | request timeout in seconds |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, openWorldHint and destructiveHint=false, so the safety profile is fully covered elsewhere. The description adds that the call takes no required parameters and returns the full currency set, but omits pagination, caching, or list-size behavior — modest added value on top of rich annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The markdown-heavy format is bloated: the 'What You Get' bullets (currency list, codes, names, country mapping) simply restate the Overview sentence verbatim, and the Quick Start repeats it a third time. Front-loading is fine, but substantial space does not earn its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a parameterless reference lookup with no output schema, the description usefully enumerates the returned fields (ISO codes, names, country mappings), which an agent could not otherwise infer. Nothing critical is missing, though list size and ordering are unspecified.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Only one optional parameter (timeout) with 100% schema description coverage, so the schema already carries the burden. The description's 'No parameters required' is accurate about requiredness but adds no syntax or default guidance beyond what the schema provides.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Get all available currencies') with the exact payload: codes, names, and country mappings. It is distinguishable from siblings like get_data_countries and get_data_languages by resource, though it never names an adjacent tool explicitly.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The 'When to Use' section gives four concrete scenarios (dropdowns, price display, conversion, reference data for booking endpoints), which is clear context for invocation. It stops short of explicit exclusions or named alternatives (e.g., 'use get_data_countries for country data'), so it is not a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_data_facilitiesARead-onlyIdempotentInspect
Overview
Get all available hotel facilities (amenities) with multi-language translations. Use these facility IDs to filter hotel searches by amenities.
When to Use
Facility filters - Build amenity filtering in hotel searches
Facility display - Show available facilities with translated names
Multi-language support - Display facilities in user's language
Reference data - Get facility IDs for use in search filters
What You Get
Facility list - All available hotel facilities
Facility IDs - Numeric IDs for use in search filters
Multi-language names - Facility names in multiple languages
Translations - Localized facility names
Quick Start
No parameters required. Returns all facilities with IDs and multi-language translations. Use facility IDs in hotel search filters.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly, idempotent, openWorld and non-destructive, so the safety profile is covered. The description adds that it returns the full facility set with multi-language names, but discloses no pagination behavior, response size, or caching/rate-limit traits beyond that. With annotations carrying the main burden, a 3 is appropriate.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
It is front-loaded with an Overview and Quick Start, but the 'What You Get' bullets are redundant: 'Facility names in multiple languages' and 'Localized facility names' say the same thing, and multi-language support is listed twice across sections. For a zero-parameter tool this is noticeably padded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description must describe the return, and it does (facility list, numeric IDs, multi-language names). For a trivial zero-param read-only reference lookup this is essentially complete, though it omits any indication of list size or ordering.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool takes zero parameters, so parameter semantics default to baseline 4. The description correctly reinforces 'No parameters required', matching the empty schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The overview states a specific verb+resource: 'Get all available hotel facilities (amenities) with multi-language translations.' It immediately clarifies this is reference data distinct from the hotel/type/language lookups among its siblings. An agent knows exactly what resource it returns.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The 'When to Use' section gives four concrete use cases (facility filters, facility display, multi-language support, reference data). It provides clear context for invocation but names no alternatives or exclusions, so it stops short of the explicit when/when-not routing needed for a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_data_flights_airlinesARead-onlyIdempotentInspect
Overview
Retrieve a list of airlines with optional filtering by name, alliance, and active status.
When to Use
Airline directory - Build a searchable list of airlines for display or filtering
Alliance filtering - Filter airlines by alliance membership (Star Alliance, oneworld, SkyTeam)
Active airlines - Retrieve only currently operating airlines
What You Get
Full airline records including name, IATA/ICAO codes, country, alliance, and logo URL
Alliance membership for each airline
Active status to identify currently operating carriers
Filtered results based on query, alliance, and active status parameters
Quick Start
Call with no parameters to get all airlines. Use q to search by name, alliance to filter by alliance, and activeOnly=true to exclude inactive carriers.
| Name | Required | Description | Default |
|---|---|---|---|
| q | No | Search query (e.g., 'AA' or 'American') | |
| limit | No | Maximum number of results | |
| alliance | No | Filter by airline alliance | |
| activeOnly | No | Only return currently active airlines |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already establish readOnly, idempotent, openWorld and non-destructive, so the safety profile is covered. The description adds genuine behavioral context beyond that: what fields come back (name, IATA/ICAO, country, alliance, logo), that no parameters means 'all airlines', and how each filter narrows results. Pagination/limit default behavior is the one undisclosed trait.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The headers are front-loaded and scannable, but a README-style structure with four sections is heavy for a four-parameter read-only list call. 'What You Get' largely restates the Overview's filter list, so several bullets do not earn their place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema in play, the description correctly compensates by enumerating returned fields and default behavior, and it explains every filter. The only real gap is result-size/limit semantics for a list endpoint that could return the full airline directory.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% with an enum and worked example ('AA' or 'American'), so the schema carries most parameter meaning. The description's added value is modest — it maps enum values to human-readable alliance names, which is helpful but not essential given the schema already enumerates them.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The overview states a specific verb and resource ('Retrieve a list of airlines') with its filter dimensions, so an agent immediately knows what the tool returns. It does not, however, differentiate itself from the very close sibling get_data_flights_airlines_iatas / _iatacode, so the boundary must be inferred from names alone.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
A dedicated 'When to Use' section gives three concrete scenarios (directory listing, alliance filtering, active-only retrieval) and a Quick Start that tells the agent the no-parameter default. It never names or excludes the sibling airline IATA tools, so alternative-selection guidance is incomplete.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_data_flights_airlines_iatasARead-onlyIdempotentInspect
Overview
Retrieve a lightweight list of airline IATA codes with names for autocomplete and lookup purposes.
When to Use
Autocomplete dropdowns - Populate airline search inputs with a minimal list
Client-side filtering - Download the full list once and filter locally
Code validation - Build a lookup table of valid airline codes
What You Get
IATA codes for all airlines in the database
Airline names paired with each code
Active filtering available via the
activeOnlyparameter
Quick Start
Call with no parameters to get all airline IATA codes and names. Use activeOnly=true to filter out inactive airlines.
| Name | Required | Description | Default |
|---|---|---|---|
| activeOnly | No | Only return currently active airlines |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, destructiveHint=false, and openWorldHint, so the safe-read profile is fully covered by structured data. The description adds only the activeOnly filter behavior and the 'lightweight' nature of the response; it says nothing about result size, ordering, or whether the list is paginated.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded and well-organized with headings, but the formatting is disproportionate to a one-parameter read tool. The Quick Start sentence largely repeats the Overview and What You Get sections, so several lines do not earn their place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description carries the burden of describing returns, and the 'What You Get' section does name the two returned fields (IATA codes and names). It is adequate for a trivial list endpoint, though it omits response shape and size expectations.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% and the single boolean parameter is already documented in the schema. The description restates the same semantics ('Use activeOnly=true to filter out inactive airlines') without adding format or edge-case detail, so it neither helps nor hurts beyond the baseline.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The overview names a specific verb and resource: retrieve a lightweight list of airline IATA codes with names. The word 'lightweight' implicitly contrasts it with the heavier sibling get_data_flights_airlines, but that sibling is never named, so the agent must infer the distinction.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
A dedicated 'When to Use' section lists three concrete scenarios (autocomplete, client-side filtering, code validation), which is clear context. However, it never names an alternative tool or an exclusion condition, so routing among get_data_flights_airlines, get_data_iatacodes, and get_data_flights_airlines_iatas_iatacode is left to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_data_flights_airlines_iatas_iatacodeARead-onlyIdempotentInspect
Overview
Retrieve full details for a specific airline using its 2-letter IATA code.
When to Use
Airline display - Show airline name, logo, and alliance for a given IATA code
Flight result enrichment - Fetch airline details to display alongside search results
Data validation - Verify an airline code and retrieve its metadata
What You Get
Airline details including name, IATA/ICAO codes, and country
Alliance membership (Star Alliance, oneworld, SkyTeam, or Vanilla Alliance)
Logo URL for displaying the airline's logo in your UI
Active status indicating whether the airline is currently operating
Quick Start
Provide the 2-letter IATA code (e.g., AA for American Airlines) in the URL path.
| Name | Required | Description | Default |
|---|---|---|---|
| iataCode | Yes | 2-letter IATA airline code (e.g., AA) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, destructiveHint=false and openWorldHint, so the safety profile is covered. The description earns credit beyond that by enumerating the returned metadata (name, IATA/ICAO, country, alliance, logo URL, active status) — valuable given there is no output schema.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Markdown headers front-load the purpose and usage before the payload description. It is slightly heavier than needed for a one-parameter lookup, but each section (usage, return fields, quick start) carries information an agent would otherwise lack.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the 'What You Get' section correctly compensates by describing return fields, and the quick start shows the required path parameter. Nothing essential for calling or interpreting the result is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% and the single iataCode parameter is already documented as a 2-letter code with the 'AA' example. The description restates the same format guidance without adding syntax, validation, or lookup-failure semantics, so it is the expected baseline rather than an enhancement.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (Retrieve) and resource (full details for a specific airline) keyed on the 2-letter IATA code. The 'specific airline' phrasing implicitly separates it from the sibling list endpoint get_data_flights_airlines_iatas, which enumerates codes rather than fetching one.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The 'When to Use' block gives three concrete scenarios (airline display, flight result enrichment, code validation). It lacks any when-not guidance or explicit reference to the sibling list/detail tools, so an agent must infer that this is the single-record variant.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_data_flights_airportsARead-onlyIdempotentInspect
Overview
Search for airports by name, city, or IATA code using a text query. Returns matching airports for use in autocomplete and search inputs.
When to Use
Airport autocomplete - Power origin/destination search inputs with type-ahead suggestions
Airport discovery - Find airports in a city or region by name
Search validation - Look up airports before constructing a flight search request
What You Get
Matching airports ranked by relevance to the query
IATA codes for
legs[].originandlegs[].destinationonPOST /flights/ratesCity and country details for display purposes
Geographic coordinates for map-based interfaces
Quick Start
Provide a q query string (minimum 2 characters) to search by airport name, city, or code. Returns matching airports ordered by relevance.
| Name | Required | Description | Default |
|---|---|---|---|
| q | Yes | Search query (minimum 2 characters, e.g., 'JFK' or 'New York') |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare this a safe, idempotent, open-world read, so the safety profile is covered. The description goes beyond them by disclosing that results are relevance-ranked and what fields come back (IATA code, city/country, coordinates), though it says nothing about empty-result behavior, rate limits, or pagination.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Markdown headers make it scannable and the core instruction is front-loaded in the Overview and Quick Start. The 'What You Get' and 'When to Use' sections are somewhat padded for a one-parameter lookup, but each section carries usable information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description usefully describes the return contents and downstream usage (IATA codes feeding legs[].origin/destination), which is the right compensation. It omits result-limit and error handling details, but nothing critical to calling the tool correctly is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% for the single parameter, so the schema already documents the query string, its 2-character minimum, and examples. The description repeats the 2-character minimum and adds example formats, but adds no syntax or matching semantics beyond the schema – baseline 3.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource: 'Search for airports by name, city, or IATA code using a text query.' Scope (returns matching airports for autocomplete/search) is clear. It stops short of explicitly distinguishing itself from close siblings like get_data_flights_airports_iatas or get_data_iatacodes, so an agent must infer the boundary.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
A dedicated 'When to Use' section gives three concrete scenarios (autocomplete, discovery, pre-search validation), which is clear context for invocation. However, it never names an alternative tool or states when NOT to use this one, leaving the sibling-selection decision to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_data_flights_airports_iatasARead-onlyIdempotentInspect
Overview
Retrieve a lightweight list of airport IATA codes with names for autocomplete and lookup purposes.
When to Use
Autocomplete dropdowns - Populate airport search inputs with a full list of codes and names
Client-side filtering - Download the full list once and filter locally
Code validation - Build a lookup table of valid airport codes
What You Get
IATA codes for all airports in the database
Airport names paired with each code
Filtered results when the
qquery parameter is provided
Quick Start
Call with no parameters to get all airport codes and names. Use the q parameter to filter by name or code.
| Name | Required | Description | Default |
|---|---|---|---|
| q | Yes | Search query |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, destructiveHint=false, openWorldHint=true, so safety is covered. The description adds genuine context beyond that: the payload is 'lightweight', contains codes plus names, and is intended to be downloaded once and filtered client-side, implying no pagination. It still omits any statement about result size or rate limits for a full-table read.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded 'Overview' followed by clearly labelled sections; an agent can skim and act. There is mild redundancy (the code/name return content is restated in both 'What You Get' and 'Quick Start'), and the section scaffolding is heavy for a one-parameter tool.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the 'What You Get' section usefully compensates by naming the returned fields. However, it leaves the required-vs-optional parameter question ambiguous and says nothing about result volume or pagination for a full airport list, so an agent calling it correctly still has avoidable uncertainty.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3, and the description does add meaning by explaining that `q` filters by name OR code, beyond the schema's bare 'Search query'. But it also states 'Call with no parameters to get all airport codes and names' while the schema marks `q` as required and additionalProperties=false, which could push an agent into an invalid call.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource: retrieve a lightweight list of airport IATA codes paired with names. An agent immediately knows this is a bulk code/name lookup. However, it never distinguishes itself from close siblings such as get_data_flights_airports, get_data_flights_airports_iatas_iatacode, or get_data_iatacodes, so the agent must infer the boundary.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The 'When to Use' section gives three concrete scenarios (autocomplete, client-side filtering, code validation), which is clear context beyond mere implied usage. It never states when NOT to use it or names an alternative sibling. The instruction 'Call with no parameters' conflicts with the required `q`, which undercuts the guidance at invocation time.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_data_flights_airports_iatas_iatacodeARead-onlyIdempotentInspect
Overview
Retrieve detailed information for a specific airport using its 3-letter IATA code.
When to Use
Airport display - Show airport name, city, and country for a given IATA code
Flight result enrichment - Fetch airport details to display alongside origin/destination in search results
Autocomplete validation - Verify an airport code and retrieve its full details
What You Get
Airport details including name, city, country, and timezone
IATA and ICAO codes for the airport
Geographic coordinates (latitude and longitude)
Country and city information for display purposes
Quick Start
Provide the 3-letter IATA code (e.g., JFK for John F. Kennedy International) in the URL path.
| Name | Required | Description | Default |
|---|---|---|---|
| iataCode | Yes | 3-letter IATA airport code (e.g., JFK) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly, idempotent, non-destructive, open-world, so the safety profile needs no repetition. The description adds genuinely non-structured context by enumerating the returned fields (name, city, country, timezone, IATA/ICAO, coordinates) in the absence of an output schema. It omits error behavior for an unknown code and any rate limits, keeping it from a 5.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Structure is well front-loaded, but for a one-parameter lookup the four markdown sections are heavy and partly redundant: 'country and city' appears in both 'What You Get' and the following bullet, and 'Quick Start' repeats the schema's own example. Trimming one or two bullets would lose nothing.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Purpose, usage scenarios, and returned fields are all covered for this simple read-only lookup, and annotations remove the need to explain safety. Only failure modes (unknown/invalid IATA code) are unaddressed, a minor gap for a tool this simple.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% and there is a single parameter, so the schema already documents iataCode fully. The description only restates the format and adds the JFK example (also in the schema) plus a note that it goes in the URL path, adding marginal value. Baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (Retrieve) plus resource (detailed information for a specific airport) and the key (3-letter IATA code), which cleanly separates it from the sibling list endpoints get_data_flights_airports and get_data_flights_airports_iatas. An agent can pick between them without opening either schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The 'When to Use' section gives three concrete scenarios (display, flight-result enrichment, autocomplete validation), which is clear positive guidance. It stops short of an explicit when-not-to-use or naming the sibling list tool to use instead when you lack a code, so it is not a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_data_hotelBRead-onlyIdempotentInspect
Overview
Get comprehensive details about a specific hotel including descriptions, amenities, images, location, and ratings. Perfect for displaying hotel detail pages.
When to Use
Hotel detail pages - Show complete hotel information
Booking pages - Display hotel details before booking
Hotel profiles - Build rich hotel information pages
Content display - Show descriptions, amenities, and images
What You Get
Complete hotel information - Name, address, description, and ratings
Amenities list - All available facilities and services
Image gallery - Hotel photos and images
Location details - Address, coordinates, and location information
Hotel metadata - Star rating, chain information, and classifications
Quick Start
Provide the hotelId as a query parameter. Returns complete hotel details including all metadata, amenities, and images.
| Name | Required | Description | Default |
|---|---|---|---|
| hotelId | Yes | Unique ID of a hotel | |
| timeout | No | request timeout in seconds | |
| language | No | The language code, indicating in which language the results should be returned. e.g. 'fr' | |
| advancedAccessibilityOnly | No | If `true`, accessibility section will be returned |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly, idempotent, non-destructive, openWorld behavior, so the safety profile is covered. The description adds genuine value by enumerating the returned payload (amenities, images, location, ratings, chain/star metadata), which matters since no output schema exists. It does not mention error cases (e.g. unknown hotelId) or rate limits.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The markdown scaffolding is heavy and much of it is redundant: 'What You Get' largely repeats the Overview's list of descriptions/amenities/images/location/ratings, and the four 'When to Use' bullets say essentially the same thing. The signal could be conveyed in a third of the text.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description usefully compensates by listing returned fields, and it covers the required hotelId call path. However, it says nothing about the three optional parameters' effect (language, timeout, advancedAccessibilityOnly) or failure behavior, so it is adequate rather than complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents all four parameters including language, timeout, and advancedAccessibilityOnly. The description only references hotelId as a query parameter and adds no format or semantics beyond the schema, fitting the baseline of 3.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The Overview states a specific verb+resource: 'Get comprehensive details about a specific hotel.' It clearly distinguishes a by-ID detail lookup from list/search siblings like get_data_hotels and get_data_hotel_search, but it never names those siblings explicitly, leaving the differentiation to inference.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The 'When to Use' section lists four scenarios, but they are near-identical restatements ('hotel detail pages', 'hotel profiles', 'content display') rather than decision criteria. No alternative tool is named and there is no 'when not to use' guidance, so usage is only implied.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_data_hotel_askBRead-onlyIdempotentInspect
Overview
Beta Feature - Ask natural language questions about a specific hotel and get AI-powered answers based on the hotel's information.
When to Use
Hotel Q&A - Answer customer questions about hotels
Information lookup - Get specific details about amenities, services, or features
Conversational interfaces - Build chat interfaces for hotel information
Detailed inquiries - Ask about specific aspects like restaurants, parking, or amenities
What You Get
AI-generated answers - Relevant responses to your questions
Hotel-specific information - Answers based on the hotel's actual data
Natural language responses - Human-readable answers
Example Questions
"What amenities does this hotel have?"
"Is there parking available?"
"What does a meal at the restaurant look like?"
Key Features
Web search option - Enable
allowWebSearchto get additional information from the webHotel context - Answers are specific to the hotel you're asking about
Natural language - Ask questions conversationally
Quick Start
Provide the hotelId and your question. Optionally enable allowWebSearch for web-enhanced answers.
Note: This is a beta feature and may be subject to changes.
| Name | Required | Description | Default |
|---|---|---|---|
| query | Yes | The question to ask about the hotel | |
| hotelId | Yes | Unique ID of the hotel (liteAPI format) | |
| allowWebSearch | No | Whether to allow web search for additional information. Default is false. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly, idempotent, openWorld, non-destructive, so the safety profile is covered. The description adds genuinely new context (beta status subject to change, web-enhanced answers via allowWebSearch), but says nothing about answer reliability, latency, or failure modes for an AI-answer tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The markdown-heavy structure is far longer than a 3-parameter read tool warrants, with heavy redundancy ('natural language' is asserted in the overview, what-you-get, and key-features sections). The core instruction is buried in the final 'Quick Start' section.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description carries the return-value burden and does so adequately (AI-generated natural-language answers grounded in hotel data), plus example questions clarify expected input. Coverage is good for a simple read-only tool, only lacking answer-quality caveats.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so all three parameters are already documented, making 3 the baseline. The description only restates hotelId, the question, and allowWebSearch, and inconsistently refers to the question as `question` while the schema names it `query`, adding mild ambiguity rather than meaning.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The overview states a specific verb and resource: ask natural-language questions about a specific hotel and receive AI-generated answers. This is clearly distinguishable from data-listing siblings like get_data_hotel or get_data_hotels, though no sibling is named explicitly.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The 'When to Use' section lists four scenarios (Q&A, information lookup, chat interfaces, detailed inquiries), which implies usage context. However, these are largely restatements of the same idea and there is no guidance on when to prefer this tool over get_data_hotel or get_data_hotel_search, and no exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_data_hotelsBRead-onlyIdempotentInspect
Overview
Search and retrieve hotel listings based on various criteria. Get hotel metadata including names, addresses, ratings, amenities, and images for display in your application.
When to Use
Hotel listings - Display hotel search results
Location-based search - Find hotels by city, coordinates, or Place ID
Hotel discovery - Browse hotels in specific areas
Metadata retrieval - Get hotel information for display
What You Get
Hotel list - Matching hotels with complete metadata
Basic information - Names, addresses, ratings, and locations
Amenities - Available facilities and features
Images - Hotel photos for display
Identifiers - Hotel IDs for use in rate searches
Search Options
By city - Search hotels in a specific city
By coordinates - Find hotels near latitude/longitude with radius
By Place ID - Get hotels within a specific place boundary
By hotel IDs - Retrieve specific hotels by their IDs
Quick Start
Provide search criteria (city, coordinates+radius, placeId, or hotelIds). Returns matching hotels with complete metadata.
| Name | Required | Description | Default |
|---|---|---|---|
| zip | No | ZIP code of the location | |
| limit | No | Specifies the maximum number of results to return. By default, this is set to 200, even if not explicitly defined. If a higher limit is specified, the maximum allowed is 5000 results | |
| offset | No | Specifies the number of rows to skip before starting to return rows | |
| radius | No | radius in meters (min 1000m) | |
| placeId | No | Unique ID of a place retrieved from the `/data/places` endpoint. When provided, the API fetches place details and searches for hotels within a 1km radius of the place location center, or a specific hotel when the placeId refers to a property. The response includes a `place` object containing the place information used in the search. | |
| timeout | No | request timeout in seconds | |
| aiSearch | No | Search term for AI search. Uses semantic search to find hotels matching the query intent. Examples: 'Romantic getaway with Italian vibes in London near the London Eye', 'Hotels near the Eiffel tower' | |
| chainIds | No | Comma-separated list of hotel chain ids. e.g. '14675,14677' | |
| cityName | No | Name of the city | |
| hotelIds | No | Comma-separated list of hotel IDs (e.g., 'lp1897,lp1343') to fetch specific hotels by their IDs. This is a valid main query parameter that can be used instead of other search criteria. | |
| language | No | The language code, indicating in which language the results should be returned. e.g. 'fr' | |
| latitude | No | Latitude geo coordinates | |
| hotelName | No | Name of the hotel (loose match, case-insensitive, e.g. 'hilton') | |
| longitude | No | Longitude geo coordinates | |
| minRating | No | Minimum rating of the hotel. e.g. 8.6 | |
| starRating | No | Comma-separated list of star ratings. Note: star ratings have 2 allowed decimals '.0' and '.5' from 1 to 5. e.g. '3.5,4.0,5.0' | |
| countryCode | No | Country code ISO-2 code - example (SG) | |
| facilityIds | No | Comma-separated list of facilities. e.g. '1,2,3' | |
| hotelTypeIds | No | Comma-separated list of hotel types. e.g. '201,204,208' | |
| lastUpdatedAt | No | Retrieve only the hotels that have been updated since the provided date and time (using the RFC3339 format) | |
| minReviewsCount | No | Minimum number of reviews. e.g. 100 | |
| advancedAccessibilityOnly | No | If `true`, only hotels with advanced accessibility will be returned | |
| strictFacilitiesFiltering | No | If `true`, only hotels with all the specified facilities will be returned |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, openWorldHint and destructiveHint=false, so the safety profile is covered. The description adds that results are metadata-only (names, addresses, ratings, amenities, images, IDs) and notes hotel IDs feed rate searches, but says nothing about pagination behavior or result-size constraints beyond what the schema already documents.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The markdown structure is scannable, but there is heavy redundancy: 'Hotel listings', 'Metadata retrieval', 'complete metadata', and 'matching hotels with complete metadata' repeat the same point across Overview, When to Use, What You Get, and Quick Start. The content could be roughly halved without losing information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 23-parameter, zero-required search tool with no output schema, the description correctly signals that a search criterion must be supplied and sketches the return shape. However, it does not warn about the maximum limit, the default 200-result cap, or mutual exclusivity between criteria, leaving gaps an agent would hit in practice.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so every one of the 23 parameters is already documented in the schema, including limit/offset defaults, radius minimum, and placeId semantics. The description's high-level 'Search Options' map adds no syntax or format detail beyond that, so the baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The overview states a specific verb+resource ('Search and retrieve hotel listings') and enumerates the returned metadata. It is clear on its own, but it never names or differentiates itself from close siblings like get_data_hotel_search, get_data_hotels_semantic_search, or get_data_hotel, so an agent must guess which hotel-lookup tool to call.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The 'When to Use' and 'Search Options' sections restate the same idea (search by city, coords, placeId, hotelIds) four different ways rather than giving conditions that select this tool over alternatives. No exclusions or sibling routing is provided, so usage is only implied.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_data_hotel_searchBRead-onlyIdempotentInspect
Search for a hotel using a semantic text query. Returns the best-matching hotel with basic details and a relevance score.
| Name | Required | Description | Default |
|---|---|---|---|
| query | Yes | The semantic search query (e.g. 'Burj Jumeirah Dubai'). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already establish read-only, open-world, idempotent, and non-destructive behavior. The description adds the return shape—best match with basic details and a relevance score—but does not disclose auth needs, rate limits, or error behavior beyond what annotations cover.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two tight sentences, front-loaded with the tool's purpose and followed by a brief return summary. There is no wasted text.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple one-parameter read-only search tool with rich annotations and no output schema, the description adequately covers invocation and return expectations. The main omission is routing clarity against similar sibling tools.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
There is one parameter with 100% schema description coverage, and the schema already explains it with an example. The description restates that it is a semantic text query but adds no syntax, format, or constraint details beyond the structured field.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description gives a clear verb and resource: search for a hotel using a semantic text query, returning the best-matching hotel. It is specific, but it does not distinguish itself from similar siblings such as get_data_hotels_semantic_search or get_data_hotel_ask.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It implies usage when a semantic text query is available, but provides no explicit when-to-use guidance, no exclusions, and no comparison to alternatives. With many sibling hotel lookup tools, this leaves routing ambiguous.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_data_hotels_room_searchARead-onlyIdempotentInspect
Overview
Beta Feature - Search hotel rooms using visual and text-based queries. Uses image search technology to match your query against room images and find hotels with rooms that match your visual preferences, amenities, or style.
When to Use
Visual room search - Find rooms based on visual characteristics like "luxury modernist comfort" or "blue accessible bathroom"
Style-based search - Search for rooms by design style like "art deco hotel room" or "brutalist room"
Amenity-focused search - Find rooms with specific features like "twin room with a city view" or "room with a skylight"
Geographic filtering - Limit results to hotels near a specific location using coordinates or Place ID
City and country filtering - Filter results by city and/or country
What You Get
Matching hotels - Hotels grouped by hotel ID with rooms that match your query
Room details - Room name, image URL, and similarity score (rounded to 3 decimals) for each matching room
Hotel metadata - ID, name, address, city, country, and rating for each hotel
Geographic filtering - Optionally limit results to a specific area using coordinates or Place ID
City and country filters - Filter results by city and/or country code
Example Queries
"luxury modernist comfort"
"an extremely fun room or art deco hotel room"
"luxurious accessible bathroom or blue accessible bathroom with walk in shower"
"twin room with a city view"
"a room filled with paintings"
"a hotel room with a skylight"
Geographic Filtering
You can optionally limit search results to a specific geographic area:
Using coordinates: Provide
latitude,longitude, and optionallyradius(in kilometers, default: 12km)Using Place ID: Provide
placeId- the place's location will be automatically fetched and the search will use the place's viewport boundaries (or the providedradiusif viewport is unavailable)Using city/country: Provide
cityand/orcountryto filter results by location
Quick Start
Provide a query parameter describing the room you're looking for. Optionally add geographic filtering with latitude/longitude or placeId to limit results to a specific area.
Note: This is a beta feature and may be subject to changes.
| Name | Required | Description | Default |
|---|---|---|---|
| city | No | Filter results by city name. Can be used alone or together with country. | |
| limit | No | Maximum number of results to return (maps to top_k in the API) | |
| query | Yes | Search query describing the room you're looking for. Can be visual (e.g., 'luxury modernist comfort', 'blue accessible bathroom'), amenity-based (e.g., 'twin room with a city view'), or style-based (e.g., 'art deco hotel room', 'brutalist room') | |
| radius | No | Search radius in kilometers. Only used when latitude/longitude is provided, or when placeId is provided but the place does not have viewport information. When placeId is provided and viewport is available, the viewport boundaries are used instead of this radius. Default is 12km. | |
| country | No | Filter results by country code (ISO 3166-1 alpha-2 format, e.g., 'FR', 'US'). Can be used alone or together with city. | |
| placeId | No | Place ID. If provided, the search will be limited to hotels within the place's viewport boundaries (or the provided `radius` if viewport is unavailable). The place's latitude and longitude will be automatically fetched. | |
| latitude | No | Latitude coordinate for geographic filtering. Must be provided together with longitude. Ignored if placeId is provided. | |
| longitude | No | Longitude coordinate for geographic filtering. Must be provided together with latitude. Ignored if placeId is provided. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, openWorldHint, and destructiveHint=false. The description adds significant context beyond that: it identifies the feature as beta, describes the image-search technology, details the return structure (hotels grouped by ID with room details and similarity scores), and explains geographic filtering behavior including defaults and viewport precedence. This is valuable behavioral disclosure.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured with markdown headers and bullet lists, making it easy to scan. However, it contains some redundancy—'Geographic filtering' and 'City and country filtering' are listed in both 'What You Get' and separate sections—which slightly detracts from conciseness. Still, it is appropriately sized for a tool with 8 parameters and a beta caveat.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the absence of an output schema, the description thoroughly explains what the tool returns, including hotel metadata and similarity scores. It also covers all major usage scenarios and geographic filtering modes, and the annotations cover safety. The only minor gap is the lack of sibling differentiation, but the description is otherwise complete for an agent to call this tool correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already fully documents all 8 parameters. The description reinforces some parameter usage (query types, geographic filtering) but does not add syntax or constraints beyond what the schema provides. Baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb (Search) and resource (hotel rooms) with a clear scope (visual and text-based queries). It distinguishes from generic hotel search by focusing on rooms and visual matching, but does not explicitly name any sibling tools to differentiate from them, so it lacks that final level of specificity.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The 'When to Use' section lists five concrete scenarios for using this tool, providing clear context. However, it does not state when not to use it or name alternative tools like get_data_hotels_semantic_search, leaving the agent to infer selection criteria.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_data_hotels_semantic_searchARead-onlyIdempotentInspect
Overview
Beta Feature - Search hotels using natural language queries. Uses AI to understand search intent and find hotels that match the meaning, not just keywords.
When to Use
Natural language search - Let users search with phrases like "romantic getaway in London"
Intent-based matching - Find hotels matching the vibe or style, not just location
Conversational search - Support natural language hotel discovery
Semantic matching - Get hotels that semantically match the query
What You Get
Matching hotels - Hotels that semantically match your query
Semantic attributes - Tags, persona, style, location_type, and story for each hotel
Relevance scores - How well each hotel matches the query
Hotel metadata - ID, name, photos, address, city, country
Example Queries
"Romantic getaway in London with Italian vibes"
"Hotels near Paris"
"Family-friendly beachfront hotels"
Quick Start
Provide a natural language query parameter. Returns hotels with semantic matching scores and attributes.
Note: This is a beta feature and may be subject to changes.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Maximum number of results to return. Default is 3. | |
| query | Yes | Semantic search query. This can be a natural language description of what you're looking for, e.g. 'romantic getaway in london with italian vibes' | |
| min_rating | No | Minimum hotel rating to filter results. Default is 0 (no minimum rating filter). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly, idempotent, openWorld and non-destructive, so the safety profile is covered. The description adds genuinely new context: beta status with a stability caveat, and the shape of what is returned (semantic attributes, relevance scores, metadata). No auth or rate-limit notes, hence not a 5.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with a clear overview, but the markdown scaffolding is heavy and several ideas repeat: intent-based matching appears in Overview, When to Use, and Quick Start, and 'semantically match' is restated three times. Readable but not tight.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the 'What You Get' section usefully documents the return payload (hotels, semantic attributes, relevance scores, metadata), which is exactly what's needed. The beta caveat is disclosed. Only the lack of sibling disambiguation keeps it from a 5.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% and all three parameters are documented in the schema (query, limit, min_rating), so baseline 3 applies. The description reinforces the natural-language nature of query with example phrases but adds no syntax or constraint detail beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource (semantic hotel search via natural language) and clearly frames the differentiator: meaning-based matching rather than keywords. An agent can distinguish this from get_data_hotels, get_data_hotel_search, and get_data_hotels_room_search without opening schemas.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The 'When to Use' section gives clear triggers (natural language, intent-based, conversational, semantic matching) plus concrete example queries, so the agent knows the context for invoking it. However, it never explicitly routes against the nearest siblings (e.g. get_data_hotel_search or get_data_hotels), leaving the choice to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_data_hoteltypesBRead-onlyIdempotentInspect
Overview
Get all available hotel type classifications (e.g., resort, boutique, business hotel). Use type IDs to filter hotel searches.
When to Use
Type filters - Filter hotels by type in search
Type display - Show hotel type classifications
Reference data - Get hotel type IDs for filtering
What You Get
Hotel type list - All available hotel types
Type IDs - Numeric IDs for use in search filters
Type names - Hotel type classifications
Quick Start
No parameters required. Returns all hotel types with IDs. Use type IDs in hotel search filters.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, destructiveHint=false, and openWorldHint, covering the safety profile. The description adds useful context that it takes no parameters and returns all types with numeric IDs. With annotations carrying the behavioral load, this is adequate but not rich.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Four markdown sections (Overview, When to Use, What You Get, Quick Start) are used to convey one simple fact: this returns all hotel type IDs with no input. 'When to Use' and 'What You Get' substantially overlap, and the Quick Start repeats the same claim again.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a no-parameter reference-data lookup with no output schema, the description tells the agent what it returns (type IDs and names) and how to use them. Nothing critical is missing, though the repetition dilutes signal.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With zero parameters, the baseline is 4. The description correctly notes 'No parameters required,' which is all that is needed for an empty schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource: retrieving all hotel type classifications (resort, boutique, business hotel). The resource is clearly distinct from sibling reference-data tools like get_data_hotel, get_data_facilities, and get_data_chains, though it never explicitly contrasts itself with them.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The 'When to Use' section lists contexts (type filters, type display, reference data), but these three bullets essentially restate the same idea (get IDs to use in search filtering). No exclusions, prerequisites, or named alternative tools are given.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_data_iatacodesBRead-onlyIdempotentInspect
Overview
Get IATA (International Air Transport Association) airport codes with airport names, coordinates, and country information. Useful for airport-based hotel searches.
When to Use
Airport searches - Find hotels near airports
Location selection - Let users search by airport codes
Geographic data - Get airport locations and coordinates
Reference data - Get IATA codes for use in hotel searches
What You Get
Airport list - All available airports with IATA codes
Airport names - Full airport names
Coordinates - Latitude and longitude for each airport
Country codes - ISO-2 country codes for each airport
Quick Start
No parameters required. Returns all airports with IATA codes, names, coordinates, and country information.
| Name | Required | Description | Default |
|---|---|---|---|
| timeout | No | request timeout in seconds |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, openWorldHint and destructiveHint=false, so the safety profile is covered. The description adds that no parameters are needed and that the entire airport set is returned, but says nothing about response size, pagination, or caching — modest added value beyond the annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Four markdown sections for a zero-required-parameter lookup. The 'What You Get' bullets restate the Overview (coordinates, country codes, names) and the fourth 'When to Use' bullet duplicates the first, so a substantial portion of the text is redundant rather than earning its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple enum-style reference endpoint with no output schema, the description adequately conveys the returned fields (codes, names, coordinates, ISO-2 country codes) and that no input is needed. The one unresolved item is how it relates to its near-twin sibling, which matters for correct selection.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
There is a single optional timeout parameter with 100% schema description coverage, so the schema already documents it. The description says only 'No parameters required', which is consistent with required=0 but adds no semantics beyond the structured field; baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The Overview gives a specific verb and resource — fetch IATA airport codes with names, coordinates, and country data — and the 'What You Get' section enumerates the payload. However, it never distinguishes itself from the near-identical sibling get_data_flights_airports_iatas, so an agent cannot tell the two apart from the description alone.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The 'When to Use' bullets give context (airport searches, location selection, reference data), but they are generic use-case restatements rather than routing rules. With a sibling like get_data_flights_airports_iatas doing essentially the same job, the absence of any when-not or alternative guidance is a meaningful gap.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_data_languagesARead-onlyIdempotentInspect
Overview
Get all supported languages for hotel translations and content localization. Use language codes to request hotel data in specific languages.
When to Use
Language selection - Display available languages to users
Content localization - Get language codes for API requests
Multi-language support - Build language switchers in your application
Reference data - Validate language codes before making requests
What You Get
Language list - All supported and enabled languages
Language codes - ISO 639-1 codes (e.g., 'en', 'es', 'fr')
Language names - Human-readable language names in English
Quick Start
No parameters required. Returns all supported languages with codes and names. Use language codes in hotel search and detail requests.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly, idempotent, openWorld, and non-destructive, so the safety profile is covered. The description adds useful behavioral detail beyond that: no parameters are required and the result is the set of supported *and enabled* languages, implying the list is dynamic. It does not mention auth requirements, but for a public reference lookup that is minor.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded and well-sectioned, but the markdown scaffolding is heavy for a zero-argument reference lookup, and the idea that language codes feed into hotel search/detail requests is stated twice (Overview and Quick Start). It is readable but not maximally economical.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a parameterless read-only reference tool with full annotation coverage and no output schema, the description supplies everything needed: what it returns (codes and names), when to use it, and that no input is required. Nothing an agent needs to call it correctly is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
There are zero parameters, which sets the baseline at 4. The description confirms 'No parameters required' and the schema is an empty object, so there is no ambiguity to resolve and nothing further the description could add.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource: 'Get all supported languages for hotel translations and content localization', and the 'What You Get' section pins down the return content (ISO 639-1 codes, English names). It does not explicitly differentiate itself from the many sibling reference tools like get_data_countries or get_data_currencies, but the resource is unmistakably distinct.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The 'When to Use' block gives four concrete scenarios (language switchers, localization requests, reference validation, displaying options), which is clear context for invocation. It offers no exclusions or alternative-tool routing, so it stops short of a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_data_placesARead-onlyIdempotentInspect
Overview
Search for places, locations, and areas using Google Places API. Returns a list of matching places that can be used to search for hotels within specific boundaries.
Pricing: $0.01 per request
When to Use
Location autocomplete - Build location search with autocomplete suggestions
Place selection - Let users select cities, airports, or areas
Hotel search boundaries - Get Place IDs to restrict hotel searches to specific regions
Location discovery - Find places by name or description
What You Get
Place list - Multiple matching places with details
Place IDs - Unique identifiers for use in hotel searches
Location information - Names, addresses, and location types
Formatted addresses - Human-readable addresses for display
Key Features
Multiple types - Search for cities, airports, hotels, or other place types
Type filtering - Specify place types (e.g., 'locality,airport,hotel')
Smart defaults - Automatically excludes less relevant types unless specified
Relevance ordering - Results sorted by relevance using Google's ranking
Quick Start
Provide a textQuery (e.g., "Manhattan") and optionally specify type to filter results. Returns matching places with Place IDs you can use in hotel searches.
| Name | Required | Description | Default |
|---|---|---|---|
| type | No | Restricts the results to places matching the specified type(s). You can specify a single type (e.g., 'hotel') or multiple types as a comma-separated list (e.g., 'locality,airport,hotel'). Common types include: 'locality' (cities), 'airport', 'hotel', 'lodging', 'establishment', 'point_of_interest'. When multiple types are provided, results from all types are merged and ordered by relevance. | |
| clientIP | No | The IP address of the client making the request. | |
| language | No | The language code, indicating in which language the results should be returned. e.g. 'en' | |
| sessionId | No | Optional Google Places billing session ID. When provided, this autocomplete call is bundled into a session settled by a subsequent place details call, reducing billing costs. Can also be passed via the X-Places-Session-Id header (header takes priority). If omitted, the server manages a fallback session automatically. | |
| textQuery | Yes | Search query. e.g. 'Manhattan' |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly, idempotent, openWorld and non-destructive, so the safety profile is covered. The description adds genuinely new behavioral context beyond the annotations: per-request pricing ($0.01), relevance ordering via Google's ranking, and smart defaults that exclude less relevant place types unless specified.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Headers make it scannable and front-loaded, but the five-section layout is padded — 'What You Get' and 'Key Features' partly restate each other, and the Quick Start repeats the Overview. It is serviceable but not tight; several bullets could be dropped without losing information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description usefully compensates by describing return contents (place list, Place IDs, addresses, location types). It covers purpose, pricing, usage, and returns, leaving only minor gaps such as result limits/pagination behavior.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% and the schema already documents textQuery, type, language, clientIP and sessionId in detail, so the baseline is 3. The description only echoes the textQuery example and the comma-separated type syntax; its one real addition is the 'smart defaults' note about type exclusion, which is marginal beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names a specific verb and resource ('Search for places, locations, and areas using Google Places API') and states the return type (a list of matching places). It implicitly distinguishes itself from get_data_places_placeid (detail lookup by ID) by emphasizing list search and Place ID retrieval, though it never names that sibling explicitly.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The 'When to Use' section gives four concrete scenarios (autocomplete, place selection, hotel-search boundaries, location discovery), which is clear contextual guidance. It stops short of 5 because no alternatives or exclusions are named — it never says when to prefer get_data_cities or get_data_places_placeid instead.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_data_places_placeidARead-onlyIdempotentInspect
Overview
Get detailed information about a specific place using its Place ID. Returns complete place details including boundaries and location information.
Pricing: $0.01 per request
When to Use
Place details - Get full information about a selected place
Boundary information - Retrieve place boundaries for hotel searches
Location verification - Verify place details before using in searches
Display information - Show place names and addresses to users
What You Get
Complete place details - Full information about the place
Boundary data - Geographic boundaries for the place
Location information - Coordinates, address, and display name
Place metadata - Types, formatted address, and language
Quick Start
Provide the placeId in the URL path. Returns complete details for that specific place.
| Name | Required | Description | Default |
|---|---|---|---|
| placeId | Yes | Unique identifier of the place to retrieve. | |
| language | No | The language code, indicating in which language the results should be returned. e.g. 'en' | |
| sessionId | No | Optional Google Places billing session ID. Pass the same value used in the preceding autocomplete calls to settle the billing session, making those autocomplete calls free. Can also be passed via the X-Places-Session-Id header (header takes priority). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly, idempotent, non-destructive and open-world behavior, so the safety profile is covered. The description adds real value beyond that with per-request pricing ($0.01) and an inventory of returned data (boundaries, coordinates, metadata), which the annotations do not convey.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Markdown headers front-load the purpose and the pricing/session notes are easy to find. There is mild redundancy between 'Overview' and 'What You Get' (both repeat 'complete place details'), but structure is otherwise efficient.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description usefully enumerates return contents and states the pricing model, and annotations cover the safety profile. It is nearly complete, with the only gap being no note on error behavior for an invalid Place ID.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so placeId, language and sessionId are already documented in the schema. The description only restates that placeId goes in the URL path and adds nothing on the language or sessionId parameters, so the baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The opening sentence gives a specific verb and resource (get detailed information about a specific place via Place ID) and the parenthetical 'using its Place ID' implies the singular-lookup distinction from the sibling get_data_places list tool. However, it never names a sibling explicitly, so it stops short of the 5-level differentiation.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The 'When to Use' section gives four concrete scenarios (place details, boundary info, verification, display), which is clear actionable context. It does not name an alternative tool or state when this should NOT be used instead of get_data_places/search, so it misses the exclusion half of a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_data_reviewsARead-onlyIdempotentInspect
Overview
Retrieve guest reviews and ratings for a specific hotel. Display authentic feedback from previous guests to help users make informed booking decisions.
When to Use
Review display - Show guest reviews on hotel detail pages
Rating aggregation - Display average ratings and review counts
Trust building - Show authentic guest feedback
Decision support - Help users evaluate hotels before booking
What You Get
Guest reviews - Individual review text and ratings
Review dates - When each review was written
Ratings - Numerical and textual ratings
Guest feedback - Detailed comments from previous guests
Quick Start
Provide the hotelId as a query parameter. Returns all reviews for that hotel with ratings and comments.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Specifies the maximum number of results to return. By default, this is set to 200, even if not explicitly defined. If a higher limit is specified, the maximum allowed is 5000 results | |
| offset | No | Specifies the number of reviews to skip, defaults to 0 | |
| hotelId | Yes | Unique ID of a hotel | |
| timeout | No | request timeout in seconds | |
| language | No | ISO 639-1 language code (e.g., 'fr', 'es', 'de') to translate reviews using AI. If not provided, the reviews will be returned in the default language (en). When this parameter is provided, the maximum number of reviews returned is 10. | |
| getSentiment | No | If set to true, an AI sentiment analysis of the last 1000 reviews will be returned |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, destructiveHint=false, and idempotentHint=true, so the agent knows this is a safe, idempotent read. The description adds that reviews are 'authentic feedback' but doesn't cover rate limits, authentication, or the special behavior when language or getSentiment parameters are used (e.g., max 10 reviews with translation, sentiment analysis on last 1000). With annotations covering safety, this is adequate but missing key behavioral nuances.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is long and formatted with markdown headers, but much of the content (e.g., 'What You Get' list) repeats the same concept (ratings, reviews, comments) without adding new information. It is not front-loaded with the most critical invocation details; key parameter behaviors are buried in schema. Structure is clear but not maximally efficient.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a read-only tool with no output schema and full schema coverage, the description covers the basic purpose but misses important behavioral aspects: the limit default of 200, maximum of 5000, the special constraint that language parameter caps results at 10, and the getSentiment behavior. These are critical for correct invocation and are not mentioned in the description. The description is adequate but leaves gaps.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so all parameters are documented in the schema. The description only mentions hotelId as a query parameter and doesn't add meaning beyond what the schema provides. Baseline 3 is appropriate when schema does the heavy lifting.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (retrieve) and resource (guest reviews and ratings for a hotel). Clearly distinguishes from sibling tools like getExperienceTourReviews or get_data_hotel by naming the hotel guest review focus. An agent can identify this tool without ambiguity.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides clear usage contexts (review display, rating aggregation, trust building, decision support) but does not explicitly name alternatives like getExperienceTourReviews or exclude when not to use this tool. The guidance is helpful but not exhaustive.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_data_weatherARead-onlyIdempotentInspect
Overview
Get weather forecasts for specific locations. Response structure adapts based on the forecast time range (short-term vs. long-term).
When to Use
Travel planning - Show weather forecasts for destinations
Hotel pages - Display weather information on hotel detail pages
Trip preparation - Help users plan for weather conditions
Destination information - Provide weather context for locations
What You Get
Weather forecasts - Temperature, humidity, wind, precipitation
Time-based structure - Different formats for short-term (<1 week) vs. long-term forecasts
Detailed data - Atmospheric pressure, conditions, and summaries
Date-specific - Weather data for specific dates
Key Features
Adaptive structure - Response format changes based on time range
Short-term - Detailed hourly/daily data for forecasts within one week
Long-term - Daily summaries for forecasts beyond one week
Accuracy note - Forecasts beyond one week have reduced accuracy
Quick Start
Provide location coordinates (latitude, longitude) and date range. Returns weather forecasts with appropriate detail level.
| Name | Required | Description | Default |
|---|---|---|---|
| units | No | Units of measurement. Default is metric. | |
| endDate | Yes | End date in YYYY-MM-DD format. The service can provide future forecasts, but reliability significantly decreases beyond one week. | |
| latitude | Yes | Latitude of the location. | |
| longitude | Yes | Longitude of the location. | |
| startDate | Yes | Start date in YYYY-MM-DD format. The service can provide future forecasts, but reliability significantly decreases beyond one week. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already establish the safety profile (readOnly, idempotent, openWorld, non-destructive), so the description only needs to add behavioral context — and it does: the response structure adapts to the time range, and accuracy degrades significantly beyond one week. That accuracy caveat is genuinely useful operational information not carried by annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded and organized with headers, but it is padded: the adaptive short-term/long-term structure is stated three times (Overview, What You Get, Key Features) and the 'What You Get' bullets overlap heavily. Several sentences do not earn their place against the schema's own descriptions.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description carries the burden of describing returns, and it does so (temperature, humidity, wind, precipitation, pressure, conditions, summaries) plus the accuracy caveat. Coverage is solid; only pagination/response-size behavior is unaddressed, which is minor for a forecast read.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so latitude, longitude, startDate, endDate, and the units enum are all fully documented in the schema. The description merely restates coordinates and date range without adding format, boundary, or unit-selection meaning, so the baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Opens with a specific verb+resource ('Get weather forecasts for specific locations') and immediately scopes it by response-shape behavior (short-term vs long-term). No sibling tool covers weather, so no differentiation is required, and the intent is unmistakable.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The 'When to Use' section enumerates concrete invocation contexts (travel planning, hotel pages, trip preparation, destination info), which tells the agent what requests should trigger it. However, it names no alternatives and gives no exclusions, so it stops short of full when/when-not guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
getExperienceBookingARead-onlyIdempotentInspect
Poll booking status while pending confirmation or retrieve voucher after webhook confirms.
Public response omits providerPayment (provider retail/invoice).
| Name | Required | Description | Default |
|---|---|---|---|
| bookingId | Yes | Dispatcher booking ID returned from POST /experiences/bookings |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover the safety profile (readOnly, idempotent, openWorld, non-destructive). The description adds real behavioral context beyond them: it explains the polling-vs-webhook lifecycle and that the public response omits the providerPayment field. That is useful disclosure the annotations cannot convey.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short sentences, front-loaded with the primary action, no filler. Every clause carries information about when to call it or what the response contains.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
There is no output schema, so the description carries the burden of hinting at returns, which it does by mentioning the voucher and the omitted providerPayment field. Combined with the lifecycle guidance, this is close to complete for a single-parameter read tool, with only the exact response shape left implicit.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% and the single bookingId parameter is already documented as the dispatcher booking ID from POST /experiences/bookings. The description adds no parameter-level detail, so the baseline of 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb+resource: poll booking status for an experience booking, or retrieve the voucher once confirmed. It clearly identifies the resource (experience booking) and its two operational modes. It stops short of naming a sibling it is not, e.g. getExperienceTour, so it lands at 4 rather than 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It states the two conditions under which the tool is used: while the booking is pending confirmation (poll) and after the webhook confirms (retrieve voucher). That is clear usage context. It does not explicitly name an alternative tool or an exclusion, so it does not reach 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
getExperienceTourARead-onlyIdempotentInspect
Overview
Retrieve full details for a specific tour, including description, media, inclusions, pricing context, and structured itineraries when available.
When to Use
Product pages - Display a tour detail view before the user selects dates
Comparison - Show full metadata when comparing activities
Content enrichment - Fetch descriptions and images for marketing surfaces
What You Get
Complete tour profile - Title, description, duration, and highlights
Media - Images and cover assets
Practical info - Meeting points, cancellation policy, and inclusions
Structured itineraries - Ordered days/items (
itineraries) when the provider supplies them.locationsare importance-ordered tags, not itinerary order.Localized pricing - Prices in the requested currency
Quick Start
Provide the tour id in the URL path plus required language and currency query parameters.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare read-only, idempotent, open-world, non-destructive behavior. The description adds meaningful return-shape context: structured itineraries appear only when the provider supplies them, locations are importance-ordered rather than itinerary order, and pricing is localized. It does not cover auth, rate limits, or pagination, keeping it below a 5.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The markdown structure is front-loaded with an overview and scannable sections. It is somewhat longer than strictly necessary, but each section contributes useful context and there is no filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description carries the burden of explaining return values and does so across tour profile, media, practical info, itineraries, and pricing. It also covers usage and quick-start parameter guidance. Missing only edge-case or error behavior for a full 5.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has zero properties, so the baseline for no parameters is 4. The description usefully adds that the tour id goes in the URL path and that language and currency are required query parameters, though it provides no format constraints for those values.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource: retrieve full details for a specific tour. It enumerates the returned content (description, media, inclusions, pricing context, itineraries) and distinguishes the tool from search/availability siblings by framing it as the detail view before date selection.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The 'When to Use' section gives clear scenarios: product pages, comparison, content enrichment. It does not explicitly name when to avoid it or point to alternatives such as searchExperienceTours or getExperienceTourAvailability, but the intended context is well communicated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
getExperienceTourAvailabilityARead-onlyIdempotentInspect
Overview
Retrieve available dates and time slots for a specific tour so users can pick when to attend.
When to Use
Date pickers - Populate a calendar or slot selector on the tour page
Availability checks - Confirm a tour runs on the user's travel dates
Booking flow - Gate the checkout path until a valid slot is selected
What You Get
Available dates - Days the tour can be booked
Time slots - Start times per date where applicable
Capacity hints - Whether slots are still bookable
Quick Start
Provide the tour id in the URL path and the required language query parameter.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly, idempotent, openWorld, and non-destructive, so the safety profile is covered. The description usefully adds the return shape (dates, time slots, capacity hints), but says nothing about auth needs, rate limits, or pagination—the kind of context that would lift it above the annotation baseline.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Markdown headings make it skimmable and the purpose is front-loaded in the Overview. It is somewhat more formatted than a zero-parameter read tool needs, but no sentence is wasted.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description appropriately carries the burden of explaining the return (available dates, slots, capacity hints). It is nearly complete; the one gap is the undocumented relationship between the referenced id/language inputs and the empty schema.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With zero declared parameters the baseline would be 4, but the description asserts a tour 'id' path parameter and a 'required language query parameter' that the input schema (empty properties) does not declare. This mismatch between prose and schema makes the parameter story ambiguous rather than illuminating.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The Overview states a specific verb and resource: retrieve available dates and time slots for a specific tour. It's clear what the tool returns. It doesn't explicitly differentiate itself from nearby siblings like getExperienceTourBookingOptions or getExperienceTour, which is the only thing keeping it from a 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The 'When to Use' section gives three concrete scenarios (date pickers, availability checks, booking-flow gating), which is strong context. However, it names no alternatives and gives no 'when not to use' exclusions, so an agent must infer which sibling to prefer when booking options overlap.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
getExperienceTourBookingOptionsAInspect
Overview
Resolve priced booking options, time slots, and required guest inputs for a selected tour date and participant mix.
When to Use
Option/slot pickers - Show available variants and start times for a date
Live pricing - Display authoritative slot sell totals (
pricing.totals.net/priceSummary.netPrice)Checkout forms - Collect
bookingQuestionSchemabefore proceeding to payment
What You Get
Booking options -
optionId, title, andbookingQuestionSchemaTime slots -
dateTime,isAvailable, and slot-level pricing (unitNet/totalNet/totals.net/priceSummary.netPrice, plustotals.commissionwhen markup applies)Participant mapping - Uses
ticketCategorykeys from availability (e.g.adult,child)
Money semantics
Field names keep *Net from experiences-api; dispatcher marks commercial net up in place to partner sell. Use slots[].pricing.totals.net as selection.price.amount on prebook.
Quick Start
POST a body with language, currency, date (YYYY-MM-DD), and participants to /experiences/tours/{id}/booking-options. Use slot pricing.totals.net for display and checkout handoff.
Option-level price
options[].price.amount is overwritten from the lowest available slot pricing.totals.net for the requested mix (after markup). It is not the GYG catalog from-price. Checkout still uses the chosen slot pricing.totals.net.
| Name | Required | Description | Default |
|---|---|---|---|
| data | No | Dispatcher-standard envelope. Mirrors the normalized experiences-api payload: an object for single-resource responses (e.g. tour detail, availability) or an array when the provider returns a JSON array. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations declare readOnlyHint=false, openWorldHint=true, and idempotentHint=false, so safety profile is partly covered. The description adds real context beyond that: dispatcher net-to-sell markup applied in place, that `options[].price.amount` is overwritten from the lowest available slot, and an explicit warning that this is not the GYG catalog from-price. It does not cover auth needs, error behavior, or throughput limits, so it stops short of a 5.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Headings (Overview, When to Use, What You Get, Money semantics, Quick Start) front-load the key facts and make it scannable. It is longer than necessary — pricing field paths (`totals.net` / `priceSummary.netPrice`) are repeated in three separate sections — but no section is filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
There is no output schema, and the description compensates well by enumerating returned fields (optionId, title, bookingQuestionSchema, dateTime, isAvailable, slot-level pricing, commission) and their interpretation. What is left unresolved is the mismatch between the documented request body and the envelope-only input schema, plus any required-parameter or failure semantics.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema exposes only an opaque `data` envelope (100% coverage, 0 required), so the schema alone tells an agent nothing about the real payload. The description compensates by specifying the POST body contents (`language`, `currency`, `date` as YYYY-MM-DD, `participants`) and how participants map to `ticketCategory` keys. The residual gap is that it never reconciles these fields with the single `data` wrapper property.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The Overview states a specific verb and resource — 'Resolve priced booking options, time slots, and required guest inputs for a selected tour date and participant mix' — with the scope (date + participant mix) named explicitly. It is clearly distinguishable from sibling tools like searchExperienceTours (catalog discovery) and getExperienceTourAvailability (availability without pricing/options).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The 'When to Use' section names three concrete scenarios (option/slot pickers, live pricing display, checkout form collection) and the 'Quick Start' names the exact endpoint and body fields. It also routes downstream to prebook via `selection.price.amount`, so the agent knows both when to call it and what comes next.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
getExperienceTourReviewsARead-onlyIdempotentInspect
Overview
Retrieve normalized guest reviews and ratings for a specific tour.
When to Use
Review sections - Display guest feedback on tour detail pages
Trust building - Show authentic ratings before booking
Decision support - Help users evaluate tours before selecting dates
What You Get
Guest reviews - Review text, ratings, and dates
Pagination -
limitandoffsetquery parametersLocalized content - Reviews in the requested language where available
Quick Start
Provide the tour id in the URL path plus required language and currency query parameters.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, openWorldHint and destructiveHint=false, so the safety profile is covered. The description adds genuinely new behavioral context: pagination via limit/offset and language-localized content. It stops short of stating auth requirements, rate limits, or what happens when a review has no localized version.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Content is modest and the purpose is front-loaded under an Overview header, which is good. The markdown scaffolding (four headers for roughly six lines of substance) adds a little overhead, and the 'What You Get' section partly duplicates the Overview, but nothing is truly wasted.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema and an empty input schema, the description must describe both inputs and returns, and it does: review text/ratings/dates, pagination, and localization. Gaps remain around error behavior, authentication, and edge cases, but for a straightforward read tool the coverage is nearly sufficient.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema is empty (0 properties), so the description carries the full parameter burden and does so usefully by naming the path id plus required language and currency query parameters, and the limit/offset pagination pair. That is real added value, though it does not give formats, defaults, or valid ranges, and it is inconsistent with the schema it accompanies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The Overview states a specific verb and resource: 'Retrieve normalized guest reviews and ratings for a specific tour.' An agent immediately knows this returns review data scoped to one tour. It does not, however, distinguish itself from the similarly-named sibling get_data_reviews or explain the boundary with searchExperienceTours and getExperienceTour.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The 'When to Use' section gives three contexts (review sections, trust building, decision support), but these are product-display scenarios rather than agent decision criteria. There is no explicit when-not-to-use and no named alternative tool, so selection guidance remains implied rather than actionable.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
getFlightPrebookARead-onlyIdempotentInspect
Overview
Retrieve an existing flight checkout session (prebook) by ID, including any ancillary services already attached and a live catalog of remaining attachable services.
When to Use
Resume checkout — Reload prebook state after the user navigates away
Confirm attached ancillaries — Show selected seats/bags before final book
Reuse payment intent — Returns the stored Stripe
transactionId/secretKeyas-is (GET does not create or refresh a PaymentIntent)Credit balance — Optionally include a live credit-line snapshot with
includeCreditBalance=true
What You Get
Same core
FlightPrebookDatashape asPOST /flights/prebooks/ attach-services (journey, pricing, payment intent fields,servicesAttachable)booking.selectedServices/booking.bookedServiceswhen services were attachedLive
servicesAttachablefrom the provider (not persisted)Existing payment fields conserved from create/attach
Optional
creditLinewhenincludeCreditBalance=true(live remaining credit when the account can cover the prebook price)
Quick Start
Provide the prebookId returned from POST /flights/prebooks in the URL path. Optionally pass includeCreditBalance=true to include credit-line availability.
| Name | Required | Description | Default |
|---|---|---|---|
| prebookId | Yes | The unique prebook identifier | |
| includeCreditBalance | No | When true, include credit line availability in the response when the account can cover the prebook price. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover read-only, idempotent, and non-destructive behavior, but the description adds valuable context: Stripe transactionId/secretKey are returned as-is, GET does not create or refresh a PaymentIntent, servicesAttachable is live and not persisted, and creditLine is conditional on includeCreditBalance and account coverage.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The markdown is front-loaded and well-structured with scannable sections. However, the Overview and 'What You Get' sections repeat return-shape and servicesAttachable details, making it slightly verbose for a two-parameter read tool.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description still conveys the return shape, persistence semantics, payment-intent behavior, and optional creditLine behavior. Annotations cover safety, so the combination is complete enough for correct invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the schema already documents both parameters. The description adds useful meaning by saying prebookId comes from POST /flights/prebooks and clarifying that includeCreditBalance returns a live remaining-credit snapshot when the account can cover the prebook price.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb ('Retrieve') and resource ('flight checkout session (prebook)') by ID, including ancillary services and live catalog scope. It distinguishes the read-only GET from POST create/attach siblings by noting that GET does not create or refresh a PaymentIntent.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Has a dedicated 'When to Use' section naming four concrete scenarios: resume checkout, confirm attached ancillaries, reuse payment intent, and include credit balance. It also contrasts with POST behavior and explains where prebookId comes from.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_flights_bookingsARead-onlyIdempotentInspect
Overview
List confirmed flight bookings owned by the authenticated user. Supports an optional PNR + last-name lookup for retrieving a single booking.
When to Use
"My bookings" page - Display the authenticated user's confirmed flight bookings
PNR lookup - Retrieve a single booking by
airlinePnrand a passenger'slastNameBooking management - Build dashboards or list views of past and upcoming reservations
What You Get
Confirmed bookings only - Returns records persisted from the booking flow;
Full booking objects with status, journey, passengers, order reference, and pricing
Sandbox isolation - Sandbox and live bookings are scoped by the API key used
Key Features
Owner-scoped: Only returns bookings belonging to the authenticated user
PNR + last-name lookup: When both
airlinePnrandlastNameare supplied, returns a single matching booking; both are required togetherStable response shape:
datais always an array containing exactly one element with abookingsarray
Quick Start
Call with no query parameters to list all bookings for the authenticated user. To look up a specific booking, pass both airlinePnr and lastName.
| Name | Required | Description | Default |
|---|---|---|---|
| lastName | No | Passenger last name for single-booking lookup. Required together with `airlinePnr`. | |
| airlinePnr | No | Airline PNR (record locator) for single-booking lookup. Required together with `lastName`. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover the safety profile (readOnly, idempotent, non-destructive), so the description's value is in the extra constraints it discloses: confirmed bookings only, owner-scoping, sandbox/live isolation by API key, and the rule that airlinePnr and lastName are required together. Pagination behavior for a list endpoint is not addressed, which is the main remaining gap.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The heading structure is front-loaded and scannable, but for a two-parameter tool it is oversized: the PNR + last-name lookup is repeated in the Overview, When to Use, Key Features, and Quick Start sections. Several sentences restate prior content rather than earning their place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description carries the return-value burden and does so: it names the response fields (status, journey, passengers, order reference, pricing) and the exact response shape (data array with one element containing a bookings array). Combined with the scoping and lookup rules, an agent has everything needed to call it correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% and both parameters are already documented there, including the 'required together' coupling. The description restates that same coupling in prose, adding little syntactic or format detail beyond the schema, so baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The Overview states a specific verb+resource with scope: 'List confirmed flight bookings owned by the authenticated user,' plus the optional single-booking lookup. It is clear, but it never names or distinguishes itself from closely named siblings like listBookings, searchBookings, or get_bookings, so an agent must infer which list tool applies.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The 'When to Use' section gives three concrete scenarios (My bookings page, PNR lookup, booking management) and the Quick Start clarifies that no params lists all while both params retrieve one booking. It lacks explicit when-not-to-use or a comparison against the sibling list/search tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_flights_bookings_bookingidARead-onlyIdempotentInspect
Overview
Retrieve complete details of a confirmed flight booking using its unique booking ID.
When to Use
Booking confirmation page - Display full itinerary after booking completes
Booking management - Retrieve details for an existing reservation
Itinerary display - Show passengers, segments, and confirmation numbers
Status checks - Verify booking status for a given booking ID
What You Get
Complete itinerary with all flight segments and connection details
Passenger manifest with names, documents, and seat assignments
Booking status and provider confirmation reference
Pricing breakdown including taxes and fees paid
Key Features
Full booking record: Returns all data associated with the confirmed booking
Provider reference: Includes the provider-side booking confirmation number
Passenger details: Complete passenger information for all travelers
Quick Start
Provide the bookingId (returned from POST /flights/bookings) in the URL path. Returns the complete booking record.
| Name | Required | Description | Default |
|---|---|---|---|
| bookingId | Yes | The unique booking identifier |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, openWorldHint=true, and destructiveHint=false, so safety profile is covered. The description adds return content details (itinerary, passenger manifest, pricing breakdown, provider reference) not found in annotations. No auth or rate-limit info, but for a read tool with rich annotations this is adequate.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Markdown sections and bullet lists are structured but overly verbose for a single-parameter read. 'What You Get' and 'Key Features' repeat the same return content (full booking record, passenger details, provider reference), making several sentences redundant.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple read tool with rich annotations and no output schema, the description covers purpose, usage contexts, and return values adequately. Missing edge cases like invalid booking ID handling, but that is a minor gap.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% and bookingId is documented as 'the unique booking identifier'. The description adds that the ID is returned from POST /flights/bookings and should be placed in the URL path, providing useful provenance and location beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb 'retrieve' and resource 'complete details of a confirmed flight booking' using its unique booking ID. Distinguishes from sibling list tool get_flights_bookings and general get_bookings_bookingid by specifying 'flight booking'. An agent can easily tell what this tool does.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides a 'When to Use' section with four concrete scenarios (confirmation page, management, itinerary display, status checks). However, it does not explicitly name alternatives or state when not to use this tool, so routing guidance is clear but incomplete.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_flights_bookings_bookingid_cancellationsARead-onlyIdempotentInspect
Overview
Returns refund eligibility, estimated refund amounts, and penalty details for a booking without actually cancelling it. Use this before calling POST /flights/bookings/{bookingId}/cancellations to understand the financial impact of cancellation.
When to Use
Pre-cancellation review — Show the customer the potential maximum refund (not guaranteed) before they confirm cancellation
Refund estimation — Display potential maximum refund and penalty amounts in the booking management UI (refund is not granted until cancel completes)
Eligibility check — Determine whether the booking is within the void window (
isVoidable) or eligible for a partial refund (isRefundable)
What You Get
confidence— How reliable the quote is (confirmed,estimated,heuristic,unknown)isRefundable/isVoidable— Quick eligibility flagsrefund/penalty— Aggregate amounts with margin applied.refundis the potential maximum the airline may refund — not a granted/guaranteed amountpenalties[]— Itemised penalty breakdown when availabletickets[]— Per-ticket detail when availabledestination— Where refunded money goes (original_payment,agency_deposit,voucher, etc.)vouchers[]— Airline travel vouchers / credit-shells whendestinationisvoucher; omitted when absent. Distinct from LiteAPI discountvoucherCodeon prebook
Concurrent cancellation
If a cancellation was already submitted and is still awaiting provider confirmation, this endpoint returns HTTP 409 with code 49007 (CONCURRENT_OPERATION). A new quote is not available until that cancellation completes or fails.
Refund amount caveat
The refund amount on a cancellation quote is the potential maximum the airline may refund if cancellation proceeds under the quoted conditions. It is an estimate for decision-making only and is not granted — the final refund (if any) is determined when cancellation completes and may be lower or zero. The refund may arrive asynchronously once the airline determines the final amount.
Key Features
Non-destructive — Does not cancel the booking; safe to call before user confirmation
Margin-applied pricing — All amounts (including voucher
pricing.display) reflect the same margin applied at booking time
Quick Start
Provide the bookingId from POST /flights/bookings in the URL path. Every call hits the upstream provider — do not place this on a hot polling loop.
| Name | Required | Description | Default |
|---|---|---|---|
| bookingId | Yes | The unique booking identifier |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Goes well beyond the annotations: discloses the HTTP 409 / code 49007 concurrent-operation behavior, that every call hits the upstream provider (no hot polling), that refunds are potential-maximum and not granted, margin-applied pricing, and that refunds may arrive asynchronously. Annotations only cover the safety profile, so this adds substantial new operational context.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with Overview and sectioned headers, so it is easy to scan. However it is lengthy and repeats the 'potential maximum, not guaranteed' refund caveat across three separate sections, which is more redundancy than needed.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
No output schema exists, yet the description enumerates the return fields (confidence, isRefundable/isVoidable, refund/penalty, penalties[], tickets[], destination, vouchers[]) and explains the caveats around them. An agent has everything needed to call and interpret this tool correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Only one parameter with 100% schema coverage, so baseline is 3. The description adds value by specifying the origin of the value ('bookingId from POST /flights/bookings in the URL path'), which the schema's terse 'unique booking identifier' does not convey.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource (returns refund eligibility, estimated refund amounts, and penalty details for a booking) and explicitly scopes it as read-only versus the sibling POST cancellations endpoint. An agent can distinguish this quote endpoint from `post_flights_bookings_bookingid_cancellations` immediately.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly says to use this before calling `POST /flights/bookings/{bookingId}/cancellations`, and enumerates three concrete use cases (pre-cancellation review, refund estimation, eligibility check). Alternatives and the ordering condition are stated, not inferred.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_flights_bookings_bookingid_servicesARead-onlyIdempotentInspect
Overview
Retrieve the ancillary services (seats, baggage) for an existing flight booking: services that are already booked together with the live catalog of services that can still be booked.
When to Use
Post-booking upsell - Show the passenger which seats and bags they can still add after the booking was created
Booking management - Display the services already attached to the booking with the prices that were charged
Availability refresh - The bookable catalog is fetched live from the provider on every call
What You Get
groups- Bookable services grouped by category (seat, baggage) with post-margin prices and encodedserviceIdsbookedServices- Services already attached to the booking; entries booked through the API carry the exact price that was charged at attach timeexpiresAt- Validity window of the bookable catalog
Key Features
Read-only: Safe to call at any time; the catalog reflects live availability
Consistent pricing: Booked services echo the post-margin amounts the user actually paid
Quick Start
Provide the bookingId (returned from POST /flights/bookings) in the URL path.
Note: Booking additional services on an existing booking is not available yet; this endpoint currently only reports availability.
| Name | Required | Description | Default |
|---|---|---|---|
| bookingId | Yes | The unique booking identifier |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly, idempotent, openWorld and non-destructive, so the safety profile is covered. The description adds genuinely new behavioral context beyond that: the bookable catalog is fetched live from the provider on every call, and booked entries echo the exact post-margin price charged at attach time.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Well front-loaded with a one-line overview followed by scannable sections. It is somewhat long for a single-parameter read endpoint, and the 'Key Features' bullets partly restate the Overview and 'What You Get' sections (read-only, consistent pricing), which costs a point.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description carries the burden of explaining the return shape, and it does so explicitly (groups with post-margin prices and encoded serviceIds, bookedServices, expiresAt). Nothing needed to call or interpret the response is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% for the single parameter, so the baseline is 3. The description adds value by specifying that bookingId goes in the URL path and that it originates from POST /flights/bookings, which the schema alone does not say.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (retrieve) and resource (ancillary services for a flight booking) and precisely delineates scope as both already-booked services and the live bookable catalog. This distinguishes it from the closely named sibling get_flights_bookings_bookingid, which returns the booking itself rather than its service catalog.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The 'When to Use' section gives three concrete scenarios (post-booking upsell, booking management, availability refresh) that tell an agent exactly when this endpoint applies, and the closing note rules out a use case (attaching services is not yet supported). It does not name a sibling alternative to route to, which keeps it short of a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_guestsARead-onlyIdempotentInspect
Overview
Retrieve a complete list of all guests enrolled in your loyalty program with their points balance and booking history.
When to Use
Guest management - View all loyalty program members
Points administration - Check points balances across all guests
Customer support - Look up guest information quickly
Reporting - Generate lists of loyalty program participants
What You Get
Guest profiles - Name, email, phone number for each guest
Points balance - Current points and upcoming points (pending from bookings)
Booking history - List of booking IDs associated with each guest
Account metadata - Creation and update timestamps
Quick Start
No parameters required. Returns all guests with their loyalty program details.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly, idempotent, openWorld and non-destructive behavior, so the safety profile is covered. The description adds genuinely useful context beyond that by enumerating the returned payload (profiles, points balance, booking history, timestamps) in the absence of an output schema. It omits pagination/volume behavior, which keeps it from a 5.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Structure is clear and front-loaded, but it is padded for a zero-parameter list tool: the 'Quick Start' section restates what the Overview already said ('Returns all guests with their loyalty program details'), and the returned-field list is repeated in prose. Content is well organized but redundant.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple no-param read tool with no output schema, the description covers the call contract and describes return contents in enough detail for an agent to use the result. Missing volume/pagination expectations is the only notable gap.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
There are zero parameters, so the baseline is 4. The description correctly states 'No parameters required,' which matches the empty schema and removes any ambiguity about whether filtering is possible.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource ('Retrieve a complete list of all guests enrolled in your loyalty program') and scopes it with 'all guests', which implicitly distinguishes it from the singular get_guests_guestid sibling. It never names that sibling explicitly, so differentiation is inferred rather than stated.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
A dedicated 'When to Use' section lists four concrete scenarios (guest management, points administration, customer support, reporting), giving clear context for invocation. It provides no exclusions or explicit alternatives, so it stops short of a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_guests_guestidARead-onlyIdempotentInspect
Overview
Get detailed information about a specific guest by their ID, including loyalty points and booking history.
When to Use
Customer profiles - Display guest information on their account page
Points lookup - Check a specific guest's points balance
Booking history - Show a guest's past bookings
Support tickets - Quickly access guest details during support
What You Get
Complete guest profile - Personal information (name, email, phone)
Points summary - Current available points and upcoming points
Booking list - All booking IDs associated with this guest
Account status - Account creation and update information
Quick Start
Provide the guest ID in the URL path. Returns complete guest information including points and bookings.
| Name | Required | Description | Default |
|---|---|---|---|
| guestId | Yes | Numeric ID of the guest to fetch |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, openWorldHint, and destructiveHint=false, so the safety profile is covered. The description adds genuinely useful context beyond that by enumerating the returned fields (name, email, phone, available/upcoming points, booking IDs, account timestamps) in the absence of an output schema.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with a clear Overview, but the four markdown sections contain heavy redundancy: the 'What You Get' items restate the Overview, and 'Quick Start' repeats the parameter guidance already in the schema. It is structured but longer than the information content justifies.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema and a single fully-documented parameter, the description usefully fills the return-value gap by listing the profile fields, points, bookings, and account status. Annotations cover the safety semantics, so the tool is adequately specified, though sibling disambiguation is still missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% for the single guestId parameter, so the schema already documents it as a numeric ID. The description only restates 'provide the guest ID in the URL path' without adding format, range, or error semantics, so baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource: fetch a single guest by ID, plus what it returns (points, booking history, account status). However, it never distinguishes itself from the closely-named siblings get_guests_guestid_bookings, get_guests_guestid_loyalty_points, and get_guests_guestid_vouchers, which appear to expose overlapping data.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The 'When to Use' section lists scenarios (customer profiles, points lookup, booking history, support tickets) but these essentially restate the purpose rather than giving discriminating conditions. No alternatives are named and no exclusions are given, so an agent cannot tell from this text when to prefer the dedicated bookings or loyalty-points siblings over this call.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_guests_guestid_bookingsCRead-onlyIdempotentInspect
Overview
Get all loyalty transactions for a specific guest, showing points earned and cashback rates used for each booking.
When to Use
Points history - Show guests their points earning history
Transaction details - Display detailed booking transactions
Cashback tracking - Show cashback rates applied to bookings
Account statements - Generate points activity reports
What You Get
Transaction list - All loyalty transactions for the guest
Points per booking - Points earned (or deducted) for each booking
Cashback rates - Cashback percentage used for each transaction
Booking references - Booking IDs linked to each transaction
Timestamps - When each transaction occurred
Quick Start
Provide the guest ID in the URL path. Returns all loyalty transactions with points and cashback details.
| Name | Required | Description | Default |
|---|---|---|---|
| guestId | Yes | Numeric ID of the guest to fetch |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, openWorldHint and destructiveHint=false, so the safety profile is fully covered by structured data. The description adds useful return-shape context (points per booking, cashback rates, timestamps, booking references) but says nothing about pagination, result limits, or auth scope for a read that could span a guest's entire history.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The markdown scaffolding is heavily redundant: 'points history', 'cashback tracking' and 'transaction details' recur across Overview, When to Use, and What You Get, and 'What You Get' largely restates the Overview sentence. Roughly half the text could be deleted without losing information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description appropriately sketches the returned fields, which is genuinely needed. But for a guest-scoped transactional list it omits ordering, volume, and pagination behavior, and it never resolves the naming mismatch with the loyalty_points sibling, so an agent still has open questions.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
There is one parameter with 100% schema description coverage, so the schema already documents guestId fully. The description adds only the placement note ('Provide the guest ID in the URL path'), which is marginal beyond what the schema provides — baseline 3 for high coverage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb+resource ('Get all loyalty transactions for a specific guest') with concrete return content (points earned, cashback rates). However, the tool name ends in '_bookings' and a sibling 'get_guests_guestid_loyalty_points' covers nearly the same territory, yet the description never acknowledges or distinguishes itself from that sibling, leaving ambiguity about what makes this tool distinct.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The 'When to Use' bullets give plausible scenarios (points history, account statements, cashback tracking), which is better than nothing. But they are generic use cases rather than guidance about when to pick this over get_guests_guestid_loyalty_points or get_bookings_guest_nationality_report, and no exclusions or prerequisites are given.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_guests_guestid_loyalty_pointsARead-onlyIdempotentInspect
Overview
Get a guest's current available points and upcoming points (points pending from confirmed bookings).
When to Use
Points display - Show points balance on guest account pages
Points checking - Quick lookup of available points
Pending points - Display points that will be awarded after stays
Balance verification - Verify points before redemption
What You Get
Current points - Points available for immediate redemption
Upcoming points - Points that will be awarded from confirmed bookings
Quick Start
Provide the guest ID in the URL path. Returns both current and upcoming points balances.
| Name | Required | Description | Default |
|---|---|---|---|
| guestId | Yes | Numeric ID of the guest to fetch |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly, idempotent, non-destructive and open-world, so the safety profile is covered. Because there is no output schema, the 'What You Get' section adds real value by specifying the two returned balances (current and upcoming), a behavioral detail the annotations cannot convey. It omits auth requirements and error behavior for a missing guest.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The Overview is well front-loaded, but 'What You Get' verbatim repeats the current/upcoming points already stated in the Overview, and 'Quick Start' restates the single path parameter. Roughly a third of the text is redundant for a one-parameter read call.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple read tool with full annotation coverage, the description covers what it does, what it returns, and how to call it, which compensates for the absent output schema. Only error/empty-state behavior (guest without a loyalty record) is unaddressed.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With a single parameter at 100% schema description coverage, the schema already documents guestId as the numeric guest ID. The description adds only 'in the URL path', a minor transport detail, so the baseline of 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The Overview names a specific verb and resource (get a guest's current available points and upcoming pending points), which is far more precise than the tool name alone and clearly distinct from get_guests_guestid. It stops short of naming a sibling for comparison, so it lands at 4 rather than 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The 'When to Use' bullets give contexts (account pages, quick lookup, pending display, verification before redemption), but three of the four are restatements of the same read operation rather than conditions that select this tool over an alternative. No exclusions or named alternatives (e.g. the redeem endpoint) are given, so usage is only implied.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_guests_guestid_vouchersARead-onlyIdempotentInspect
Overview
Retrieve all vouchers available to a specific guest, including discount codes, validity periods, and usage limits.
When to Use
Voucher display - Show available vouchers on a guest's account page
Discount management - Check which vouchers a guest can use
Validity checking - Verify if vouchers are still active
Usage tracking - Monitor voucher usage counts
What You Get
Voucher list - All vouchers assigned to the guest
Discount details - Type (percentage/fixed), value, and currency
Validity period - Start and end dates for each voucher
Usage information - Current usage count and usage limits
Status - Active/inactive status of each voucher
Quick Start
Provide the guest ID in the URL path. Returns all vouchers available to that guest.
| Name | Required | Description | Default |
|---|---|---|---|
| guestId | Yes | Numeric ID of the guest to fetch vouchers for |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly, idempotent, non-destructive and open-world, so safety is covered structurally. The description adds genuinely useful behavioral context beyond that: the shape of returned vouchers (discount type/value/currency, validity dates, usage counts, active status) and the fact that it returns ALL vouchers for the guest.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Heavily structured with markdown headers and front-loaded purpose, so an agent can skim efficiently. It is a little padded ('Quick Start' largely restates the purpose), but every section is short and each earns most of its place since no output schema exists.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema and a single trivially-documented parameter, the description compensates well by enumerating the return fields and status. Nothing critical is missing for a safe read-only list call; only sibling routing/all-vouchers-vs-filtered nuance is absent.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Only one parameter exists and schema coverage is 100%, so the schema already defines guestId fully. The description adds only a minor note ('provide the guest ID in the URL path'), which is baseline-level value; the 3 baseline is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb+resource ('Retrieve all vouchers available to a specific guest') with clear scoping. It is readily distinguishable from the sibling get_vouchers (all vouchers) and get_vouchers_voucherid (single voucher), since it is anchored to a guest.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The 'When to Use' section gives four concrete scenarios (display, discount management, validity checking, usage tracking), which is well above implicit guidance. However, it names no alternatives or exclusions, so it falls short of the explicit when-not/routing-to-sibling standard.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
getHotelTaxSchemaARead-onlyIdempotentInspect
Overview
Returns the tax schema of a hotel as normalized static data, independent of the supply provider the rules were learned from. Each entry describes one tax or fee: whether it is already included in the room rate, whether it is a percentage of the rate or a fixed amount, and how fixed amounts scale (per adult and/or per night).
When to Use
Price transparency - Show guests which taxes and fees apply at a property
Amount-due-at-property estimates - Excluded taxes are typically collected at the hotel
Tax auditing - Compare supplier-declared taxes against the reference schema
Notes
Fixed amounts are expressed in USD
Percentage rates apply to the room rate (e.g. 13.5 means 13.5%)
The schema is learned by an offline pipeline; hotels without learned data return 404
| Name | Required | Description | Default |
|---|---|---|---|
| hotelId | Yes | Unique identifier of the hotel, in 'lp' format or numeric. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly, idempotent, openWorld and non-destructive, so safety is covered. The description still adds real behavioral value beyond that: fixed amounts are USD, percentages apply to the room rate (13.5 = 13.5%), and the schema is produced by an offline pipeline, so hotels without learned data return 404.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded Overview followed by tightly scoped sections; each bullet earns its place. It is slightly longer than strictly necessary for a one-parameter read tool, but there is no filler or repetition.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description carries the burden of describing the return shape and does so: each entry states inclusion in the rate, percentage vs fixed, and fixed-amount scaling. It also discloses the 404 case. Missing only a full top-level response envelope description.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% for the single hotelId parameter, and the schema already documents the 'lp' or numeric identifier format. The description never mentions hotelId, so it adds nothing beyond what the structured field provides — baseline 3.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Opens with a specific verb + resource ('Returns the tax schema of a hotel') and immediately distinguishes the payload as normalized, provider-independent static data. That normalization framing is enough to separate it from sibling catalog tools like get_data_hotel without opening either schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The 'When to Use' section gives three concrete scenarios (price transparency, amount-due-at-property estimates, tax auditing) that make the invocation context clear. It does not name alternatives or state when not to use it, so it stops short of the top band.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_loyaltiesARead-onlyIdempotentInspect
Overview
Retrieve your current loyalty program configuration, including whether it's active and what cashback rate is set.
When to Use
Settings display - Show current program configuration in admin panels
Status checks - Verify if the loyalty program is enabled
Rate verification - Check current cashback rates
Configuration review - Review program settings before making changes
What You Get
Program status - Whether the program is enabled or disabled
Cashback rate - Current percentage guests earn
Currency - Cashback currency setting
Quick Start
No parameters required. Returns current loyalty program settings.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, openWorldHint, and destructiveHint=false, so the safety profile is covered. The description adds genuine value by enumerating the returned fields (program status, cashback rate, currency), though it says nothing about auth requirements or failure modes.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Headers make it scannable and front-loaded, but the content is redundant for a no-argument getter: the Overview, the 'What You Get' list, and the Quick Start all restate that it returns program status and cashback rate. It is longer than the operation warrants.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description carries the burden of describing return values and does so adequately by naming the three key fields. For a trivial zero-param read, this is sufficient, though it could note that config may be absent/disabled rather than just 'enabled or disabled'.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool takes no parameters and the description correctly states 'No parameters required', so there is nothing further to disambiguate. Baseline for a zero-parameter tool applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Retrieve your current loyalty program configuration') and immediately scopes it to active status and cashback rate. An agent can clearly distinguish this read tool from its write counterpart put_loyalties.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The 'When to Use' section gives four concrete scenarios (settings display, status checks, rate verification, configuration review) and hints at sequencing before changes. It stops short of explicitly naming put_loyalties as the mutation alternative, so it is context-rich but not a full when/when-not routing rule.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_prebooks_prebookidARead-onlyIdempotentInspect
Overview
Retrieve details of an existing prebook session by its ID. Use this to fetch prebook information without creating a new session.
When to Use
Session recovery - Retrieve prebook details if you've stored the prebookId
Status checks - Verify prebook session details before completing booking
Payment integration - Get prebook data needed for payment processing
Credit balance - Optionally include updated credit balance information
What You Get
Complete prebook data - All information from the prebook session
Rate details - Pricing, room types, and availability
Terms and conditions - Cancellation policies and booking terms
Credit balance - Optional updated credit balance (if requested)
Quick Start
Provide the prebookId in the URL path. Optionally include includeCreditBalance query parameter to get updated credit information.
| Name | Required | Description | Default |
|---|---|---|---|
| prebookId | Yes | (Required) The unique identifier of the prebook session. | |
| includeCreditBalance | No | Whether to include updated credit balance information with the prebook. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, and destructiveHint=false, so safety is covered; the description adds that the call returns complete prebook data, rate details, terms, and an optional credit balance. It omits auth/permission requirements and rate-limit behavior, but with annotations carrying the safety profile this is a solid contribution.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The headers are front-loaded and scannable, but the 'What You Get' list is padded with low-information items ('Complete prebook data - All information from the prebook session') and overlaps the Overview. Roughly half the content is genuinely load-bearing.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, describing the returned prebook/rate/terms data is genuinely necessary and is provided. Combined with 100% schema coverage and rich read-only annotations, an agent has enough to invoke this correctly; only auth/permission context is absent.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so both parameters are already documented. The description adds only the mechanical detail that prebookId is a URL path parameter and includeCreditBalance an optional query parameter — useful framing, but no added semantics about identifier format or what value to pass. Baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The Overview states a specific verb and resource: 'Retrieve details of an existing prebook session by its ID,' and contrasts it with session creation ('without creating a new session'), which separates it from the prebook-creating siblings like post_rates_prebook. It stops short of naming a specific sibling it competes with, so it falls just short of a 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The 'When to Use' section gives four concrete scenarios (session recovery, status checks, payment integration, credit balance) that tell the agent the right contexts to reach for this tool. It gives no explicit when-not or named alternative, so it is clear context without exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
getPriceIndexCityARead-onlyIdempotentInspect
Overview
Retrieve aggregated historical price index data for all hotels in a specific city. Returns average per-night prices aggregated by calendar day across all hotels in the city, providing city-level pricing trends.
⚠️ Beta Feature: This endpoint is currently in beta. The API structure and behavior may change in future versions.
Pricing: $0.05 per request
Rate Limiting: This endpoint is rate-limited to 10 requests per minute for both sandbox and production API keys. Exceeding this limit will result in a 429 Too Many Requests response.
When to Use
City-level price analysis - Analyze average pricing trends for an entire city
Market research - Compare pricing across different cities
Destination pricing - Get aggregated pricing data for a destination
City pricing dashboards - Build visualizations of city-level price trends
What You Get
City-level aggregation - Average prices aggregated across all hotels in the city (up to 1,000 hotels)
Per-night prices - Average price per night for each calendar day
Daily aggregation - One entry per day with aggregated pricing data
Future dates only - Only returns data for future check-in dates (defaults to today onwards)
Key Features
Automatic hotel discovery - Automatically finds hotels in the specified city (up to 1,000)
City-level aggregation - Prices are averaged across all hotels in the city, not per hotel
Per-night pricing - Prices are normalized to per-night rates
Future-focused - Only queries check-in dates in the future by default
Flexible date ranges - Optional date filtering with sensible defaults
Parameters
countryCode(required): ISO-2 country code (e.g., 'US', 'GB', 'FR')cityName(required): City name (case-insensitive)fromDate(optional): Start date in YYYY-MM-DD format. Defaults to today.toDate(optional): End date in YYYY-MM-DD format. Defaults to 1 year from today.
| Name | Required | Description | Default |
|---|---|---|---|
| toDate | No | End date for the price index query in YYYY-MM-DD format. Defaults to 1 year from today if not provided. | |
| cityName | Yes | City name (case-insensitive) | |
| fromDate | No | Start date for the price index query in YYYY-MM-DD format. Defaults to today if not provided. Only future check-in dates are queried. | |
| countryCode | Yes | ISO-2 country code (e.g., 'US', 'GB', 'FR') |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover the safety profile (readOnly, idempotent, non-destructive, open-world), and the description layers on substantial extra behavior: beta instability warning, $0.05 per-request pricing, a 10 req/min rate limit with the resulting 429 response, the 1,000-hotel aggregation cap, and the future-check-in-dates-only constraint. This is exactly the kind of operational context annotations cannot express.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded and well-headed, but the content is padded: city-level aggregation, per-night pricing, and future-dates-only are each stated in both 'What You Get' and 'Key Features', so a meaningful share of the text is redundant rather than earning its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description carries the return-value burden and does so well: it specifies averaged per-night prices, one entry per calendar day, aggregation across up to 1,000 hotels, and future-only dates. Combined with cost and rate-limit disclosure, an agent has everything needed to call and interpret it.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so all four parameters (including defaults and format) are already documented in the schema. The description's 'Parameters' section largely restates that, adding only the 'only future check-in dates are queried' nuance, so the baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Retrieve aggregated historical price index data for all hotels in a specific city') and explicitly scopes it as city-level aggregation 'not per hotel', which distinguishes it from the sibling getPriceIndexHotels without requiring the schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The 'When to Use' section gives four concrete scenarios (city-level analysis, market research, destination pricing, dashboards), which is clear positive context. However, it never names the obvious alternative getPriceIndexHotels or states when this tool should NOT be used instead, so it stops short of full when/when-not guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
getPriceIndexHotelsARead-onlyIdempotentInspect
Overview
Retrieve historical price index data for a list of hotels. Returns average per-night prices aggregated by calendar day, allowing you to analyze pricing trends and patterns.
⚠️ Beta Feature: This endpoint is currently in beta. The API structure and behavior may change in future versions.
Pricing: $0.05 per request
Rate Limiting: This endpoint is rate-limited to 10 requests per minute for both sandbox and production API keys. Exceeding this limit will result in a 429 Too Many Requests response.
When to Use
Price trend analysis - Analyze how hotel prices change over time
Price forecasting - Use historical data to predict future pricing
Market research - Compare pricing across multiple hotels
Pricing dashboards - Build visualizations of hotel price trends
What You Get
Per-night prices - Average price per night for each calendar day
Daily aggregation - One entry per day with aggregated pricing data
Multiple hotels - Query up to 50 hotels in a single request
Future dates only - Only returns data for future check-in dates (defaults to today onwards)
Key Features
Per-night pricing - Prices are normalized to per-night rates regardless of stay duration
Daily aggregation - Each day has a single entry with the average per-night price across all stays that include that day
Future-focused - Only queries check-in dates in the future by default
Flexible date ranges - Optional date filtering with sensible defaults
Hotel limit - Maximum 50 hotel IDs per request
Parameters
hotelIds(required): Comma-separated list of hotel IDs. Maximum 50 hotel IDs allowed.fromDate(optional): Start date in YYYY-MM-DD format. Defaults to today.toDate(optional): End date in YYYY-MM-DD format. Defaults to 1 year from today.
| Name | Required | Description | Default |
|---|---|---|---|
| toDate | No | End date for the price index query in YYYY-MM-DD format. Defaults to 1 year from today if not provided. | |
| fromDate | No | Start date for the price index query in YYYY-MM-DD format. Defaults to today if not provided. Only future check-in dates are queried. | |
| hotelIds | Yes | Comma-separated list of hotel IDs to query price index data for. Maximum 50 hotel IDs allowed per request. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already carry the safety profile (readOnly, idempotent, non-destructive), and the description adds substantial context beyond them: beta instability warning, $0.05 per-request pricing, a 10 req/min rate limit with the exact 429 failure mode, and the 50-hotel cap. This is exactly the behavioral detail annotations cannot convey.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with an overview and clearly sectioned, but there is real duplication: 'per-night prices,' 'daily aggregation,' and 'multiple hotels' appear in both 'What You Get' and 'Key Features,' and multiple hotels is repeated again under parameters. Trimming the redundant sections would improve density.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
No output schema exists, so the description has to explain return values, and it does via 'What You Get' (per-night price per calendar day, one entry per day, aggregated). Combined with rate limits, beta status, and defaults, an agent has everything needed to call and interpret this correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so all three parameters are already documented in the schema. The description restates them with the same detail (YYYY-MM-DD, defaults, 50-hotel max) and adds only the 'future check-in dates only' nuance, which is already in the schema. Baseline 3 is appropriate here.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource: 'Retrieve historical price index data for a list of hotels,' and immediately scopes it to per-night averages aggregated by calendar day. This is clearly distinct from the sibling getPriceIndexCity by being hotel-list scoped rather than city scoped.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The 'When to Use' bullets describe scenarios (trend analysis, forecasting, market research) rather than conditions that select this tool over an alternative. It never points to getPriceIndexCity as the city-level counterpart, leaving the agent to infer routing.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
getPublicPriceARead-onlyIdempotentInspect
Overview
Retrieve cached public price data for a specific hotel and occupancy. This endpoint returns pricing information sourced from public booking platforms (e.g., Booking.com, Expedia) that has been pre-fetched and cached. It applies occupancy canonicalization automatically, so callers don't need to replicate that logic.
⚠️ Beta Feature: This endpoint is currently in beta. The API structure and behavior may change in future versions.
Rate Limiting: This endpoint is rate-limited to 10 requests per minute for both sandbox and production API keys. Exceeding this limit will result in a 429 Too Many Requests response.
When to Use
Price comparison - Compare your negotiated rates against publicly available prices
Rate validation - Verify that your offered rates are competitive before displaying to end users
Market intelligence - Understand public pricing trends for specific hotels and dates
What You Get
amount - The best (lowest) cached public price for the stay in the specified currency
nightlyAmount - The best (lowest) nightly public price
currency - Currency code (USD)
provider - Normalized provider identifier for the best offer (e.g.,
cheaptickets)rawObservedText - Raw observed price text from the source
offers - Public price offers from multiple booking providers
fetchedAt - When the price was last retrieved from the source
expiresAt - When this cached price expires and should no longer be used
Key Features
Occupancy-specific - Prices are stored per occupancy configuration; query params must match write-time occupancy
Negative cache aware - Returns 404 for both cache misses and negative cache entries (hotels with no public price found)
Low latency - Direct cache lookup, no upstream API calls
Parameters
hotelId(required): The liteAPI hotel ID (e.g.,lpec902)checkin(required): Check-in date in YYYY-MM-DD formatcheckout(required): Check-out date in YYYY-MM-DD formatadults(required): Number of adult guestschildrenAges(optional): Comma-separated ages of children (e.g.,5,8)currency(optional): Currency code; if present, must beUSD
| Name | Required | Description | Default |
|---|---|---|---|
| adults | Yes | Number of adult guests | |
| checkin | Yes | Check-in date in YYYY-MM-DD format | |
| hotelId | Yes | The liteAPI hotel ID | |
| checkout | Yes | Check-out date in YYYY-MM-DD format | |
| currency | No | Currency code. If present, must be USD. | |
| childrenAges | No | Comma-separated ages of children (e.g., '5,8'). Occupancy params must match those used at write time. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover safety (readOnly, idempotent, non-destructive), and the description still adds substantial behavior: a 10 req/min rate limit with a 429 outcome, beta status with possible API changes, 404 for both cache misses and negative-cache entries, automatic occupancy canonicalization, and a no-upstream-call low-latency guarantee. This is exactly the extra context annotations cannot express.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Well front-loaded with headers, and the warning/rate-limit callouts are appropriately prominent. It is long and the 'Parameters' section largely restates the schema, which is the only redundancy; overall each block earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the 'What You Get' block documents the return fields (amount, nightlyAmount, provider, fetchedAt, expiresAt, offers), so the agent knows both what it receives and when the data expires. Combined with the rate-limit, beta, and 404 semantics, nothing needed to invoke this correctly is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3, but the description adds real meaning beyond the schema: a concrete hotelId example (`lpec902`), the constraint that query params must match write-time occupancy, the `5,8` childrenAges form, and the USD-only currency restriction. These are operational constraints not present in the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource ('Retrieve cached public price data for a specific hotel and occupancy') and scopes it to pre-fetched public booking-platform data. This distinguishes it from live-rate siblings such as post_hotels_rates and post_rates_prebook without the agent opening a schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It provides three concrete use cases (price comparison, rate validation, market intelligence) that clearly frame when this tool applies. However, it never names an alternative tool or an explicit when-not-to-use condition, so routing against siblings like post_hotels_min_rates is still left to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_supply_customizationARead-onlyIdempotentInspect
Overview
Get your current supply customization preferences, including advanced accessibility options for hotel searches.
When to Use
Settings display - Show current customization settings in admin panels
Configuration checks - Verify your current preferences
Feature verification - Check if advanced accessibility is enabled
What You Get
Current settings - Your active supply customization configuration
Advanced accessibility flag - Whether advanced accessibility options are enabled
Quick Start
No parameters required. Returns your current supply customization settings.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly, idempotent, openWorld and non-destructive. Since there is no output schema, the description adds real value by disclosing the return contents (current settings plus an advanced-accessibility flag). It does not mention auth or permission requirements.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The content is front-loaded, but four markdown sections are used to convey a single fact. The three 'When to Use' bullets (settings display, configuration checks, feature verification) restate essentially the same scenario, adding bulk without new information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema and no parameters, the description correctly compensates by naming the returned values. For a simple read-only getter this is nearly sufficient; only auth/permission context is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Zero parameters, and the description explicitly states 'No parameters required,' which matches the empty schema. Baseline 4 applies for a parameterless tool.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (Get) and resource (supply customization preferences), and the name contrasts cleanly with the write sibling put_supply_customization. It is clear what the tool returns, though it never explicitly names its write counterpart.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The 'When to Use' section gives three concrete contexts (settings display, configuration checks, feature verification). There is no explicit 'when not to use' or named alternative, but the conditions for invoking it are clear enough.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_vouchersBRead-onlyIdempotentInspect
Overview
Get a paginated list of all vouchers in your system, including active and inactive vouchers with their current status.
When to Use
Voucher management - View all vouchers in your admin panel
Inventory overview - See all available discount codes
Status monitoring - Check which vouchers are active
Reporting - Generate lists of all vouchers for analysis
What You Get
Complete voucher list - All vouchers with full details
Discount information - Type, value, and currency for each voucher
Validity status - Start/end dates and current status
Usage tracking - Remaining uses for each voucher
Pagination
Results are paginated. Use the page and limit query parameters to navigate through the list, e.g. /vouchers?page=5&limit=10.
Quick Start
Optionally provide page and limit query parameters. Returns a paginated list of vouchers with complete details including codes, discounts, validity, and usage counts.
| Name | Required | Description | Default |
|---|---|---|---|
| page | No | Page number to retrieve (1-based). | |
| limit | No | Number of vouchers to return per page. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, openWorldHint, and destructiveHint=false, so the read-only safety profile is fully covered by structured data. The description adds pagination behavior via page/limit and enumerates returned fields, which is genuinely useful, but it adds no permission requirements, rate limits, or default page size.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is heavily padded with four markdown sections that repeat the same idea (list of vouchers with details) multiple times; 'What You Get' and 'Quick Start' restate the Overview. Front-loaded, but several bullets such as 'Inventory overview - See all available discount codes' earn no place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description reasonably carries the burden of describing return contents (codes, discounts, validity, usage counts) and pagination. But it omits practical details an agent needs — default page size, how to detect the last page, whether a total count is returned — leaving the listing behavior underspecified.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% for both parameters and the schema already documents page (1-based) and limit (per page). The description's example `/vouchers?page=5&limit=10` adds a little concreteness but no semantics beyond the schema, and both params are optional with no stated defaults.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource — listing all vouchers with active/inactive status — so the agent knows it retrieves a collection. However, it never distinguishes itself from close siblings like get_vouchers_voucherid (single voucher) or get_vouchers_history, which an agent must infer from the name alone.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The 'When to Use' section provides context (voucher management, inventory overview, reporting), but these bullets are largely restatements of 'you want to list vouchers' rather than discriminating conditions. No alternative tool is named and no exclusion (e.g., use get_vouchers_voucherid for one voucher) is offered.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_vouchers_historyARead-onlyIdempotentInspect
Overview
Get a complete history of all voucher redemptions across your system, showing which vouchers were used, when, and for which bookings.
When to Use
Usage analytics - Track voucher redemption patterns
Performance reporting - See which vouchers are most popular
Audit trail - Maintain records of voucher usage
Marketing insights - Understand voucher effectiveness
What You Get
Usage records - Each voucher redemption with full details
Booking information - Booking IDs and hotel or flight names where vouchers were used
Guest details - Email addresses of guests who used vouchers
Discount amounts - Total discount applied per usage
Timestamps - When each voucher was redeemed
Quick Start
No parameters required. Returns complete usage history for all vouchers across hotel and flight bookings, including booking details and discount amounts.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, openWorldHint and destructiveHint=false, so the safety profile is covered. The description usefully enumerates what is returned (booking IDs, guest emails, discount amounts, timestamps), but for a query explicitly labeled 'complete history' it never mentions pagination, result size, or whether the whole dataset is dumped in one response.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Headings make it scannable and the key point is front-loaded, but the content is padded for a no-argument tool: the 'Quick Start' paragraph largely restates the Overview and 'What You Get' sections, so several sentences do not earn their place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the 'What You Get' section appropriately carries the burden of describing the return payload, and no parameters need explaining. The main gap is the absence of any note on result volume or pagination for an unbounded 'all redemptions' query.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool takes zero parameters, so the baseline is 4. The description correctly states 'No parameters required,' which matches the empty schema, and adds no misleading parameter claims.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource: 'Get a complete history of all voucher redemptions across your system, showing which vouchers were used, when, and for which bookings.' This distinguishes it from voucher-definition siblings like get_vouchers and get_vouchers_voucherid by emphasizing redemption records, though no sibling is named explicitly.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The 'When to Use' section lists scenarios (usage analytics, performance reporting, audit trail, marketing insights) that imply context, but these are generic business purposes rather than decision guidance. It never says when to prefer this over get_vouchers_voucherid for a single voucher or get_guests_guestid_vouchers for per-guest usage.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_vouchers_voucheridARead-onlyIdempotentInspect
Overview
Get complete details for a specific voucher by its ID, including discount rules, validity, and usage information.
When to Use
Voucher lookup - Find details for a specific voucher code
Validation - Verify voucher details before applying to bookings
Details display - Show voucher information to customers
Support - Look up voucher information during customer service
What You Get
Complete voucher details - All information about the voucher
Discount rules - Type, value, minimum spend, maximum discount
Validity information - Start/end dates and current status
Usage data - Current usage count and remaining uses
Quick Start
Provide the voucher ID in the URL path. Returns complete voucher information.
| Name | Required | Description | Default |
|---|---|---|---|
| voucherID | Yes | Unique identifier of the voucher to retrieve |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, and destructiveHint=false, so the safety profile is covered structurally. The description adds useful content disclosure ('What You Get') but no behavioral traits such as error cases, missing-ID behavior, or permission requirements beyond what annotations provide.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
It is front-loaded and clearly sectioned, which helps scanning, but it is over-sized for a single-parameter lookup and contains tautological filler such as 'Complete voucher details - All information about the voucher' that duplicates the heading.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a read-only lookup with no output schema and one fully documented parameter, the description's 'What You Get' section usefully enumerates the expected return fields (discount rules, validity, usage counts). Nothing essential is missing, though pagination/error behavior is not addressed.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
There is a single required parameter at 100% schema description coverage, so the schema fully documents voucherID. The 'Quick Start' line ('Provide the voucher ID in the URL path') only restates that it is a path parameter and adds no format or constraint detail beyond the schema; baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The Overview states a specific verb and resource ('Get complete details for a specific voucher by its ID') and enumerates the content scope (discount rules, validity, usage). This clearly distinguishes it from the sibling list tool get_vouchers and the history tool get_vouchers_history.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The 'When to Use' section lists four scenarios, but they are generic (lookup, validation, display, support) and read as filler rather than decision criteria. There is no guidance on when NOT to use it or when to prefer get_vouchers / get_vouchers_history instead.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
listBookingsARead-onlyIdempotentInspect
Overview
Search for bookings by guest ID or client reference. Perfect for displaying a guest's booking history or finding bookings by your internal reference codes.
When to Use
Guest booking history - Show all bookings for a specific guest
Reference lookup - Find bookings by your internal reference codes
Booking management - List bookings for administrative purposes
Customer support - Quickly find bookings for support tickets
What You Get
Booking list - All matching bookings with complete details
Guest information - Name, email, and contact details
Stay details - Check-in/check-out dates and hotel information
Payment status - Current payment and booking status
Booking references - Booking IDs and confirmation codes
Search Options
By guest ID - Find all bookings for a specific guest
By client reference - Find bookings using your internal reference codes
By customTags - Narrow results by booking labels using
customTags=KEY:VALUE,KEY2:VALUE2(AND across keys)Optional timeout - Set request timeout (default 4 seconds)
Quick Start
Provide either guestId or clientReference (or both). Returns matching bookings with full details.
| Name | Required | Description | Default |
|---|---|---|---|
| guestId | No | ||
| timeout | No | request timeout in seconds | |
| customTags | No | Filter by customTags. Comma-separated `KEY:VALUE` pairs (e.g. `SOURCE:GOOGLE,TIER:GOLD`); all pairs are joined with AND. Keys must match `^[A-Z0-9_-]+$`, up to 5 keys, value up to 255 characters. Value matching is case-insensitive. | |
| clientReference | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly/idempotent/non-destructive/openWorld, so the safety profile is covered. The description usefully adds the 4-second default timeout and the AND semantics of customTags, but says nothing about result size limits, pagination, or sort order for a list-returning tool — meaningful gaps remain.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with an Overview, which is good, but the 'What You Get' list largely restates the obvious output of a booking search and pads the definition. Headings help scanning, yet several bullets do not earn their place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the 'What You Get' section usefully describes return contents, and the search options cover the input contract. It omits whether guestId and clientReference combine as AND or OR when both are supplied, and omits pagination/limit behavior — small but real gaps for a list tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 50%: customTags is fully documented in the schema, while guestId and clientReference have no schema descriptions. The description compensates by documenting the either/or/both usage of guestId and clientReference and repeating the customTags KEY:VALUE format, so it adds real value over the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource and scope: 'Search for bookings by guest ID or client reference.' An agent knows exactly what it retrieves. It does not, however, differentiate itself from near-identical siblings such as searchBookings, get_bookings, or get_guests_guestid_bookings, so it falls short of a 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The 'When to Use' section gives four concrete scenarios (guest booking history, reference lookup, admin listing, support tickets), which is clear context for invocation. It stops short of exclusions or naming the alternative sibling tools to use instead, so it cannot reach 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
post_analytics_hotelsBRead-onlyInspect
Overview
Get a ranked list of your top-performing hotels by booking volume and sales. Perfect for identifying your best-selling properties.
When to Use
Hotel performance dashboards - Show top hotels by bookings
Sales analysis - Identify highest-revenue properties
Inventory insights - Understand which hotels drive business
Partnership optimization - Focus on high-performing hotel relationships
What You Get
Hotel rankings - Hotels sorted by total bookings
Booking counts - Total bookings per hotel
Sales totals - Revenue generated per hotel
Location data - City and country for each hotel
Hotel identifiers - Hotel ID and name for reference
Quick Start
Provide a date range. Returns hotels ranked by total bookings, including booking counts, sales, and location information.
| Name | Required | Description | Default |
|---|---|---|---|
| to | Yes | End date YYYY-MM-DD (ISO 8601) | |
| from | Yes | Start date YYYY-MM-DD (ISO 8601) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, destructiveHint=false and openWorldHint=true, so the safety profile is covered. The description adds the ranking dimension and the returned fields, but says nothing about result limits, pagination, aggregation window behavior, or auth requirements — modest added value over the structured annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with a clear overview, which is good, but the content is heavily padded: 'Perfect for identifying your best-selling properties' is marketing filler, and the Quick Start section largely restates the Overview. The 'What You Get' list is useful given there is no output schema, but the overall piece is longer than its information content warrants.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the 'What You Get' section genuinely earns its place by enumerating the return shape: hotel rankings, booking counts, sales totals, city/country, and IDs. That covers the main gap. It would be complete with a note on result caps, ranking tie-breaks, or whether the date range is inclusive.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% for both date parameters, each documented as ISO 8601 YYYY-MM-DD in the schema itself. The description only says 'Provide a date range,' adding no format, boundary, or timezone semantics beyond what the schema already provides, so the baseline of 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The overview states a specific verb and resource: 'Get a ranked list of your top-performing hotels by booking volume and sales.' This is concrete enough to distinguish it from generic booking-retrieval siblings, but it never differentiates itself from close neighbors like get_bookings_hotels_sales_report or post_analytics_report, which the agent must disambiguate on its own.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The 'When to Use' section supplies scenario contexts (dashboards, sales analysis, inventory insights, partnership optimization) but frames them as audiences rather than conditions. It names no alternatives and gives no exclusion criteria, so the agent gets implied usage rather than routing guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
post_analytics_marketsBRead-onlyInspect
Overview
Analyze your bookings and sales by customer nationality/market. Understand which countries drive the most business.
When to Use
Market analysis - Identify top-performing markets
Geographic insights - Understand customer distribution
Marketing optimization - Focus efforts on high-value markets
Business intelligence - Track performance by nationality
What You Get
Sales by nationality - Total sales per customer country
Booking counts - Number of bookings per market
Currency information - Sales currency for each market
Ranked results - Markets sorted by performance
Quick Start
Provide a date range. Returns sales and booking data grouped by customer nationality (ISO country code).
| Name | Required | Description | Default |
|---|---|---|---|
| to | Yes | End date for the market analytics YYYY-MM-DD (ISO 8601) | |
| from | Yes | Start date for the market analytics YYYY-MM-DD (ISO 8601) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, openWorldHint=true, idempotentHint=false and destructiveHint=false, so the safety profile is covered and the POST-verb/read-only pairing is not contradictory. The description adds useful disclosure about result content (sales, booking counts, currency, ranked ordering), which matters because there is no output schema. It does not mention permissions, timezone handling, result size limits, or pagination.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
It is well front-loaded and sectioned, so an agent can scan it quickly, but the content is padded: 'Business intelligence - Track performance by nationality' merely restates the overview, and 'Ranked results - Markets sorted by performance' duplicates 'Ranked results'. Several bullets could be merged without losing information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description usefully compensates by enumerating the returned fields (sales by nationality, booking counts, currency, ranked ordering) and the grouping key (ISO country code). Combined with the required date range, an agent has enough to call it correctly. It is only slightly short on operational detail such as timezone and maximum range.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%: both 'from' and 'to' are documented in the schema with the YYYY-MM-DD ISO 8601 format. The description only restates 'Provide a date range' and adds no format, timezone, or range-bound semantics beyond that. Baseline 3 is correct when the schema carries the parameter documentation.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The overview states a specific verb and resource: analyze bookings and sales grouped by customer nationality/market. That is enough to separate it from post_analytics_hotels and post_analytics_weekly by subject matter. However, it never acknowledges the near-duplicate siblings get_bookings_guest_nationality_report and get_bookings_source_markets_report, so the distinction from those is left to the agent to guess.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The 'When to Use' block lists business scenarios (market analysis, geographic insights, marketing optimization) but none of them are tool-selection criteria — they describe what the output is good for, not when this tool beats an alternative. With several overlapping market/nationality report siblings present, the absence of any routing guidance is a real gap. Usage is implied at best.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
post_analytics_reportARead-onlyInspect
Overview
Get comprehensive analytics covering sales, bookings, commissions, and revenue for your date range. This is your complete business intelligence endpoint.
When to Use
Executive dashboards - Complete business overview
Financial reporting - Track revenue, sales, and commissions
Booking analysis - Monitor confirmed vs cancelled bookings
Performance tracking - Daily breakdowns of key metrics
What You Get
Sales revenue - Daily sales totals with currency
Booking counts - Confirmed and cancelled bookings per day
Commission data - Commission earned per day
Revenue breakdown - Total revenue calculations
Aggregated totals - Summary statistics for the entire period
Key Features
Daily granularity - See day-by-day performance
Multiple currencies - Currency information included
Complete metrics - Sales, bookings, commissions, and revenue in one response
Time-series ready - Data formatted for easy charting
Quick Start
Provide start and end dates. Returns detailed daily analytics plus aggregated totals for the period.
| Name | Required | Description | Default |
|---|---|---|---|
| to | Yes | End date for the report YYYY-MM-DD (ISO 8601) | |
| from | Yes | Start date for the report YYYY-MM-DD (ISO 8601) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, destructiveHint=false and openWorldHint=true, so safety is covered. The description adds genuinely new behavioral context that the annotations cannot express: daily granularity, per-day confirmed/cancelled booking counts, per-day commission figures, currency inclusion, and aggregated period totals – which matters because there is no output schema.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
At roughly 200 words across five markdown sections, the description is bloated and self-repeating: 'What You Get' and 'Key Features' both re-list sales, bookings, commissions and revenue, and the Overview already said the same thing. The front-loading is good, but much of the content does not earn its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description carries the burden of describing results, and it does so credibly (daily sales, confirmed/cancelled counts, commissions, aggregated totals). What is missing for a reporting endpoint is whether the range is bounded, how timezone/currency selection works, and whether results can be large – but nothing essential to invoking it correctly is absent.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% and both parameters (from, to) are documented in the schema with ISO 8601 YYYY-MM-DD format. The description only repeats 'Provide start and end dates', adding no syntax, range limits, or timezone guidance, so this is the baseline case where the schema does the work.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The Overview states a specific verb and resource ('Get comprehensive analytics covering sales, bookings, commissions, and revenue for your date range') and the scope (daily granularity for a date range), which distinguishes it from most data-lookup siblings. However, it never names the closely overlapping analytics siblings (post_analytics_hotels, post_analytics_markets, post_analytics_weekly, post_commissions_report), so the agent must infer why this one is 'complete' rather than specialized.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The 'When to Use' section lists contexts (executive dashboards, financial reporting, booking analysis), but those bullets largely restate the output categories rather than telling the agent when this tool wins over a sibling report. There is no exclusion, no 'use X instead when Y', and with five or more overlapping reporting tools that is a real routing gap.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
post_analytics_weeklyARead-onlyInspect
Overview
Get weekly aggregated sales and booking data broken down by week. Perfect for tracking week-over-week performance trends.
When to Use
Weekly performance dashboards - Show sales trends by week
Week-over-week comparisons - Identify growth patterns
Business reporting - Generate weekly reports for stakeholders
Performance monitoring - Track weekly sales metrics
What You Get
Weekly sales totals - Aggregated sales revenue per week
Week labels - Human-readable week identifiers (e.g., "week 12")
Time-series data - Ordered by week for easy charting
Quick Start
Provide a date range (from and to dates). The endpoint returns sales data grouped by week within that range.
| Name | Required | Description | Default |
|---|---|---|---|
| to | Yes | End date for the analytics data YYYY-MM-DD (ISO 8601) | |
| from | Yes | Start date for the analytics data YYYY-MM-DD (ISO 8601) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, destructiveHint=false, and openWorldHint=true, so safety is covered. The description adds genuinely useful behavior beyond that: the output is grouped and ordered by week, includes human-readable week labels, and reflects weekly revenue totals. It does not mention permissions, rate limits, or how weeks are bounded (Monday vs Sunday start).
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Structure is front-loaded with headers, but for a two-parameter read-only endpoint the markdown is padded: 'Perfect for tracking week-over-week performance trends' and the monitoring/reporting bullets largely repeat the Overview. Several sentences do not earn their place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the 'What You Get' section usefully compensates by describing the return shape (weekly totals, week labels, weekly ordering). The main remaining gap is the ambiguity of what constitutes a 'week' (start day, timezone) and behavior on empty or reversed ranges.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so both `from` and `to` are already documented as ISO 8601 YYYY-MM-DD in the schema. The description only restates 'provide a date range (from and to dates)' without adding parsing, timezone, or boundary semantics. Baseline 3 applies when the schema does the heavy lifting.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a clear verb+resource+grouping dimension: 'weekly aggregated sales and booking data broken down by week.' This implicitly separates it from siblings like post_analytics_hotels and post_analytics_markets (which group by hotel/market), but those siblings are never named, so an agent must infer the distinction from the grouping dimension alone.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The 'When to Use' section gives scenario context (dashboards, WoW comparisons, reporting, monitoring), which is useful but generic and largely restates the overview. It offers no when-not-to-use guidance and never names the sibling analytics tools (post_analytics_hotels, post_analytics_markets, post_analytics_report) that an agent must choose between.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
post_bookings_bookingid_alternative_prebooksAInspect
Overview
Hard Amendment — Search for alternative rates at the same hotel and create ready-to-book prebook sessions for a confirmed booking. Used when the guest needs to change their check-in/check-out dates or room occupancy.
When to Use
Date changes — Guest needs different check-in or check-out dates
Occupancy changes — Guest needs a different number of adults or children
Hard amendments — Situations where the booking must be cancelled and re-booked with new parameters
How It Works
The system searches for live availability at the same hotel with the new parameters.
Up to
maxPrebooksalternative rates are selected (sorted by price ascending). Defaults to 3 when omitted; capped at 10 (any larger value is silently clamped to 10).A prebook session is created for each rate.
The caller receives a list of
prebookIdvalues ready to be used withPOST /rates/rebook.
What You Get
Up to
maxPrebooksprebook sessions — Each with aprebookId, final pricing, cancellation policies, and room detailsPrice comparison —
priceDifferencePercentshows how each alternative compares to the original booking's selling price (negative = cheaper than what the guest paid, positive = more expensive)Policy change flags —
cancellationChangedandboardChangedhighlight any policy differences
Completing the Amendment
Pass the chosen prebookId and the original bookingId as existingBookingId to POST /rates/rebook. On success, the new booking is created and the original booking is automatically cancelled — no separate cancellation call is needed.
Key Notes
The booking must be in CONFIRMED status.
If the original booking is non-refundable, only non-refundable alternatives are returned (unless overridden with
refundableRatesOnly).Payment type is honoured — only rates that support the original booking's payment type are returned. A pay-at-property booking only sees
PROPERTY_PAYalternatives; every other booking (including pay-later, succeeded, credit_line) only seesNUITEE_PAYalternatives. Pay-later eligibility additionally requires a refundable rate, which is enforced automatically when the original booking was refundable.The nationality and currency of the original booking are used for the availability search.
If the cancellation of the original booking fails after the new booking is created, the error is logged but the new booking is still returned.
Quick Start
Call this endpoint with the
bookingIdand newoccupancies/dates — get back up tomaxPrebooksprebookIdvalues.Call
POST /rates/rebookwith the chosenprebookIdandexistingBookingId— new booking confirmed, original cancelled.
| Name | Required | Description | Default |
|---|---|---|---|
| checkin | No | The new check-in date in YYYY-MM-DD format. Must be before `checkout`. | |
| checkout | No | The new check-out date in YYYY-MM-DD format. Must be after `checkin`. | |
| boardType | No | Filter results by board/meal-plan type (e.g. `RO` for Room Only, `BB` for Bed & Breakfast). Leave empty to return all board types. | |
| bookingId | Yes | (Required) The unique identifier of the confirmed booking to amend. | |
| maxPrebooks | No | Maximum number of alternative prebook sessions to create. Defaults to 3 when omitted. Values above 10 are silently capped at 10; values ≤ 0 fall back to the default. The response may contain fewer entries when the hotel does not have enough distinct alternative offers. | |
| occupancies | Yes | The desired room occupancies for the amended stay. One entry per room. | |
| refundableRatesOnly | No | When true, only fully refundable alternative rates are returned. Defaults to false (or true if the original booking was refundable). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Rich beyond the annotations: silent clamping of maxPrebooks to 10, default/≤0 fallback behavior, refundable-only restriction for non-refundable originals, payment-type honoring (PROPERTY_PAY vs NUITEE_PAY), use of original nationality/currency, and explicit partial-failure semantics ('cancellation failure logged but new booking returned'). This is consistent with readOnlyHint=false / destructiveHint=false / idempotentHint=false.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Well front-loaded with Overview then When to Use / How It Works / What You Get / Key Notes. It is on the long side and some content repeats across 'How It Works', 'Completing the Amendment', and 'Quick Start', but every section carries distinct information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the 'What You Get' section fully describes the return payload (prebookId, final pricing, cancellation policies, room details, priceDifferencePercent, cancellationChanged/boardChanged). Given seven params, a mutation with open-world behavior, and async follow-up steps, the description covers everything needed to call it correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3, but the description adds real meaning: maxPrebooks defaults/caps and 'sorted by price ascending', refundableRatesOnly default that depends on the original booking's refundability, and occupancy-driven search. These are behavioral semantics the schema does not convey.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource: 'Search for alternative rates at the same hotel and create ready-to-book prebook sessions for a confirmed booking,' and frames it as a 'Hard Amendment' with a one-line scenario (date/occupancy change). This lets an agent distinguish it from soft-amendment and rebook siblings without opening the schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The 'When to Use' section gives three concrete triggering conditions (date changes, occupancy changes, hard amendments) and the precondition (booking must be CONFIRMED). It clearly says what follows (POST /rates/rebook), though it never names a sibling like put_bookings_bookingid_amend for the soft-amendment alternative, so routing is implied rather than explicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
post_commissions_reportARead-onlyInspect
Overview
Returns commission earnings on the account for the given date range. Each day in the range includes the total commission amount and the average commission percentage.
When to Use
Commission tracking - Monitor daily commission earnings
Revenue analysis - Understand commission as a percentage of sales
Financial reporting - Report commission totals and averages by day
Performance dashboards - Chart commission trends over time
What You Get
Daily amounts - Total commission earned per day
Daily percentage - Average commission percentage per day
Time-series data - One entry per day, ordered by date
Quick Start
Provide a date range (from and to) and optionally sandbox to filter by environment. Returns an array of daily commission amounts and percentages.
| Name | Required | Description | Default |
|---|---|---|---|
| to | Yes | End date for the report YYYY-MM-DD (ISO 8601) | |
| from | Yes | Start date for the report YYYY-MM-DD (ISO 8601) | |
| sandbox | No | Filter by environment: "true" for sandbox, "false" for production |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover the safety profile (readOnlyHint=true, destructiveHint=false, openWorldHint=true), so the bar is lower. The description adds real value beyond that by describing the return shape in detail – one entry per day, ordered by date, with amount and average percentage – which matters specifically because no output schema exists.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Four markdown sections for a three-parameter read tool, with heavy redundancy: the daily amount/average percentage return content is stated in the Overview, repeated in the 'What You Get' bullets, and repeated again in the Quick Start. It is front-loaded, but much of the text does not earn its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple read-only date-range report with complete schema coverage, the definition covers inputs and return shape adequately. Minor gaps remain, such as timezone and how partial/missing days are handled, but nothing critical for correct invocation is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the baseline is 3. The Quick Start section restates 'from and to' as a date range and sandbox as an environment filter, but the ISO 8601 format details and the sandbox true/false semantics live entirely in the schema, so the description adds nothing new.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource: 'Returns commission earnings on the account for the given date range,' with the granularity (daily amounts and average percentage). It is distinguishable from sibling reports like post_analytics_report or get_bookings_hotels_sales_report by subject matter, though it never names a sibling explicitly.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The 'When to Use' section gives four scenarios (commission tracking, revenue analysis, financial reporting, dashboards), which qualifies as implied usage context. It offers no when-not-to-use guidance and never points to an alternative report tool, so an agent choosing among the many reporting siblings gets no routing help.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
post_data_hotel_highlightsAInspect
Overview
Beta Feature - Generate short, AI-written "Smart Highlight" cards for a hotel. Each highlight is a title plus a one or two sentence description, generated directly in the requested language.
Rate Limiting: This endpoint is rate-limited to 10 requests per minute per API key for both sandbox and production API keys. Exceeding this limit will result in a 429 Too Many Requests response.
When to Use
Hotel detail pages - Show a few compelling reasons to consider a property
Partner-specific tone - Adjust voice and emphasis per surface via
tone,styleand per-highlightcontext
What You Get
Exactly
counthighlights, always, in the requested ordertypeechoed back from the request so you can map each card to your own UIgeneratedindicating whether the copy is AI-generated or template fallback
Behaviour
Hotel facts (name, city, country, description) are resolved server-side from hotelId; the caller never supplies them. Generated copy is grounded in those facts.
If AI generation fails, the endpoint still returns 200 with the requested number of neutral template highlights and generated: false. It never returns an empty array for a valid hotel.
Results are cached, so repeated calls with an identical request body return identical copy.
Note: This is a beta feature and may be subject to changes.
| Name | Required | Description | Default |
|---|---|---|---|
| tone | No | Global writing guidance, e.g. `professional and inviting` or `calm and practical`. | |
| count | No | Number of highlights to generate. If `highlights` is supplied, `count` must equal its length. | |
| style | No | Formatting preferences such as title or description length. | |
| hotelId | Yes | Unique ID of the hotel (liteAPI format) | |
| language | Yes | Language code. Highlights are generated directly in this language. | |
| highlights | No | Per-highlight guidance. Omit for generic generation. When supplied, its length must equal `count` and the response preserves this order. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Strong disclosure beyond the annotations: 10 req/min rate limit with the exact 429 failure, server-side resolution of hotel facts from hotelId, graceful degradation to 200 with template highlights and generated:false, and caching of identical request bodies. The caching claim sits in mild tension with idempotentHint=false and the generation-oriented readOnlyHint=false, but the description never contradicts the annotations outright and instead supplies the observable behaviour an agent needs.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The markdown headers (Overview, When to Use, What You Get, Behaviour) make it scannable and the beta/rate-limit warning is front-loaded. It is longer than strictly necessary and repeats a couple of points between 'What You Get' and 'Behaviour', but nearly every sentence carries usable information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description correctly carries the return-value burden: exactly count highlights, the echoed type field, and the generated flag distinguishing AI copy from template fallback. Combined with rate-limit, fallback, and caching behaviour, an agent has everything needed to call this tool correctly and interpret the response.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is already 100%, so the baseline is 3, but the description adds response-mapping semantics not present in the schema: 'type' is echoed back so cards can be mapped to a UI, exactly count highlights are always returned in order, and highlights entries are treated as topic guidance only (unsupported claims are not invented). That clarifies how inputs shape outputs, which the schema alone does not.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific action and output artifact: generate short AI-written 'Smart Highlight' cards (title + one or two sentence description) for a hotel, in a requested language. This is clearly distinguishable from sibling tools like get_data_hotel, get_data_hotel_ask, or get_data_reviews, which retrieve factual content rather than generate copy.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The 'When to Use' section gives concrete surfaces (hotel detail pages, partner-specific tone via tone/style/per-highlight context), which is stronger than most definitions. It does not, however, name any alternative tool or state when NOT to use it (e.g., when plain factual hotel data is wanted), so it falls short of explicit routing guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
post_flights_bookingsAInspect
Overview
Complete a flight reservation by confirming a prebook and processing payment. This is the final step in the booking flow.
When to Use
Final booking confirmation - Convert a prebook into a confirmed booking
Payment completion - Confirm with Stripe (
TRANSACTION_ID), bill an enabled credit line (CREDIT), or pay with a credit card (CREDIT_CARDvia the secure endpoint)After service selection - Book after optionally attaching seats or baggage via the services endpoint
What You Get
Confirmed booking with a unique booking ID
Payment confirmation with transaction details
Full itinerary including all segments and passenger assignments
Provider confirmation reference number
Key Features
Idempotent: Returns the existing booking (HTTP 200 +
data[0].message) if one already exists for the givenprebookId. Transient book failures are retried in place without exposing a terminal failure status. Concurrent duplicate requests while a book is in progress return HTTP 409 (45035).Payments: Stripe uses
transactionIdfrom prebook or attach-services after SDK confirmation; credit line usesCREDITwith server-side eligibility checks;CREDIT_CARDcharges the provided card immediately — send card details inbillingInfoviahttps://pci-book.liteapi.travel(contact the team to enable this on your API key)Provider confirmation: Finalizes the reservation on the provider side
Quick Start
Required fields: prebookId (from POST /flights/prebooks), payment with method and, for Stripe, transactionId
Tip: If you used POST /flights/prebooks/{prebookId}/services to attach ancillary services, use the new transactionId from that response, not the original prebook transactionId.
| Name | Required | Description | Default |
|---|---|---|---|
| payment | Yes | Payment for `POST /flights/bookings`: Stripe (`TRANSACTION_ID` + `transactionId`), credit line (`CREDIT`), whitelabel/CMI (`THIRD_PARTY` + `token`), or direct card via the secure endpoint (`CREDIT_CARD` + `billingInfo`). | |
| metadata | No | Optional. Encapsulates essential booking metadata, including IP, location, language, device details, and marketing parameters. | |
| prebookId | Yes | The prebookId returned by `POST /flights/prebooks` (prebook must have completed the book step). | |
| customTags | No | Optional bag of up to 5 user-defined key/value labels persisted with the booking. Keys must match `^[A-Z0-9_-]+$` (uppercase letters, digits, `-`, `_`). Values are arbitrary strings up to 255 characters. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description explicitly labels the tool 'Idempotent' and describes returning the existing booking for a given prebookId, while the annotations declare idempotentHint=false. This is a direct contradiction between description and structured data, which forces the lowest score regardless of the otherwise rich behavioral detail (409/45035 concurrency handling, transient retries, payment flows).
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Organized into scannable Overview / When to Use / What You Get / Key Features / Quick Start sections with the required fields front-loaded at the end. It is long, but nearly every sentence carries actionable content; minor redundancy between the Overview and Key Features sections keeps it from a 5.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a complex payment/finalization tool with nested objects and no output schema, the description covers the booking flow position, required fields, idempotency, concurrency errors, retry behavior, and all four payment paths. An agent has enough to invoke it correctly without opening sibling tools.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3, but the description adds genuine operational meaning beyond the schema: which payment methods map to which fields, that CREDIT_CARD details go through the secure PCI endpoint, and the tip to use the new transactionId from the services endpoint rather than the prebook one.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource and scope: 'Complete a flight reservation by confirming a prebook and processing payment. This is the final step in the booking flow.' An agent can immediately distinguish this from read siblings like get_flights_bookings and the earlier post_flights_prebooks step.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The 'When to Use' section gives clear triggering conditions (final confirmation, payment completion, after service selection) and references the prebook and services endpoints that precede this call. It does not explicitly name an alternative sibling to use instead, or state when not to call it, so it falls short of full routing guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
post_flights_bookings_bookingid_cancellationsAInspect
Overview
Cancels a flight booking. Submits cancellation for an existing booking and returns the cancellation outcome. Call GET /flights/bookings/{bookingId}/cancellations first to preview the financial impact without committing.
If cancellation is accepted but not yet confirmed, this endpoint returns HTTP 202 with status: CONFIRMED (the booking is unchanged until the airline finalizes). Retries while cancellation is still pending are idempotent. While cancellation is awaiting confirmation, a subsequent GET /flights/bookings/{bookingId} includes cancelIntentAt (timestamp of the cancel request). When cancellation completes, the response is HTTP 200 with a final status of CANCELLED or CANCELLED_WITH_CHARGES. All asynchronous cancellation updates are delivered as webhook events — subscribe to flight booking webhooks to receive final confirmation and status changes.
When to Use
Confirmed cancellation — Cancel the booking with the airline after the cancel quote has been reviewed and agreed
What You Get
bookingId— The LiteAPI booking identifierstatus— Current booking status:CONFIRMEDwhile cancellation is awaiting airline confirmation (HTTP 202), or finalCANCELLED/CANCELLED_WITH_CHARGES(HTTP 200)cancellation_fee— Total cancellation penalty; often0on idempotent pending retriesrefund_amount— Amount to be returned (if any)currency— Currency of the fee and refund amountsdestination— Where refunded money goes (original_payment,agency_deposit,voucher, etc.)vouchers[]— Airline travel vouchers when issued in lieu of cash; omitted when absent
Key Features
Hotel-parity response — Flat
dataobject withbookingId,status,cancellation_fee,refund_amount,currency, plus optionaldestination/vouchersPending cancel intent — HTTP 202 when the airline accepts the cancel but has not confirmed it yet; booking stays
CONFIRMEDuntil cancellation is finalized, andGET /flights/bookings/{bookingId}returnscancelIntentAtFee-based final status — When cancellation completes (HTTP 200), the final
statusdepends oncancellation_fee: if the fee is0, the booking is fully cancelled (CANCELLED); if the fee is greater than0, the booking is cancelled with charges retained (CANCELLED_WITH_CHARGES)
Quick Start
Provide the bookingId from POST /flights/bookings in the URL path. No request body is required.
| Name | Required | Description | Default |
|---|---|---|---|
| bookingId | Yes | The unique booking identifier |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description discloses a lot beyond the annotations: HTTP 202 vs 200 semantics, cancelIntentAt on the follow-up GET, webhook delivery, and final status derivation from cancellation_fee. However, it states 'Retries while cancellation is still pending are idempotent', which conflicts with the annotation idempotentHint=false, so an agent could wrongly assume retry safety. That direct conflict with structured metadata is what caps this dimension.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
It is front-loaded with an Overview that leads with the action, which is good, but it is heavily padded with markdown headers and repeated content — the status semantics and pending-cancel behavior are explained in both 'What You Get' and 'Key Features'. For a single-parameter tool this is longer than it needs to be.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
There is no output schema, and the description compensates fully by enumerating the response fields (bookingId, status, cancellation_fee, refund_amount, currency, destination, vouchers[]) and explaining the asynchronous confirmation flow. Nothing an agent needs to invoke or interpret this endpoint is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% and there is only one parameter, so the schema already carries the baseline. The description still adds value by stating the parameter is a URL path segment taken from POST /flights/bookings and that no request body is required, which the schema does not express.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The opening line states a specific verb and resource ('Cancels a flight booking') and immediately distinguishes the action from the read-only preview sibling by telling the agent to call GET /flights/bookings/{bookingId}/cancellations first. An agent can tell exactly what this does without opening the schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The 'When to Use' section gives the explicit precondition for calling ('after the cancel quote has been reviewed and agreed') and routes the agent to the preview endpoint (get_flights_bookings_bookingid_cancellations) for the non-committing case. When-to-use, when-not-to-use, and the alternative are all present.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
post_flights_prebooksAInspect
Overview
Initiate a flight booking session by reserving the offer with the provider, creating a payment intent when you use the Stripe SDK, and discovering available ancillary services — all in a single request.
When to Use
Start the booking flow once a user has confirmed their flight selection
Collect passenger details and initiate payment processing
Discover add-ons like seat selection and extra baggage before final confirmation
What You Get
Prebook ID required to complete the booking at
/flights/bookingsPayment intent (
transactionId,secretKey) whenusePaymentSdkis true — for Stripe SDK integrationCredit line snapshot (
creditLinein the response) when you setincludeCreditBalance: trueand your account has an enabled credit line with payment bypassAvailable services (
servicesAttachable) including seats and baggage optionsBooking confirmation from the provider with reservation details
Key Features
End-to-end prebook flow: Verifies offer → payment setup (Stripe payment intent or credit line) → books with provider → fetches services
Payment options:
usePaymentSdk: trueuses the Stripe SDK.usePaymentSdk: falseis allowed when your user has payment bypass (sandbox or whitelabel) and either an enabled credit line or a whitelabel/CMI checkout (no Stripe intent; complete payment via WL and call/flights/bookingswithpayment.method: THIRD_PARTYandpayment.token)Ancillary services: Returns attachable services (seats, baggage) that can be added before final booking
Same shape as /book: Uses
offerIdinstead ofprebookId
Quick Start
Required fields: offerId (from search/verify), contact (name, email, phone), passengers (with birthday, document, and name details).
Payment: Send usePaymentSdk: true for Stripe (typical). Send usePaymentSdk: false when paying on credit line or via whitelabel/CMI (requires payment bypass); otherwise you receive a validation error.
Tip: Use the servicesAttachable in the response to offer seat selection or extra baggage before calling /flights/bookings.
| Name | Required | Description | Default |
|---|---|---|---|
| contact | Yes | Primary contact person for the booking (receives confirmation emails) | |
| offerId | Yes | The offerId from the search results (msgpack-encoded; unpacks to provider offerId) | |
| payment | No | Payment configuration options | |
| passengers | Yes | List of passengers travelling. Length must match the adults+children+infants counts from the search. | |
| voucherCode | No | An optional voucher code to apply discounts to the booking. The vouchers API allows creation of these discounts | |
| travelPurpose | No | Optional purpose of the trip. | |
| usePaymentSdk | No | If true, a Stripe payment intent is created (`transactionId`, `secretKey`). If false, payment bypass must apply and the account must use credit line or whitelabel/CMI checkout (no Stripe intent); otherwise the request is rejected. | |
| includeCreditBalance | No | Optional flag to include credit line information in the response. When set to true, credit line details will be returned if the user has a credit line available. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Although annotations already declare readOnly=false and openWorld=true, the description adds behaviour those hints cannot: the call actually books with the provider, creates a Stripe payment intent, requires entitlement (payment bypass / enabled credit line) or it 'receives a validation error', and returns a prebook ID plus payment secret. Concurrency is the only gap (non-idempotent retry semantics are not spelled out).
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Headers, bullets and a front-loaded Overview make it skimmable, and the Quick Start puts required fields and payment mode in one place. It is verbose for the job, though, with genuine duplication between 'Key Features' and 'Quick Start' (the usePaymentSdk true/false explanation appears three times).
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description carries the return burden and does so: prebook ID, `transactionId`/`secretKey`, `creditLine`, `servicesAttachable`, and provider confirmation. Combined with the workflow position and payment prerequisites, an agent has everything needed to call it correctly in sequence.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so baseline is 3, but the description adds real meaning: `offerId` must come 'from search/verify', `passengers` length must match search counts is schema-side, and the description explains the conditional semantics of `usePaymentSdk` and what `includeCreditBalance` returns (`creditLine` snapshot). It largely restates required-field lists the schema already carries.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a precise verb+resource statement: 'Initiate a flight booking session by reserving the offer with the provider...' and enumerates the three concrete actions (reserve, create payment intent, discover ancillaries). It explicitly distinguishes itself from the sibling endpoints it hands off to (`/flights/bookings`, search/verify), so an agent can place it in the booking flow without reading the schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The 'When to Use' section states the triggering condition ('once a user has confirmed their flight selection') and the follow-on step, and the payment section gives explicit when-this/when-that rules for `usePaymentSdk: true` vs `false` (payment bypass + credit line or whitelabel/CMI, else validation error). Alternatives and their preconditions are named rather than implied.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
post_flights_prebooks_prebookid_servicesAInspect
Overview
Add ancillary services such as seat selection or extra baggage to an existing prebook before confirming the final booking.
When to Use
Seat selection - Allow users to choose specific seats after prebook
Extra baggage - Let users add additional luggage allowance
Price update - Required when services change the total booking cost
Voucher discount - Optional
voucherCodewhen attaching services changes the total and you need the discount reflected on the new payment intent
What You Get
Updated prebook with the selected services attached
New payment intent (
transactionId,secretKey) reflecting the updated total price (after any voucher discount)Same response format as
POST /flights/prebooksfor easy integration
Key Features
Seat selection: Assign specific seats to each passenger and segment
Extra baggage: Add checked baggage or overweight allowances
Updated payment: Creates a new Stripe payment intent when the prebook used Stripe (
usePaymentSdk: true). For whitelabel/CMI prebooks (used_custom_payment_keys), no new intent is returned — re-charge via WL and submit a fresh JWT atPOST /flights/bookingsVoucher recalculation: When a voucher applies, the discount is recomputed against the updated total (journey + ancillaries); invalid or expired vouchers return
400(same as prebook)Modifies in place: Updates the existing prebook record in the database
Quick Start
Provide the prebookId in the URL path and selectedServices in the request body. Optionally pass voucherCode to apply a discount. Use the new transactionId from this response (not the original prebook transactionId) when confirming payment with Stripe and when calling POST /flights/bookings.
| Name | Required | Description | Default |
|---|---|---|---|
| prebookId | Yes | The prebook ID (must have provider_booking_id from initial prebook) | |
| voucherCode | No | An optional voucher code to apply discounts to the booking. The vouchers API allows creation of these discounts | |
| selectedServices | Yes | Services to attach (from servicesAttachable.groups in prebook response) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond annotations (readOnly=false, idempotent=false, destructive=false, openWorld=true), the description discloses the mutation semantics in depth: it modifies the prebook in place, emits a new payment intent only when usePaymentSdk was true, returns nothing new for whitelabel/CMI prebooks, and surfaces 400s on invalid/expired vouchers.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Well front-loaded with headed sections that let an agent scan to the relevant part, but it is noticeably long and the 'Key Features' bullets partly restate the 'When to Use' bullets.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description carries the return-value burden and does so: updated prebook, new transactionId/secretKey, and the warning to use the new transactionId when confirming with Stripe and POST /flights/bookings. Nothing essential is missing for a mutation tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is already 100%, so the baseline is 3; the description earns extra credit by explaining that voucherCode is optional and only relevant when attaching services changes the total, and by directing selectedServices to servicesAttachable.groups in the prebook response.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The Overview states a specific verb+resource+scope: add ancillary services (seat selection, extra baggage) to an existing prebook. It differentiates from the plain prebook flow by specifying this operates on an existing prebookId and references 'POST /flights/prebooks' only as a response-format comparison.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The 'When to Use' section enumerates the concrete cases (seat selection, extra baggage, price update, voucher discount) and the Quick Start states exactly what to pass. It also implicitly gates usage on the prebook having provider_booking_id and on Stripe vs whitelabel payment paths.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
post_flights_ratesARead-onlyInspect
Overview
Search for available flights with real-time pricing from multiple providers. The itinerary must be sent as a non-empty legs array. Each leg follows the provider SearchLeg shape: required origin, destination, and date (YYYY-MM-DD); optional direction (OUTBOUND or INBOUND); optional per-leg filters that override global filters for that leg only.
Not supported: top-level origin, destination, departureDate, or returnDate — use legs only.
When to Use
Listings — live prices for search results UI
One-way, round-trip, or multi-city — one leg per segment, in order
Filtering — cabin class, stops, price, refundability, times (globally or per leg)
Streaming — incremental provider results over SSE
What You Get
Offers from multiple providers
Itineraries with segments, layovers, and durations
Price breakdown (fares, taxes, fees) and baggage hints
Key Features
Multi-provider aggregation in one request
SSE: send header
Accept: text/event-streamonPOST /flights/rates, orPOST /flights/rates/streamwith the same JSON bodyGlobal
filters,sort
Quick Start
Required: legs (at least one object with origin, destination, date), adults (≥ 1), currency
Round-trip: two legs (e.g. outbound then return with direction OUTBOUND / INBOUND). One-way: one leg.
| Name | Required | Description | Default |
|---|---|---|---|
| legs | Yes | Ordered itinerary legs (provider SearchLeg). One-way: one entry. Round-trip: outbound then inbound. Multi-city / open-jaw: additional legs in travel order. | |
| sort | No | Sort options for results | |
| adults | Yes | Number of adults (12+) | |
| country | No | Optional ISO 3166-1 alpha-2 country code for point of sale | |
| filters | No | Optional filters to refine search results | |
| infants | No | Number of infants (<2) | |
| children | No | Number of children (2-11) | |
| currency | Yes | ISO 4217 currency code | |
| cabinClass | No | Cabin class (provider SearchFilters codes only). Same enum as filters.cabinClass. | |
| infantAges | No | Age of each infant (under 2, per IATA). Length must equal infants count. Optional — omit if ages are not relevant. | |
| childrenAges | No | Age of each child (2–11 inclusive, per IATA). Length must equal children count. Optional — omit if ages are not relevant. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, destructiveHint=false, and openWorldHint=true, so safety is covered. The description adds genuinely useful behavioral context the annotations cannot convey: multi-provider aggregation, SSE streaming via Accept header or the /stream path, and that per-leg filters override global filters. It does not mention rate limits or provider-specific quirks, keeping it short of a 5.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Markdown headers give good structure and the Overview is front-loaded, but the required parameters (legs, adults, currency) are restated across Overview, Key Features, and Quick Start, and the 'What You Get' section partially duplicates what the schema already implies. It is informative but longer than it needs to be.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description carries the return-value burden and does so with a 'What You Get' section covering offers, itineraries, and price breakdowns. Combined with streaming and filter behavior, it is nearly complete for an 11-parameter tool, missing only error/empty-result behavior to reach a 5.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3; the description earns more by explaining that legs must be non-empty, that direction accepts OUTBOUND/INBOUND, and that per-leg filters override global ones. The explicit exclusion of top-level origin/destination/departureDate/returnDate adds meaning beyond the schema by steering agents away from invalid shapes.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Opens with a specific verb+resource+scope: 'Search for available flights with real-time pricing from multiple providers.' It distinguishes itself from sibling tools like post_hotels_rates and get_flights_bookings, and the 'Not supported' note rules out common misuses. An agent knows exactly what this tool does.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
'When to Use' explicitly enumerates listings, one-way/round-trip/multi-city, filtering, and streaming. The 'Not supported' section gives a clear negative condition (no top-level origin/destination) and the Quick Start gives concrete input shapes, so when-to-use and when-not-to-use are both covered.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
post_flights_verifyARead-onlyInspect
Overview
Confirm a flight offer is still available and retrieve the latest pricing before proceeding to booking. Always verify before prebooking to avoid price discrepancies.
When to Use
Pre-booking validation - Confirm offer availability after user selects a flight
Price confirmation - Show users the guaranteed price before they enter payment details
Fare rule retrieval - Get the latest cancellation and change policies
What You Get
Verified pricing with up-to-date fare breakdown
changes(when present) — cabin/fare flags, human-readablemessages, andpricing(old/newfull OfferPricing) instead of deprecated scalar currency/pricesJourney
pricing—original(provider/PCC) anddisplay(customer) price breakdown per provider FlattenedJourneyFare family details including name and included amenities
Baggage policy for each passenger type and segment
Booking terms including cancellation and change fee rules
Key Features
Real-time price check: Confirms current availability and price with the provider
Updated baggage info: Returns the latest baggage allowances at time of verification
Fare rules: Includes cancellation and change fee policies before commitment
Quick Start
Provide the offerId from /flights/rates search results. Use the verified offer data to populate a booking summary page before proceeding to /flights/prebooks.
| Name | Required | Description | Default |
|---|---|---|---|
| offerId | Yes | The offerId from the search results |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare read-only, non-destructive, and open-world, so the safety profile is covered. The description adds real behavioral value beyond that: it is a live provider round-trip ('Real-time price check'), warns that prices can drift ('avoid price discrepancies'), and documents the `changes` payload replacing deprecated scalar currency/prices fields.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with an Overview, but the body is padded and repetitive: 'Real-time price check', 'Fare rules', and baggage/price confirmation information are restated across Overview, What You Get, and Key Features. The markdown structure helps navigation but several sections earn less than their length.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description legitimately carries the return-shape burden and does so in detail (pricing breakdown, journey pricing, fare family, baggage, booking terms). It still omits error handling, auth/permission needs, and rate limits for a live provider call.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Only one parameter with 100% schema coverage; the schema already documents offerId. The description adds the source endpoint ('/flights/rates') and the downstream use ('populate a booking summary page'), which is marginally useful, but the schema does the heavy lifting.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The Overview states a specific verb and resource ('Confirm a flight offer is still available and retrieve the latest pricing') and situates it in the booking pipeline ('before proceeding to booking'). Combined with the sibling list, an agent can distinguish this from post_flights_rates (search) and post_flights_prebooks (booking) without opening a schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The 'When to Use' section gives three concrete situations (pre-booking validation, price confirmation, fare rule retrieval) plus a 'Quick Start' naming the source endpoint. It lacks explicit when-not-to-use or named alternatives, which caps it below a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
post_guests_guestid_loyalty_points_redeemBInspect
Overview
Convert a guest's loyalty points into a discount voucher. Points are converted at a rate of 10 points = $1 USD (or equivalent in the specified currency).
When to Use
Points redemption - Allow guests to convert points to vouchers
Reward fulfillment - Create discount vouchers from points
Loyalty rewards - Enable points-to-cash conversion
What You Get
Voucher code - Unique code the guest can use for discounts
Voucher details - Discount type, value, validity period, and usage limits
Fixed amount voucher - Voucher with a specific discount value
Shareable voucher - Can be used by other guests
Key Features
Conversion rate - 10 points = $1 USD (or equivalent)
Currency support - Specify the currency for the voucher value
Shareable - Vouchers can be shared with other guests
Fixed amount - Creates a fixed discount amount voucher
Quick Start
Provide the guest ID and specify points (amount to redeem) and currency (e.g., "USD"). Returns a voucher code and details.
| Name | Required | Description | Default |
|---|---|---|---|
| points | Yes | Amount of points to redeem. 10 points = $1 USD. | |
| guestId | Yes | Numeric ID of the guest to fetch | |
| currency | Yes | Currency in which the voucher value will be calculated. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=false, idempotentHint=false, destructiveHint=false and openWorldHint=true, so the mutation/repeatability profile is covered by structured data. The description adds the conversion rate and currency handling, which is genuine behavioral context, but says nothing about irreversibility of the point deduction, failure modes (insufficient points), or authorization needs.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The Overview is correctly front-loaded, but the following sections are heavily padded and repetitive: the conversion rate appears three times, 'currency support' twice, and 'shareable'/'fixed amount' are each stated twice. Bullet headings like 'Reward Fulfillment - Create discount vouchers from points' duplicate the preceding bullet verbatim in meaning.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the 'What You Get' section usefully describes the returned voucher code and details, and the Quick Start covers required inputs, so an agent has enough to call it. It stops short of covering error conditions or whether the debit is atomic, which for a points-consuming mutation would be valuable.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% and all three parameters are documented in the schema, so the baseline is 3. The description's Quick Start restates points and currency without adding format constraints, bounds, or valid-currency guidance beyond what the schema already provides.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The Overview states a specific verb and resource: convert a guest's loyalty points into a discount voucher, with a concrete conversion rate (10 points = $1). It is clear enough to act on, but it never distinguishes itself from nearby siblings like post_vouchers or get_guests_guestid_loyalty_points, so an agent must infer the boundary.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is a 'When to Use' heading, but its three bullets ('points redemption', 'reward fulfillment', 'loyalty rewards') are the same action restated with different labels rather than distinct scenarios. No exclusions, no prerequisites (e.g., whether the guest must have sufficient balance), and no named alternative tool.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
post_hotels_min_ratesARead-onlyInspect
Overview
Get the cheapest available rate for each hotel in your list. Perfect for displaying price comparisons without loading full rate details.
When to Use
Show price ranges on hotel listing pages
Quick price comparisons across multiple hotels
Optimize performance when you only need the lowest price, not all rate options
Build price filters or sorting by price
What You Get
Minimum rate per hotel - the cheapest available room option
Basic rate information - price, currency, and availability
Fast response - optimized for quick price lookups
Key Features
Lightweight - Returns only the minimum rate, not all options
Same parameters as the main rates endpoint for consistency
Perfect for listings - Ideal when displaying multiple hotels where users just need to see starting prices
Quick Start
Provide a list of hotel IDs, dates, and guest occupancy. The endpoint returns the cheapest rate available for each hotel.
| Name | Required | Description | Default |
|---|---|---|---|
| checkin | Yes | Check in date in YYYY-MM-DD (ISO 8601) format | |
| timeout | No | Request timeout in seconds | |
| checkout | Yes | Check out date in YYYY-MM-DD (ISO 8601) format | |
| currency | Yes | Booking currency | |
| hotelIds | Yes | List of hotel IDs | |
| occupancies | Yes | ||
| guestNationality | Yes | Guest nationality (ISO 2-code) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, openWorldHint=true, destructiveHint=false, and idempotentHint=false, covering the safety profile. The description adds useful behavioral context beyond annotations: it explains the return content (minimum rate, basic price/currency/availability) and emphasizes lightweight, fast responses.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is front-loaded with an Overview, but it is bloated with redundant marketing phrases across multiple sections (e.g., 'Perfect for displaying price comparisons', 'Lightweight', 'Fast response', 'Ideal when displaying multiple hotels'). Each sentence does not earn its place, though the heading structure itself is clear.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description usefully outlines the return shape (minimum rate, price, currency, availability) and overall purpose. Combined with rich annotations and 86% schema coverage, it is nearly complete for a read-only price lookup, though it omits minor operational details like timeout behavior or batch limits.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 86%, so the schema itself documents nearly all parameters. The description only briefly mentions 'hotel IDs, dates, and guest occupancy' in Quick Start, adding little semantic detail beyond the structured fields.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb+resource: 'Get the cheapest available rate for each hotel in your list.' It distinguishes from the fuller sibling endpoint by contrasting 'without loading full rate details' and 'main rates endpoint'.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
A dedicated 'When to Use' section gives clear scenarios (price ranges, comparisons, performance optimization, price filters) and an implicit exclusion when full rate options are needed. However, it does not name the alternative tool (e.g., post_hotels_rates) explicitly.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
post_hotels_ratesARead-onlyInspect
Overview
Search for hotel rates and availability across multiple hotels. This is your primary endpoint for finding bookable hotel rooms with real-time pricing.
When to Use
Display hotel listings with prices on your search results page
Show detailed rate options for specific hotels users are viewing
Support multi-room bookings for families or groups
Filter hotels by location, amenities, ratings, or AI-powered semantic search
What You Get
Real-time rates with availability and pricing
Multiple room options per hotel, sorted by price
Complete booking details including cancellation policies, meal plans, and room types
Hotel information (name, photos, address, ratings) when searching by filters
Key Features
Multiple search methods: Search by hotel IDs, city/country, coordinates, Place ID, IATA code, or natural language (AI search)
Flexible filtering: Filter by star rating, facilities, hotel chains, accessibility, and more
Multi-room support: Book multiple rooms with different guest configurations in one request
Performance optimized: Default limit of 200 hotels (expandable to 5,000), recommended timeout of 6-12 seconds
Price consistency: Optional
sessionIdensures rates stay consistent across listing and detail searches within a user session (accounts with price consistency enabled)
Quick Start
Required fields: checkin, checkout, currency, guestNationality, occupancies, plus one location method (hotel IDs, city/country, coordinates, Place ID, or IATA code)
Tip: When searching by filters (like aiSearch or cityName), hotel data is automatically included. For direct hotel ID searches, set includeHotelData=true to include hotel names and photos.
Price consistency: Generate a unique sessionId per user search session and include it on every rates request in that session, using the same checkin, and checkout.
| Name | Required | Description | Default |
|---|---|---|---|
| zip | No | The zip code of the search location. This is a filter on top of the main query. | |
| feed | No | Which feed to use when searching for rates. This applies only to accounts with multiple feeds enabled | |
| sort | No | Sorting criteria for the results. Multiple criteria can be provided, processed in order. The default sorting is by top picks (weighted by search popularity, review quality, and content completeness). Use 'revenue' to sort by historical booking value and monetary performance. | |
| limit | No | The maximum number of results to return. Defaults to 200, max allowed is 5000. | |
| margin | No | Override the markup percentage for this specific request. When provided, this value takes precedence over your account-level margin setting, allowing you to dynamically adjust pricing based on your business logic, customer segments, or other factors. Specified as a percentage number (e.g., `10` for 10% commission). | |
| offset | No | The number of results to skip for pagination. This paginates the passed hotels not the results returned so the actual returned results will vary. | |
| radius | No | The search radius in meters for location-based searches. Pairs with latitude to do a lat/long search. | |
| stream | No | If true, enables streaming mode where response data is sent incrementally instead of as a single payload. | |
| checkin | Yes | The check-in date in YYYY-MM-DD format (ISO 8601). | |
| placeId | No | The unique Place ID of the search location. Instead of using hotel IDs, pass a Place ID to get all the hotels in the specified region. This is a valid main query. | |
| timeout | No | The maximum time in seconds before the request times out. This is when the live request for rates will cut off responses; it will take a few more ms to return the value. | |
| aiSearch | No | AI-powered hotel search based on a natural language query. Uses semantic search to find hotels matching the query intent. Examples: 'Romantic getaway with Italian vibes in London near the London Eye', 'hotels near Paris'. This is a valid main query. | |
| bedTypes | No | Filter results by bed types extracted from room names. Only rates from rooms matching the specified bed types will be returned. Example values: 'double', 'twin', 'king', 'queen', 'single'. | |
| chainIds | No | An array of hotel chain IDs to filter the search results. This is a filter on top of the main query. | |
| checkout | Yes | The check-out date in YYYY-MM-DD format (ISO 8601). | |
| cityName | No | The name of the city to search for hotels in. Pairs with countryCode to do a country/city search. | |
| currency | Yes | The currency in which the prices will be displayed. | |
| hotelIds | No | An array of hotel IDs to search for availability and pricing. These are usually pulled from https://docs.liteapi.travel/reference/get_data-hotels. | |
| iataCode | No | The IATA code of the search location, typically an airport code. Instead of using hotel IDs, you can search by IATA code. This is a valid main query. | |
| latitude | No | The latitude coordinate for location-based hotel searches. Instead of using hotel IDs, you can search by lat/long and a radius around that spot. This is a valid main query. | |
| boardType | No | Filter results by board type(s). Can be a single value (e.g., 'BI') or comma-separated values (e.g., 'BI,HB') for OR logic. Example values: RO (Room Only), BI (Breakfast Included), HB (Half Board), FB (Full Board), AI (All Inclusive), DI (Dinner Included), LI (Lunch Included), BDI (Breakfast and Dinner Included), BLI (Breakfast and Lunch Included), LDI (Lunch and Dinner Included). | |
| hotelName | No | A case-insensitive search for a hotel's name (e.g., 'Hilton'). | |
| longitude | No | The longitude coordinate for location-based hotel searches. Pairs with latitude to do a lat/long search. | |
| minRating | No | The minimum rating (on a scale of 0-5) required for hotels in search results. This is a filter on top of the main query. | |
| sessionId | No | Optional client-generated session identifier that ensures price consistency for the user's search session. When your account has price consistency enabled, pass the same `sessionId` with the same `checkin` and `checkout` across related requests in that session. Has no effect when price consistency is not enabled for your account. | |
| facilities | No | An array of facility IDs. Results will include hotels with at least one of these facilities by default. This is a filter on top of the main query. | |
| starRating | No | An array of hotel star ratings to include. Ratings are rounded to the nearest half-star (e.g., [3.5, 4.0, 4.5, 5.0]). This is a filter on top of the main query. | |
| countryCode | No | The country code in ISO 2-letter format (e.g., 'SG' for Singapore). Instead of using hotel IDs, you can search by country/city. This is a valid main query. | |
| occupancies | Yes | An array of objects specifying the number of guests per room. Required. | |
| roomMapping | No | Enable room mapping to retrieve the mappedRoomId for each room. This allows you to link a rate to its specific room by combining it with hotel details, providing access to room images and additional information | |
| hotelTypeIds | No | An array of hotel type IDs to filter the search results. This is a filter on top of the main query. | |
| roomAmenities | No | Legacy room-level amenity filter. Only rates from rooms that match the specified amenities will be returned. Use amenityFilterLogic to control flat AND/OR behavior. If roomAmenitiesFilter is provided, it takes precedence over this field. | |
| loyaltyProgram | No | Loyalty program identifier used to request loyalty-eligible rates from supported suppliers. When set, rates that support the program may return member pricing and benefits. | |
| minReviewsCount | No | The minimum number of reviews a hotel must have to be included in results. This is a filter on top of the main query. | |
| guestNationality | Yes | The guest's nationality in ISO 2-letter country code format. | |
| includeHotelData | No | If `true`, includes hotel data (name, main photo, address, rating) in the response even when searching by direct hotel IDs. By default, hotel data is only included when searching by filters (e.g., using `aiSearch`, `countryCode`, `cityName`, etc.). Setting this to `true` enables hotel data inclusion for all search types. | |
| maxRatesPerHotel | No | The number of room rates to return per hotel, sorted by price (cheapest first). Set to 1 to just get the cheapest rate for each hotel, this is helpful for listing pages. | |
| amenityFilterLogic | No | Legacy logic applied to roomAmenities. 'AND': room must have all specified amenities. 'OR': room must have at least one specified amenity. Ignored when roomAmenitiesFilter is provided. | |
| refundableRatesOnly | No | If true, only refundable rates (RFN) will be included in the response. | |
| roomAmenitiesFilter | No | Grouped room-level amenity filter. Use '-' for OR within a group and ',' for AND across groups. Example: '1-2,3-4' means (1 OR 2) AND (3 OR 4). If provided, this field takes precedence over roomAmenities and amenityFilterLogic. | |
| loyaltyProgramDetails | No | Loyalty membership details forwarded to supported suppliers to unlock member rates and benefits. Provide one entry per loyalty program membership. | |
| strictFacilityFiltering | No | If enabled, only hotels with all specified facilities will be returned. | |
| advancedAccessibilityOnly | No | If true, only hotels with advanced accessibility features will be returned. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, openWorldHint=true, idempotentHint=false, and destructiveHint=false. The description adds meaningful behavioral context beyond those annotations: default limit of 200 with a max of 5,000, recommended timeout of 6–12 seconds, sessionId price consistency, and includeHotelData behavior.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is long, but its length is justified by the tool's 43-parameter search surface. It is front-loaded with an overview and organized into useful sections, though there is some repetition between 'What You Get' and 'Key Features' that could be tightened.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a complex search endpoint with 43 parameters and no output schema, the description is complete enough: it covers required inputs, search methods, key behaviors, return content, and quick-start guidance. It does not need to restate every schema-level parameter because schema coverage is full.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the baseline is 3. The description adds useful cross-parameter semantics by stating the required base fields and the need for one location method among hotel IDs, city/country, coordinates, Place ID, or IATA code, plus sessionId usage across related requests.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource: 'Search for hotel rates and availability across multiple hotels,' and calls itself the 'primary endpoint for finding bookable hotel rooms with real-time pricing.' This clearly distinguishes it from adjacent tools such as post_hotels_min_rates and post_rates_book.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The 'When to Use' section gives explicit usage contexts, including displaying hotel listings, showing detailed rates, supporting multi-room bookings, and filtering hotels. However, it does not name exclusion cases or point to sibling alternatives when this tool is not appropriate.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
post_rates_bookAInspect
Overview
Step 2 of 2 in the booking flow. Complete the booking by providing guest information and payment details. This confirms the reservation and creates the final booking.
When to Use
After prebook - Call this after creating a prebook session
Payment processing - Submit payment information to confirm booking
Booking confirmation - Finalize the reservation
What You Get
Booking ID - Unique identifier for the confirmed booking
Hotel confirmation code - Reference code from the hotel
Complete booking details - Dates, pricing, room information
Cancellation policies - Terms for cancelling the booking
Guest information - Confirmed guest details
Payment Methods
ACC_CREDIT_CARD - Direct credit card payment. In sandbox mode, this can be used to simulate a booking without getting charged.
TRANSACTION - Use when using Payment SDK (provide
transactionId)WALLET - Wallet payment method
CREDIT - Use account credit balance
CREDIT_CARD - Credit card payment via secure endpoint. Accepts any credit or debit card, including virtual credit cards. Send card details via
https://pci-book.liteapi.travelusing thebillingInfoobject. Contact the team to enable this on your API key.
Testing
When testing sandbox bookings, simply use the ACC_CREDIT_CARD payment method. This allows you to simulate a booking without getting charged.
Required Information
Prebook ID - From the prebook step
Guest details - First name, last name, and email
Payment information - Payment method and details
Quick Start
Provide the prebookId, guest information (firstName, lastName, email), and payment details. Returns confirmed booking with booking ID and confirmation code.
| Name | Required | Description | Default |
|---|---|---|---|
| guests | Yes | This represents a list of all individuals included in the hotel reservation | |
| holder | Yes | Information on the person responsible for making the payment. This may not necessarily be the traveler | |
| payment | No | Specifies the payment method for completing the booking | |
| timeout | No | ||
| metadata | No | Encapsulates essential metadata for fraud detection and compliance, including IP, location, language, device details, and marketing parameters. | |
| prebookId | Yes | This identifier from the pre-booking step is used to confirm a booking rate | |
| customTags | No | Optional bag of up to 5 user-defined key/value labels persisted with the booking. Keys must match `^[A-Z0-9_-]+$` (uppercase letters, digits, `-`, `_`). Values are arbitrary strings up to 255 characters. These labels are returned on booking responses and can be used to filter the list endpoints via the `customTags=KEY:VALUE,KEY2:VALUE2` query parameter. | |
| guestPayment | No | The payment method used for the transaction. This determines where the money for the booking comes from. Recommended to be added when you are merchant of record to improve the fraud detection system. | |
| clientReference | No | An optional client-defined reference ID acts as an idempotency key to prevent duplicate bookings. If a booking already exists with the same client reference, the API will return a 4005 error. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly=false/idempotent=false/openWorld, so the description is not carrying the safety profile. It adds real behavioral value beyond that: which payment methods exist, that ACC_CREDIT_CARD is simulation-only in sandbox (no charge), the secure-endpoint requirement for CREDIT_CARD, and the fields returned on success. It doesn't call out auth/permission requirements or rate limits.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Well front-loaded with the step and flow position, but the markdown sections overlap: 'Payment Methods' and 'Testing' repeat the same sandbox guidance, and 'Required Information' and 'Quick Start' restate the same inputs. Several sentences could be merged without losing meaning.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the 'What You Get' section usefully describes the return shape (booking ID, hotel confirmation code, policies). For a 9-parameter mutation with nested objects, it covers the required inputs and payment semantics adequately, though guest/holder field detail is left to the schema.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 89%, so the baseline is 3, but the description goes further by enumerating the payment method values (ACC_CREDIT_CARD, TRANSACTION, WALLET, CREDIT, CREDIT_CARD) for the `payment` parameter, which has no type or enum in the schema. This materially compensates for the zero-enum schema and clarifies required inputs.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource (complete a booking by confirming a rate) and explicitly positions itself as 'Step 2 of 2' in the booking flow. This cleanly distinguishes it from post_rates_prebook (step 1) and post_rates_rebook among the many booking-related siblings.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
'When to Use' gives clear context (after prebook, to process payment, to confirm a booking) and the flow prerequisites are unambiguous. It does not explicitly contrast with post_rates_rebook, which is the nearest ambiguous sibling, so it stops short of full routing guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
post_rates_prebookAInspect
Overview
Step 1 of 2 in the booking flow. Create a prebook session to check the availability of a rate and get final pricing before payment. This prebookId needed to complete the booking.
When to Use
Before payment - Always call this before completing a booking
Rate confirmation - Verify final pricing and availability
Session creation - Generate a checkout session for your payment flow
What You Get
Prebook ID - Required for the next step (completing the booking)
Final pricing - Confirmed rates with all fees and taxes
Terms and conditions - Cancellation policies and booking rules
Room details - Complete information about the selected rooms
Key Features
Live availability check - Verifies the rate is available before you collect payment
Payment SDK support - Set
usePaymentSdk=trueto use client-side payment formsReusable - PrebookId can be used for multiple bookings if needed
Quick Start
Provide the offerId from your hotel rates search and set usePaymentSdk (true/false). Returns a prebookId to use in the next step.
Next Step: Use the prebookId with /rates/book to complete the booking.
| Name | Required | Description | Default |
|---|---|---|---|
| addons | No | A list of additional services or extras that can be added to the booking. For example, adding an Uber voucher or an esim card. The final booking amount is the sum of the offer's total price and the cost of any addons. Each addon's price is added individually to reflect all extras in the billed total. | |
| offerId | Yes | The unique identifier of the selected offer from the search results. | |
| payment | No | Optional payment configuration when usePaymentSdk is true | |
| timeout | No | ||
| bedTypeIds | No | An optional array of bed type IDs to specify preferred bed configurations for the rooms being booked. The availability of specific bed types depends on the hotel's inventory. | |
| voucherCode | No | An optional voucher code to apply discounts to the booking. The vouchers API allows creation of these discounts | |
| usePaymentSdk | Yes | Specifies whether the fields needed to call the payment processing SDK are returned. Set to true if using the SDK for payment processing. | |
| includeCreditBalance | No | Optional flag to include credit line information in the response. When set to true, credit line details will be returned if the user has a credit line available. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=false, openWorldHint=true, idempotentHint=false, and destructiveHint=false. The description adds useful behavioral context beyond annotations, including that it creates a reusable prebook session, performs a live availability check, and returns final pricing and terms. It does not cover authentication, rate limits, or session expiration.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is front-loaded with an Overview and uses clear sections, making it scannable. However, it is longer than necessary and repeats key points across When to Use, What You Get, Key Features, and Quick Start.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
There is no output schema, so the description appropriately lists what the tool returns: prebookId, final pricing, terms and conditions, and room details. It also covers the workflow position and next step, making it complete enough for an agent to call and use the result correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 88%, so the schema already documents nearly all parameters. The description adds minor usage context for the required offerId and usePaymentSdk parameters but does not explain the optional parameters (addons, payment, timeout, bedTypeIds, voucherCode, includeCreditBalance) beyond what the schema provides.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource: create a prebook session to check rate availability and obtain final pricing. It also distinguishes the tool's role as Step 1 of 2 in the booking flow and names the next sibling endpoint, /rates/book.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It explicitly states when to use the tool: before payment, for rate confirmation, and for session creation. It also tells the agent to provide the offerId from hotel rates search and to use the resulting prebookId with /rates/book, making the workflow unambiguous.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
post_rates_rebookAInspect
Overview
Step 2 of 2 in the hard amendment flow. Use a prebookId produced by POST /bookings/{bookingId}/alternative-prebooks to create the replacement booking. On success, the new booking is created and the original booking is automatically cancelled — you do not need to call the cancel endpoint.
When to Use
After alternative-prebooks — Once the guest has chosen one of the alternative prebooks returned by
POST /bookings/{bookingId}/alternative-prebooks.Date or occupancy changes — The guest needs different check-in/check-out dates or a different number of adults/children at the same hotel.
Hard amendments only — For simple guest-name updates use
PUT /bookings/{bookingId}/amendinstead.
How It Works
The provided
prebookIdis validated against the booking referenced byexistingBookingId(it must have been produced by analternative-prebookscall for that booking).The new booking is created with the supplier using the alternative rate.
The original booking is then automatically cancelled. If the cancellation fails after the new booking is confirmed, the error is logged but the new booking is still returned — contact support to reconcile.
Payment
No payment is collected on this endpoint. The
payment.methodvalue is ignored — the request body must still include apaymentobject to satisfy the schema, but the server forces the method toNONEinternally. Any price delta between the original and new rate is settled out of band.
Refundable vs Non-refundable Originals
Refundable original — Returns
200 OKwith the new booking, and the original is cancelled immediately.Non-refundable original — Returns
202 Acceptedwith a booking amendment record. The request is queued for the Nuitee operations team to handle manually (the original booking may incur cancellation fees).
Required Information
prebookId — A prebook session returned by
POST /bookings/{bookingId}/alternative-prebooks.existingBookingId — The
bookingIdof the original confirmed booking being replaced. Must match thebookingIdthat produced the prebook.holder and guests — Same structure as
POST /rates/book. Ifholderfields are empty they are copied from the original booking.
Quick Start
Call
POST /bookings/{bookingId}/alternative-prebooksand pick one of the returnedprebookIdvalues.Call this endpoint with that
prebookId, the originalbookingIdasexistingBookingId, and guest information.On success, the new booking is confirmed and the original is cancelled — no further calls are needed.
| Name | Required | Description | Default |
|---|---|---|---|
| guests | Yes | List of guests for the new booking. There is a 1:1 mapping between guests and rooms (one guest entry per `occupancyNumber`). | |
| holder | Yes | Information on the person responsible for the booking. Any field left empty is populated from the original booking's holder. | |
| payment | Yes | Required by the schema but ignored. The server forces the payment method to `NONE` for rebooks — no charge is taken on this endpoint. Send `{"method": "NONE"}` to be explicit. | |
| timeout | No | Optional request timeout in seconds. | |
| prebookId | Yes | A prebook session returned by `POST /bookings/{bookingId}/alternative-prebooks`. Must reference the same booking as `existingBookingId`. | |
| customTags | No | Optional bag of up to 5 user-defined key/value labels persisted with the booking. Keys must match `^[A-Z0-9_-]+$` and values are strings up to 255 characters. See `POST /rates/book` for the full description. | |
| trackingId | No | Optional tracking ID for analytics or partner attribution. | |
| clientReference | No | An optional client-defined reference ID. Acts as an idempotency key to prevent duplicate rebooks. If a booking already exists with the same client reference, the API will return a 4005 error. | |
| existingBookingId | Yes | The `bookingId` of the confirmed booking being replaced. The original booking is cancelled automatically when the new booking is confirmed. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description openly discloses that 'the original booking is automatically cancelled', that cancellation failures are logged while the new booking is still returned, and that non-refundable originals queue for manual handling. However, this directly contradicts the annotation destructiveHint=false, since cancelling a confirmed booking is a destructive side effect. Per the rules, a description that contradicts annotations scores 1.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with markdown headers and ordered sections; the critical side effect (auto-cancellation) is stated early in the Overview. It is longer than strictly necessary (the 'Quick Start' largely repeats the numbered flow), but the length is justified by the multi-step, multi-outcome nature of the operation.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 9-parameter, nested-object, no-output-schema mutation tool, this covers everything an agent needs: required vs defaulted fields, the 200 vs 202 branch by refundability, partial-failure behavior, and payment semantics. Nothing material is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is already 100%, so the baseline is 3, but the description adds real semantic value the schema lacks: payment.method is forced to NONE regardless of input, holder fields default from the original booking, clientReference acts as an idempotency key returning error 4005, and there is a 1:1 guest/occupancy mapping.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource ('create the replacement booking' via a `prebookId`), places it precisely as 'Step 2 of 2 in the hard amendment flow', and explicitly tells the agent it does NOT need to call cancel. It is unambiguously distinguishable from `put_bookings_bookingid_amend`, which it names.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The 'When to Use' section gives explicit triggers (after alternative-prebooks, date/occupancy changes) and an explicit exclusion with the alternative: 'For simple guest-name updates use PUT /bookings/{bookingId}/amend instead.' No inference required.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
post_vouchersAInspect
Overview
Create discount vouchers that customers can apply to their hotel and flight bookings. Supports percentage discounts, fixed amounts, and points redemption vouchers.
When to Use
Promotional campaigns - Create discount codes for marketing
Customer rewards - Generate vouchers for loyal customers
Special offers - Create time-limited discount vouchers
Points redemption - Generate vouchers from loyalty points
What You Get
Voucher object - Complete voucher details including code and settings
Usage tracking - Remaining uses count
Validation - Confirmation that the voucher was created successfully
Key Features
Multiple discount types - Percentage, fixed amount, or points redemption
Flexible rules - Set minimum spend, maximum discount, and usage limits
Validity control - Define start and end dates
Guest assignment - Optionally assign to specific guests
Applies to hotels and flights - Pass the
voucherCodein thevoucherCodefield of/rates/prebook(hotels) or/flights/prebooks(flights) to redeem the discount at checkout
Quick Start
Provide voucher code, discount type, value, currency, validity dates, usage limits, and status. Returns the created voucher with all details.
| Name | Required | Description | Default |
|---|---|---|---|
| budget | No | Total monetary pool the voucher can distribute across all redemptions, in the voucher's currency. If not set or 0, there is no monetary limit and usage is only controlled by usages_limit. When set, budget and usages_limit act as independent limits — whichever is exhausted first will reject the voucher. | |
| status | Yes | Current status of the voucher (e.g., active, inactive) | |
| currency | Yes | Currency in which the discount is offered | |
| guest_id | No | The unique identifier of the guest associated with the voucher | |
| description | No | A brief description of the voucher, detailing its purpose or offer | |
| usages_limit | Yes | Maximum number of times the voucher can be redeemed | |
| validity_end | Yes | Date until which the voucher remains valid | |
| voucher_code | Yes | A unique code for the new voucher. e.g. manhattan-holidays-100 | |
| discount_type | Yes | Type of discount, such as percentage, or points_redemption | |
| minimum_spend | Yes | Minimum rate to apply the discount voucher in the voucher currency. e.g. a minimum_spend of USD$100 will only apply for bookings with a price USD$100 or more | |
| discount_value | Yes | Value of the discount applied by the voucher. For percentage discounts, a value of 10 represents a 10% discount. For points_redemption, it indicates the fixed amount of points to be redeemed e.g. 10 equals 10 points | |
| validity_start | Yes | Date from which the voucher becomes valid | |
| terms_and_conditions | No | Terms and conditions associated with the voucher | |
| maximum_discount_amount | Yes | Maximum discount amount that can be applied using the voucher in voucher currency. e.g. a with a maximum_discount_amount of 50 in USD, will discount from 0 to USD$50 |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already disclose that this is a non-read-only, non-idempotent write operation, so the bar is lower. The description adds useful behavioral context by explaining what is returned (voucher object, usage tracking, validation confirmation) and how the voucher is redeemed in hotel and flight flows, though it does not discuss duplicate-call risk or permissions.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured with front-loaded headings and an Overview that appears first. It is somewhat long and has some redundancy across 'What You Get' and 'Key Features,' but the length is defensible for a 14-parameter creation tool.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the complexity of 14 parameters, 10 required fields, and no output schema, the description covers purpose, usage scenarios, return behavior, and redemption mechanics. It does not cover authentication, error cases, or non-idempotent duplicate-call risk, but it is largely complete for correct invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents all 14 parameters thoroughly, including nuanced fields like budget, minimum_spend, and discount_value. The description mostly repeats required inputs in the Quick Start and does not add significant syntax or constraint detail beyond what the schema provides.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb and resource: 'Create discount vouchers that customers can apply to their hotel and flight bookings.' It also names the supported discount types, which makes the tool easily distinguishable from retrieval, update, and delete voucher siblings such as get_vouchers, put_vouchers_id, and delete_Voucher.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The 'When to Use' section gives clear contextual scenarios (promotional campaigns, customer rewards, special offers, points redemption), which helps an agent recognize appropriate calls. It does not state when not to use the tool or explicitly name alternative siblings, so it falls short of a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
prebookExperienceTourAInspect
Overview
Create a temporary hold on the selected tour slot and a Stripe PaymentIntent for checkout.
When to Use
Checkout start — After the user picks option, slot, and participants from booking-options
Payment setup — Obtain
transactionIdandsecretKeyfor Stripe SDK confirmationHold window — Reserve inventory for ~10 minutes before book
What You Get
Checkout context —
tourId,optionId,dateTime,language,participants, and pricing echoed backProvider refs —
cartId,experienceBookingId,providerBookingId,status,reservationExpiresAtStripe fields —
transactionId,secretKey,paymentTypes: ["TRANSACTION_ID"]
Quick Start
POST the same selection used for display pricing from booking-options with usePaymentSdk: true. Confirm payment with Stripe, then call POST /experiences/bookings.
| Name | Required | Description | Default |
|---|---|---|---|
| payment | No | Optional Stripe metadata (e.g. statement descriptor suffix). | |
| currency | Yes | ISO 4217 currency code used for validate and downstream book cart. | |
| language | Yes | ISO language code used for validate and downstream book cart. | |
| selection | Yes | ||
| usePaymentSdk | Yes | Phase 1 requires `true` to create a Stripe PaymentIntent. | |
| clientReferenceId | No | Partner reference echoed in prebook response and stored on the checkout session. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With annotations already covering mutation/safety profile, the description adds meaningful behavior: a temporary inventory hold of about 10 minutes, creation of a Stripe PaymentIntent, and the returned provider and Stripe references. This goes well beyond the structured hints.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The markdown structure is front-loaded with Overview, When to Use, What You Get, and Quick Start. Despite its length, every section serves a distinct purpose for a complex checkout-preparation tool.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a nested-schema tool with no output schema, the description supplies the missing return context, the Stripe flow, and the next step after confirmation. It is complete enough for correct invocation and sequencing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is already 83%, so the schema carries most parameter meaning. The description adds only light context, mainly that the selection should match what was used for display pricing and that usePaymentSdk must be true, which is already documented in the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource: 'Create a temporary hold on the selected tour slot and a Stripe PaymentIntent for checkout.' It clearly distinguishes this prebook/hold operation from the final booking step referenced later.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The 'When to Use' section gives clear triggering conditions (after booking-options selection, for payment setup, within the hold window) and the Quick Start sequences the next call. It lacks explicit when-not-to-use guidance or named sibling alternatives, but the context is strong.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
prechargeFlightExtraChargesAInspect
Overview
Creates a pending post-booking extra-charge batch for an existing flight booking and returns an opaque chargesId. For Stripe-paid bookings, also creates a PaymentIntent (transactionId + secretKey) when usePaymentSdk is true.
Access
Requires Flights API access. Post-booking extra charges are not enabled by default — contact the LiteAPI support team to request access.
When to Use
Attach fees after confirmation (seat change, baggage, admin adjustment)
Obtain a Stripe client secret so the customer can confirm payment before
POST .../extra-charges/charges
What You Get
chargesId— Opaque token required by/extra-charges/charges(do not re-send charge lines)paymentTypes— Locked to the booking's original payment (TRANSACTION_IDorCREDIT)transactionId/secretKey— Present for Stripe bookings whenusePaymentSdkis trueExisting extras totals plus pending batch totals
Constraints
Booking status must be
CONFIRMEDorPENDING_CONFIRMATIONAll lines in one request must share the same currency
Payment method on
/chargesmust match the original booking payment
| Name | Required | Description | Default |
|---|---|---|---|
| charges | Yes | Charge lines to attach. All lines must use the booking sellingCurrency. | |
| bookingId | Yes | Flight booking identifier | |
| usePaymentSdk | No | Required true for Stripe bookings so a PaymentIntent is created. Ignored for CREDIT bookings. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations cover safety/idempotency, and the description adds substantial non-obvious behavior on top: the batch is pending until the second call, the opaque `chargesId` must not be re-sent with charge lines, access is gated behind a support request, payment type is locked to the original booking payment, and Stripe PaymentIntent creation depends on `usePaymentSdk`. These are genuine operational preconditions not derivable from the annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Headings (Overview, Access, When to Use, What You Get, Constraints) front-load the purpose and make scanning easy. It is somewhat long for three parameters, with mild overlap between the overview's PaymentIntent mention and the return-value list, but nearly every line carries actionable information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
There is no output schema, so the 'What You Get' section is essential and it fully enumerates the returned artifacts and their downstream use. Combined with the access gating, booking-status and currency constraints, and payment-matching rule, an agent has everything needed to invoke this correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3, but the description still adds meaning: charge lines must all share the booking's sellingCurrency, and `usePaymentSdk` interacts with booking payment type (Stripe vs CREDIT) in a way the schema only partially conveys. It does not add syntax-level detail beyond that.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Creates a pending post-booking extra-charge batch for an existing flight booking') and names the primary artifact returned (`chargesId`). It also fixes the tool's place in the two-step flow by referencing `/extra-charges/charges` as the subsequent call, which distinguishes it from the sibling `chargeFlightExtraCharges`.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The 'When to Use' section gives concrete triggers (seat change, baggage, admin adjustment, obtaining a Stripe client secret) and the Access section flags that the feature must be enabled by support. It stops short of explicitly saying when not to use this versus the sibling `chargeFlightExtraCharges`, referring to it only by path.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
put_bookings_bookingidADestructiveIdempotentInspect
Overview
Cancel an existing confirmed booking. Cancellation policies determine whether a full refund, partial refund, or charges apply.
When to Use
Guest cancellation - Allow guests to cancel their bookings
Administrative cancellation - Cancel bookings from admin panels
Policy enforcement - Apply cancellation policies automatically
What You Get
Cancellation status - Success or failure of cancellation
Charges information - Any fees or charges that apply
Refund details - Amount refunded (if applicable)
Updated booking status - Booking marked as cancelled
Cancellation Outcomes
CANCELLED - Fully refundable, no charges
CANCELLED_WITH_CHARGES - Non-refundable or past cancellation deadline, charges apply
Cancellation policies - Applied automatically based on booking terms
Important Notes
Non-refundable bookings - Will be cancelled but still charged (status: CANCELLED_WITH_CHARGES)
Policy enforcement - Cancellation policies are automatically applied
Past deadline - Cancellations after the policy deadline may incur charges
Quick Start
Provide the bookingId in the URL path. Returns cancellation status and any applicable charges or refunds.
| Name | Required | Description | Default |
|---|---|---|---|
| timeout | No | request timeout in seconds | |
| bookingId | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true and idempotentHint=true, and the description goes well beyond that: it explains that non-refundable bookings are still cancelled but charged (CANCELLED_WITH_CHARGES), that policies apply automatically, and that post-deadline cancellations incur fees. This is exactly the behavioral consequence detail an agent needs before invoking a destructive tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The sectioned markdown is well front-loaded, but charges and refunds are restated across Overview, 'What You Get,' 'Cancellation Outcomes,' and 'Important Notes' — the same information three or four times for a one-parameter tool. It could be roughly halved without losing meaning.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
There is no output schema, and the description ably fills that gap by enumerating return content (cancellation status, charges, refunds, updated booking status). Behavior, outcomes, and side effects are covered; only the timeout parameter and sibling differentiation remain unaddressed.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With two parameters and 50% schema coverage, the bookingId field has no schema description — but the description compensates by specifying that it is provided 'in the URL path.' The timeout parameter is undocumented in both schema and description. Adequate but not complete.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource: 'Cancel an existing confirmed booking,' which is unambiguous. However, it never differentiates itself from the closely related sibling put_bookings_bookingid_amend, which an agent could easily confuse with this cancellation endpoint.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
A dedicated 'When to Use' section gives clear scenarios (guest cancellation, administrative cancellation, policy enforcement), which is solid context. It stops short of exclusions or routing rules — it never says when to use amend instead, or when cancellation is NOT permitted.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
put_bookings_bookingid_amendAIdempotentInspect
Overview
Update guest information (name and email) for an existing booking. Useful for correcting typos or updating guest details after booking.
When to Use
Name corrections - Fix typos in guest names
Email updates - Update guest email addresses
Guest changes - Change guest information after booking
Support requests - Update booking details per customer requests
What You Get
Confirmation - Success message when amendment is complete
Updated booking - Booking reflects the new guest information
Editable Fields
First name - Guest's first name
Last name - Guest's last name
Email - Guest's email address
Remarks - Optional additional notes
Limitations
Holder only - Only the booking holder's information can be updated
Name and email - Other guest details cannot be amended
Quick Start
Provide the bookingId and updated guest information (firstName, lastName, email). Optionally include remarks. Returns confirmation of the update.
| Name | Required | Description | Default |
|---|---|---|---|
| holder | Yes | ||
| remarks | No | Optional remarks for the amendment request. | |
| bookingId | Yes | (Required) The unique identifier of the booking to amend. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=false, idempotentHint=true, destructiveHint=false, so the safety profile is covered. The description adds real beyond-annotation behavior: a holder-only limitation and the statement that other guest details cannot be amended, which materially constrains the call.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The overview is front-loaded, but four markdown sections restate the same content: 'When to Use' bullets repeat the overview, 'What You Get' and 'Quick Start' repeat the editable-fields/quick-start information again. Roughly half the text is redundant padding for a 3-parameter tool.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description usefully states what is returned (a confirmation and the updated booking). It covers the key limitation and required inputs, though it never mentions idempotency and misstates the editable field set by excluding phone.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 67% with a documented nested holder object, so the schema carries most parameter meaning and baseline 3 applies. The description enumerates editable fields but actively omits 'phone' (present in the schema) while claiming 'other guest details cannot be amended', which is a mild inconsistency rather than added clarity.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The Overview states a specific verb+resource (update guest information - name and email - for an existing booking), which is clear and distinct from read siblings like get_bookings_bookingid. It does not name the close sibling put_bookings_bookingid or explain how 'amend' differs from the full update, so it stops short of full sibling differentiation.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
A dedicated 'When to Use' section gives concrete contexts (typo fixes, email updates, support requests), which is more than implied usage. However it offers no exclusions or alternatives (e.g., when to use put_bookings_bookingid instead), so it stays at clear-context without guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
put_loyaltiesAIdempotentInspect
Overview
Configure your loyalty program settings, including enabling/disabling the program and setting cashback rates.
When to Use
Program activation - Enable or disable your loyalty program
Rate adjustments - Update cashback percentages
Program management - Change loyalty program configuration
A/B testing - Test different cashback rates
What You Get
Confirmation - Updated program settings
Status - Current program status (enabled/disabled)
Cashback rate - Active cashback percentage
Key Features
Enable/disable - Turn your loyalty program on or off
Cashback control - Set the percentage guests earn (e.g., 0.1 = 10%)
Immediate effect - Changes apply to new bookings right away
Quick Start
Send the new status ("enabled" or "disabled") and cashbackRate (decimal, e.g., 0.1 for 10%). Both fields are required.
| Name | Required | Description | Default |
|---|---|---|---|
| status | Yes | Loyalty program status, either enabled or disabled | |
| cashbackRate | Yes | Cashback rate in percentage, e.g. 0.1 = 10% |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=false, openWorldHint=true, idempotentHint=true, and destructiveHint=false, so the safety profile is covered. The description adds useful behavioral context beyond annotations, including 'Immediate effect - Changes apply to new bookings right away' and the return information in 'What You Get.' It does not cover permissions or error behavior, but the annotations lower the bar.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The markdown structure is front-loaded with an Overview and useful sections, but the content is repetitive for a simple two-parameter tool. Enable/disable and cashback rate concepts are repeated across 'When to Use,' 'Key Features,' and 'Quick Start,' reducing conciseness. It is adequately structured but not tight.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given low complexity, 100% schema coverage, rich annotations, and no output schema, the description is mostly complete. It explains parameters, required fields, immediate effect, and expected confirmation/status results. It omits permission or error context, but the definition is sufficient for correct invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, and both parameters are documented in the schema with enum and example details. The description repeats the same required fields and examples ('status' as 'enabled' or 'disabled', 'cashbackRate' as decimal e.g. 0.1 for 10%) without adding constraints or syntax beyond the schema. Baseline 3 is appropriate when the schema does the heavy lifting.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states a specific verb and resource: 'Configure your loyalty program settings, including enabling/disabling the program and setting cashback rates.' This distinguishes the tool from read-oriented siblings like get_loyalties, though it does not explicitly name an alternative or contrast with them. The purpose is clear and actionable.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The 'When to Use' section provides clear contexts: program activation, rate adjustments, program management, and A/B testing. It does not state when not to use the tool or name alternative siblings, but it gives sufficient positive guidance for an agent to select it correctly.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
put_supply_customizationBIdempotentInspect
Overview
Configure your supply customization preferences, including enabling or disabling advanced accessibility options for hotel searches.
When to Use
Enable features - Turn on advanced accessibility filtering
Customize supply - Adjust how hotel results are filtered
Accessibility control - Control whether advanced accessibility hotels are included
What You Get
Updated settings - Confirmation with your new configuration
Current state - Your active supply customization settings
Key Features
Advanced accessibility - Enable/disable filtering for hotels with advanced accessibility features
Search impact - Settings affect hotel search results
Quick Start
Provide advancedAccessibility (boolean) to enable or disable advanced accessibility options. Returns updated settings.
| Name | Required | Description | Default |
|---|---|---|---|
| advancedAccessibility | Yes | Indicates if advanced accessibility options should be enabled for the user |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The annotations already disclose that this is a non-readonly, idempotent mutation that is not destructive and operates in an open world. The description adds some useful context, namely that settings affect hotel search results and that updated settings are returned, but it does not add deep behavioral detail beyond that.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is heavily formatted with many sections and repetitive bullet points for a tool that takes only one boolean parameter. While it is front-loaded with an Overview, the amount of redundant prose makes it far from concise.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple one-parameter mutation tool with 100% schema coverage and annotations, the description is more than sufficient. It covers what the tool does, when to use it, and what it returns; the only minor gap is that it does not reference the sibling read tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema fully documents the single parameter advancedAccessibility, including its boolean type and meaning. The description repeats this in the Quick Start section without adding syntax, format, or side-effect details beyond what the schema already provides.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool configures supply customization preferences, specifically enabling or disabling advanced accessibility options for hotel searches. It uses a specific verb and resource, but it does not distinguish itself from the sibling read tool get_supply_customization.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
A 'When to Use' section exists, but its bullets largely restate the purpose rather than providing true when-to-use guidance. It doesn't name alternatives such as get_supply_customization or specify when not to use this tool.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
put_vouchers_idAIdempotentInspect
Overview
Modify an existing voucher's settings, including discount values, validity periods, usage limits, and status.
When to Use
Extend validity - Update voucher end dates
Adjust discounts - Change discount values or types
Update limits - Modify usage limits or minimum spend
Status changes - Activate or deactivate vouchers
What You Get
Confirmation - Success message when voucher is updated
Updated voucher - Voucher reflects the new settings
Important Notes
Read-only if used - Vouchers that have been used in bookings cannot be modified (returns 404)
All fields required - Must provide all required fields, not just the ones you want to change
Quick Start
Provide the voucher ID and updated fields. Returns confirmation of the update.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Unique identifier of the voucher to update | |
| budget | No | Total monetary pool the voucher can distribute across all redemptions, in the voucher's currency. If not set or 0, there is no monetary limit and usage is only controlled by usages_limit. When set, budget and usages_limit act as independent limits — whichever is exhausted first will reject the voucher. | |
| status | Yes | Updated status of the voucher (e.g., active, inactive) | |
| currency | Yes | Currency of the discount | |
| usages_limit | Yes | Updated usage limit for the voucher | |
| validity_end | Yes | Updated end date of the voucher's validity | |
| voucher_code | Yes | A unique code for the new voucher. e.g. manhattan-holidays-100 | |
| discount_type | Yes | Type of discount, such as percentage or points redemption | |
| minimum_spend | Yes | Minimum rate to apply the discount voucher in the voucher currency. e.g. a minimum_spend of USD$100 will only apply for bookings with a price USD$100 or more | |
| discount_value | Yes | Value of the discount applied by the voucher. For percentage discounts, a value of 10 represents a 10% discount. For points_redemption, it indicates the fixed amount of points to be redeemed e.g. 10 equals 10 points | |
| validity_start | Yes | Updated start date of the voucher's validity | |
| maximum_discount_amount | Yes | Maximum discount amount that can be applied using the voucher in voucher currency. e.g. a with a maximum_discount_amount of 50 in USD, will discount from 0 to USD$50 |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already establish readOnly=false, idempotent=true, destructive=false, openWorld=true. The description adds genuinely non-redundant behavior: vouchers already used in bookings cannot be modified and return 404, and the update is a full replace requiring every required field to be resent. That is exactly the kind of state/permission context annotations don't carry.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with an Overview, then scannable sections for when-to-use, return values, and caveats. Sections are short and each carries content; the Quick Start paragraph lightly restates earlier material but does not bloat the definition.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 12-parameter mutation with no output schema, the description covers what it needs to: it explains the return (success confirmation plus the updated voucher), the full-replace semantics, and the 404 constraint on used vouchers. The only omission is routing between this tool and the status-specific sibling.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema documents all 12 parameters and the baseline is 3. The description adds a nuance the schema cannot express: this is a full-replace update where all required fields must be provided, not just the ones being changed, which prevents a partial-update mistake.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (modify) and resource (an existing voucher's settings) and enumerates the modifiable surfaces: discount values, validity periods, usage limits, status. An agent can tell it apart from read siblings like get_vouchers_voucherid, but it does not distinguish itself from the dedicated put_vouchers_id_status sibling even though it claims status changes as a use case.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The 'When to Use' bullets give real context (extend validity, adjust discounts, update limits, status changes), which is better than nothing. However, no when-not conditions are stated and no alternatives are named, and the status-change bullet collides with the put_vouchers_id_status sibling without explaining when to prefer one over the other.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
put_vouchers_id_statusAIdempotentInspect
Overview
Quickly activate or deactivate a voucher without updating other fields. Perfect for temporarily disabling vouchers.
When to Use
Temporary disable - Deactivate vouchers without deleting them
Reactivate vouchers - Turn inactive vouchers back on
Status management - Quickly toggle voucher availability
What You Get
Confirmation - Success message confirming status change
Updated status - Voucher status changed to active or inactive
Quick Start
Provide the voucher ID and the new status ("active" or "inactive"). Returns confirmation of the status update.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Unique identifier of the voucher for which the status is being updated | |
| status | Yes | New status of the voucher |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=false, idempotentHint=true, and openWorldHint=true, so the safety profile is covered. The description adds genuinely useful behavior: the operation touches only the status field and returns a success confirmation - information not derivable from the annotations. Permissions and error behavior remain unstated, keeping it below 5.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded well with the Overview, but the four markdown sections are heavy for a two-parameter tool and repeat the same idea: the status values and the confirmation are restated in 'What You Get' and again in 'Quick Start'. Content is not wrong, just padded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple two-field mutation with no output schema, the description covers what the call does, what it changes, and what it returns (a confirmation and the new status). Missing only error/permission context, which keeps it from a 5.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so both parameters (id, status) are already documented in the schema, including the enum values. The description restates the same enum ('active' or 'inactive') without adding format, validation, or side-effect detail, so the baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('activate or deactivate a voucher') and adds the distinguishing scope constraint 'without updating other fields', which implicitly separates it from the full-update sibling put_vouchers_id. It does not name that sibling explicitly, so an agent must infer the routing from the scope phrase alone.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The 'When to Use' section gives three concrete scenarios (temporary disable, reactivate, status management) that clearly frame the intent. It lacks any explicit when-not-use or named alternative (e.g. 'for full edits use put_vouchers_id'), so the routing guidance is contextual rather than explicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
searchBookingsARead-onlyInspect
Overview
Search for bookings by free-text query. Matches guest names, booking IDs, hotel names, and other booking-related fields. Results are paginated.
When to Use
Admin or support lookup - Find bookings by guest name, hotel name, or partial ID
Text search - Search across multiple fields with a single query string
Paginated results - Control page size and page index via request body
What You Get
Matching bookings - List of bookings matching the query with key fields
Pagination -
page,rowsPerPage, and the searchqueryechoed backCredit line billing - When applicable, billing info (credit line ID, billed amount USD, billed at date, payment ID)
Request Body
query (required) - Text to search for (e.g. guest name, hotel name, booking ID)
page - Zero-based page index (default 0)
rowsPerPage - Number of results per page (e.g. 5)
sand_box - Filter by environment (e.g. "false" for production)
Quick Start
POST a JSON body with query, page, and rowsPerPage. Response includes data array, success, and pagination fields.
| Name | Required | Description | Default |
|---|---|---|---|
| page | No | Zero-based page index for pagination. | |
| query | Yes | Text to search for (guest name, hotel name, booking ID, etc.). | |
| sand_box | No | Filter by sandbox environment (e.g. "true" or "false"). | |
| rowsPerPage | No | Number of results per page. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, destructiveHint=false, and openWorldHint=true, covering the safety and openness profile. The description adds useful context beyond those: it discloses pagination behavior, the credit line billing fields returned, and the sandbox environment filter. It does not describe rate limits or ordering guarantees, but for a read-only search with rich annotations, this is solid extra context.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-organized with markdown headers ('Overview', 'When to Use', 'What You Get', 'Request Body', 'Quick Start'), which front-loads the purpose effectively. However, it is longer than necessary for a tool with 4 parameters and full schema coverage, repeating field definitions already in the schema and including a 'Quick Start' section that duplicates the request body details. The structure is clear but not tight.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a read-only search tool with full schema coverage and rich annotations, the description covers the essential aspects: what it searches, how pagination works, and what the response includes (data array, success, pagination fields, credit line billing). No output schema exists, so the 'What You Get' section fills a real gap. It is largely complete, though it could mention whether results are ordered or how to handle empty result sets.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents all four parameters. The description largely repeats those definitions ('query (required) - Text to search for', 'page - Zero-based page index', 'rowsPerPage - Number of results per page', 'sand_box - Filter by environment'), adding only minor examples like '(e.g. "false" for production)'. Baseline 3 is appropriate when the schema carries the full load.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource: 'Search for bookings by free-text query', and specifies which fields are matched (guest names, booking IDs, hotel names, and other booking-related fields). It clearly distinguishes itself from get_bookings or listBookings by emphasizing free-text search rather than filtered retrieval. However, it does not explicitly name a sibling as an alternative, so it falls short of a 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The 'When to Use' section provides contexts like 'Admin or support lookup' and 'Text search', which imply usage scenarios but stop short of explicitly stating when to prefer this tool over get_bookings or listBookings. No exclusions or alternatives are named, leaving the agent to infer the appropriate selection criteria on its own.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
searchExperienceToursARead-onlyIdempotentInspect
Overview
Search available tours and activities with localized content and prices in your chosen currency.
When to Use
Search results - Populate a tours listing or map view
Destination pages - Show activities available in a city or region
Category browsing - Filter tours by type, duration, or rating
What You Get
Tour listings - Titles, descriptions, images, and ratings
Localized content - Names and descriptions in the requested language
Prices - Amounts in the requested currency
Quick Start
Provide required language and currency query parameters. Returns a paginated list of matching tours.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly/openWorld/idempotent/non-destructive, so the safety profile is covered. The description adds genuinely useful behavior beyond that: results are paginated, content is localized to the requested language, and prices are returned in the requested currency. It does not describe pagination mechanics or rate limits, keeping it out of 5 territory.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Markdown headers make it scannable, but there is meaningful redundancy: 'What You Get' largely restates the Overview (localized content, prices in currency). The Quick Start contradicts the actual schema, so a full sentence is spent on unusable advice.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a read-only search with annotations covering safety and no output schema, the description does describe return content (titles, descriptions, images, ratings) reasonably well. The gap is the phantom required query parameters and undisclosed pagination/filter mechanics, which leaves an agent unsure how to actually invoke it.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With zero parameters the baseline would be 4, but the description asserts that 'required `language` and `currency` query parameters' must be provided while the input schema exposes an empty properties object. That guidance is unverifiable and potentially misleading to an agent, pulling the score down to a 3.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb+resource ('Search available tours and activities') with the added scope of localized content and currency pricing. It is clearly distinguishable from sibling reads like getExperienceTour or getExperienceTourAvailability. However, it does not explicitly contrast itself against those siblings, so it stops short of a 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The 'When to Use' block gives real context (tours listing, destination pages, category browsing), which is better than nothing. But it never names an alternative tool or a when-not-to-use condition, and it advertises filtering 'by type, duration, or rating' that no sibling/schema actually exposes, so the routing guidance is partly unactionable.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
searchFlightsMatrixAInspect
Overview
Search the cheapest fare for each departure (and, on round-trips, return) date combination across a grid of nearby dates — ±flexDays around the dates in your request. Accepts the same legs-based body as POST /flights/rates plus optional flexDays (1–3, default 3).
Supported: one-way (1 leg) or round-trip (2 legs) only. Multi-city (3+ legs) is not supported.
Not supported: top-level origin, destination, departureDate, or returnDate — use legs only.
Access
Requires Flights API access and matrix enablement on your account. Matrix search is not enabled by default — contact the LiteAPI support team to request access.
When to Use
Flexible-date calendars — price heatmap when the traveller can shift dates
Cheap-date discovery — find the lowest fare in a ±N day window before a full
/flights/ratessearchRound-trip date pairing — compare outbound × return combinations on one grid
Progressive UI — stream cells over SSE as each underlying search completes
What You Get
cells— one entry per valid date combination, sorted by(outboundOffset, returnOffset)cheapest— globally lowest-priced cell (null when nothing was priced)currency— currency of the global cheapest cellbaseOutboundDate/baseReturnDate— the originally requested datesflexDays,roundTrip— grid metadataPer-cell
price,currency, date offsets, and whether the underlying search wascachedorsuccessMargined prices — cell
price,cheapest, andcurrencyinclude the authenticated user's rate-search margin (same as/flights/rates)
Key Features
Probes
±flexDays(1–3) around requested departure and return datesEach underlying date pair uses normal provider caching — a later
POST /flights/ratesfor a matrix date is served from warm cacheSSE: send header
Accept: text/event-streamfor incremental events:matrix-start(grid skeleton),matrix-chunk(one priced cell),matrix-complete(full sorted grid + cheapest)Same global
filters,sort, andoptionsas/flights/rateswhere applicable
Quick Start
Required: legs (1 leg for one-way or 2 for round-trip, each with origin, destination, date), adults (≥ 1), currency
Optional: flexDays (1–3, default 3), country, passenger counts, filters, sort
Round-trip: two legs — outbound then return with optional direction OUTBOUND / INBOUND. One-way: one leg.
After choosing a date pair from the matrix, call POST /flights/rates with legs set to those dates for full offer details.
| Name | Required | Description | Default |
|---|---|---|---|
| legs | Yes | One leg (one-way) or two legs (round-trip). Multi-city is not supported. | |
| adults | Yes | Number of adult passengers (≥ 1). | |
| country | No | ISO country code for point of sale | |
| infants | No | Number of infant passengers (under 2). | |
| children | No | Number of child passengers (ages 2-11). | |
| currency | Yes | ISO 4217 currency for point of sale and displayed prices. | |
| flexDays | No | Days before/after requested dates to probe |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Despite annotations being present, the description adds substantial behavioral context they cannot convey: matrix access is not enabled by default and requires contacting LiteAPI support, underlying searches are provider-cached so a later /flights/rates call is served from warm cache, returned prices include the user's margin, and SSE streaming events are enumerated. This is exactly the kind of extra disclosure the annotations cannot carry.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
It is lengthy, but the markdown structure is clean and front-loaded: Overview, Access, When to Use, What You Get, Quick Start. Some content repeats between 'Key Features' and 'Overview' (flexDays probing, caching), which costs a point, but every section is navigable and earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description fully carries the return-value burden: it enumerates cells, cheapest, currency, baseOutboundDate/baseReturnDate, flexDays, roundTrip, and per-cell price/currency/offsets/cached status. Access prerequisites and SSE behavior are also covered, leaving nothing an agent needs to call it correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3, but the description adds real value beyond the schema: flexDays is documented as 1–3 with a default of 3 (the schema omits the default), legs must be exactly one or two with outbound/return ordering, and required vs optional fields are restated coherently.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The overview states a specific verb and resource: 'Search the cheapest fare for each departure... date combination across a grid of nearby dates.' It precisely scopes the operation (±flexDays around requested dates) and distinguishes itself from the related /flights/rates endpoint, which it names explicitly.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
A dedicated 'When to Use' section lists four concrete scenarios (flexible-date calendars, cheap-date discovery, round-trip pairing, progressive UI), plus explicit 'Supported' (1–2 legs) and 'Not supported' (multi-city, top-level date/origin fields) boundaries. It also tells the agent what to call next — POST /flights/rates for full offer details.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
89 tool updates
- First observed
chargeFlightExtraCharges - First observed
createExperienceBooking - First observed
delete_Voucher - First observed
get_bookings - First observed
get_bookings_bookingid - First observed
get_bookings_guest_nationality_report - First observed
get_bookings_hotels_sales_report - First observed
get_bookings_source_markets_report - First observed
get_data_chains - First observed
get_data_cities - First observed
get_data_countries - First observed
get_data_currencies - First observed
get_data_facilities - First observed
get_data_flights_airlines - First observed
get_data_flights_airlines_iatas - First observed
get_data_flights_airlines_iatas_iatacode - First observed
get_data_flights_airports - First observed
get_data_flights_airports_iatas - First observed
get_data_flights_airports_iatas_iatacode - First observed
get_data_hotel - First observed
get_data_hotel_ask - First observed
get_data_hotel_search - First observed
get_data_hotels - First observed
get_data_hotels_room_search - First observed
get_data_hotels_semantic_search - First observed
get_data_hoteltypes - First observed
get_data_iatacodes - First observed
get_data_languages - First observed
get_data_places - First observed
get_data_places_placeid - First observed
get_data_reviews - First observed
get_data_weather - First observed
get_flights_bookings - First observed
get_flights_bookings_bookingid - First observed
get_flights_bookings_bookingid_cancellations - First observed
get_flights_bookings_bookingid_services - First observed
get_guests - First observed
get_guests_guestid - First observed
get_guests_guestid_bookings - First observed
get_guests_guestid_loyalty_points - First observed
get_guests_guestid_vouchers - First observed
get_loyalties - First observed
get_prebooks_prebookid - First observed
get_supply_customization - First observed
get_vouchers - First observed
get_vouchers_history - First observed
get_vouchers_voucherid - First observed
getExperienceBooking - First observed
getExperienceTour - First observed
getExperienceTourAvailability - First observed
getExperienceTourBookingOptions - First observed
getExperienceTourReviews - First observed
getFlightPrebook - First observed
getHotelTaxSchema - First observed
getPriceIndexCity - First observed
getPriceIndexHotels - First observed
getPublicPrice - First observed
listBookings - First observed
post_analytics_hotels - First observed
post_analytics_markets - First observed
post_analytics_report - First observed
post_analytics_weekly - First observed
post_bookings_bookingid_alternative_prebooks - First observed
post_commissions_report - First observed
post_data_hotel_highlights - First observed
post_flights_bookings - First observed
post_flights_bookings_bookingid_cancellations - First observed
post_flights_prebooks - First observed
post_flights_prebooks_prebookid_services - First observed
post_flights_rates - First observed
post_flights_verify - First observed
post_guests_guestid_loyalty_points_redeem - First observed
post_hotels_min_rates - First observed
post_hotels_rates - First observed
post_rates_book - First observed
post_rates_prebook - First observed
post_rates_rebook - First observed
post_vouchers - First observed
prebookExperienceTour - First observed
prechargeFlightExtraCharges - First observed
put_bookings_bookingid - First observed
put_bookings_bookingid_amend - First observed
put_loyalties - First observed
put_supply_customization - First observed
put_vouchers_id - First observed
put_vouchers_id_status - First observed
searchBookings - First observed
searchExperienceTours - First observed
searchFlightsMatrix
Related MCP Servers
- AlicenseAqualityCmaintenanceEnables brand visibility monitoring across major AI platforms like ChatGPT, Claude, Gemini, and Perplexity. It allows users to track visibility scores, analyze competitor data, and receive actionable insights to improve AI-generated brand recommendations.167 npm1MIT
- AlicenseCqualityAmaintenanceCompetitor Monitor AI - MCP server providing AI-powered tools and automation by MEOK AI Labs119 npm37 PyPIMIT
- AlicenseNot gradedqualityBmaintenanceEnables tracking competitor websites, changelogs, blog feeds, and pricing pages with meaningful diffs, classification, and Markdown digests via MCP tools for listing, adding, removing competitors, running checks, and retrieving digests or changes.MIT

industrylens-mcpofficial
AlicenseNot gradedqualityBmaintenanceBrowse IndustryLens's published competitive-intelligence reports and head-to-head competitor comparisons from any AI agent — real, source-backed data.MIT
Glama MCP Gateway
Add one secure layer between your agents and this server.