> For the complete documentation index, see [llms.txt](https://developers.tiqets.dev/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://developers.tiqets.dev/basics/openapi/availability-and-pricing-api/get-product-availability-and-pricing.md).

# Get product availability and pricing

The Product Availability Endpoint returns the availability and pricing for all the variants of a product on all days, from the current date for up to 31 days.

The endpoint returns a max\_tickets value for each day, timeslot, and variant\_id. This value represents the maximum number of tickets that can be purchased together on an order for that product, variant, and timeslot.

Note the following:

* The endpoint response returns a maximum of 31 days per request to manage the response time of the endpoint.
* Products can return availability and pricing for up to one year into the future.
* If no tickets are available for purchase on a day or timeslot, no day or timeslot is returned.
* If a product does not have timeslots, a single timeslot is returned, with the value of \`whole\_day\`.
* It is not possible to obtain the raw availability (actual number of tickets).
* The returned information is cached and updated frequently. We have processes in place to ensure the data is as fresh as possible, but there may occasionally be a discrepancy between the returned availability and the actual availability.

For the most efficient retrieval of availability, please use the request parameter skip\_to\_first\_available\_day and do not define an end\_date.\
By doing that, you will receive the first 31 days of availability from the start\_date. This is especially useful for products that have gaps in the availability.

## GET /products/{productId}/availability

> Product availability and pricing

```json
{"openapi":"3.1.0","info":{"title":"Tiqets Distributor API","version":"2.7.0"},"tags":[{"name":"Availability & Pricing API"}],"servers":[{"url":"https://api.tiqets.com/v2","description":"Production Environment"},{"url":"https://api-tiqt-test.steq.it/v2","description":"Test Environment (until February 4th, 2026)"},{"url":"https://api.api-tiqt-test.steq.it/v2","description":"Test Environment (from February 4th, 2026)"}],"paths":{"/products/{productId}/availability":{"get":{"summary":"Product availability and pricing","tags":["Availability & Pricing API"],"parameters":[{"$ref":"#/components/parameters/ProductId"},{"$ref":"#/components/parameters/Currency"},{"$ref":"#/components/parameters/Language"},{"name":"start_date","in":"query","description":"First day for which to return availability.","required":false,"schema":{"type":"string","format":"date","pattern":"YYYY-MM-DD"}},{"name":"end_date","in":"query","description":"Last day for which to return availability (by default: 31 days from current date). We capped the endpoint response to a maximum of 31 days per request to manage the response time of the endpoint.","schema":{"type":"string","format":"date","pattern":"YYYY-MM-DD"}},{"name":"skip_to_first_available_day","in":"query","description":"Whenever a range (open or closed) is specified with start_date and/or end_date, validate it against the next available date. If the next available date is in between start_date and end_date, return data from next available date adn end_date. If next available date is beyond end_date, return no available date. If it precedes start_date, nothing changes.","required":false,"schema":{"type":"boolean"}},{"$ref":"#/components/parameters/Authorization"}],"responses":{"200":{"description":"Successful operation.","content":{"application/json":{"schema":{"type":"object","properties":{"success":{"type":"boolean"},"capped_at":{"type":["string","null"],"description":"The capped date that is used to limit the availability information in the response. For example, *capped_at* 2020-08-19 means the last information in the response is 2020-08-18. We capped the endpoint response to a maximum of 31 days per request to manage the response time of the endpoint."},"next_available_date":{"type":["string","null"],"description":"The first available date for the product. For example, *next_available_date* 2020-08-19 means that the first date in which there is availability and the product can bo sold is 2020-08-18."},"sales_enabled":{"type":"boolean","description":"Indicates whether the product is available for sale or not."},"dynamic_pricing":{"type":"boolean","deprecated":true,"description":"If true, the price depends on the day and timeslot, as well as the day on which the data is requested. Products with dynamic pricing can have different prices for one date for one variant ID, and it allows for active price changes from the supplier."},"max_tickets_per_order":{"type":["number","null"],"description":"Maximum total number of tickets of any product variant that can be purchased in one order. Returned as `null` if no restriction applies."},"min_tickets_per_order":{"type":["number","null"],"description":"Minimum total number of tickets of any product variant that can be purchased in one order. Returned as `null` if no restriction applies."},"dates":{"type":"array","description":"Availability information for the specific dates.","items":{"type":"object","properties":{"date":{"type":"string","description":"Date of the availability information. Format YYYY-MM-DD."},"availability":{"type":"number","description":"Maximum number of tickets that can be purchased together for this date."},"price":{"type":["number","null"],"description":"Listing price per date. Can be null if there is no availability."},"currency":{"type":"string","description":"The currency used in the *price*."},"timeslots":{"type":"array","description":"List of available timeslots for a product in the venues timezone using the format HH:MM.","items":{"type":"object","properties":{"time":{"type":"string","description":"Information on time of the availability. Format HH:MM or whole_day for a product without timeslots."},"availability":{"type":"number","description":"Maximum number of tickets that can be purchased together for this timeslot."},"timezone":{"type":"string","description":"Timeslot timezone, following the venue timezone. In tz format."},"variants":{"type":"array","items":{"type":"object","properties":{"id":{"type":"integer","description":"Variant identifier."},"currency":{"type":"string","description":"The currency used in the *price_component*."},"max_tickets":{"type":"integer","description":"Maximum number of tickets available for the specific variant."},"price_mediation":{"type":"object","description":"Variant price components for mediation partners. All amounts in currency as defined on the request.","properties":{"sale_ticket_value_incl_vat":{"type":["number","null"],"description":"Basic price of a single ticket from the supplier. If `booking_fee_incl_vat` contains a value > 0, `sale_ticket_value_incl_vat` value should be shown to the customer as Face Value Price."},"booking_fee_incl_vat":{"type":["number","null"],"description":"Booking fee. If `booking_fee_incl_vat contains a value` > 0, this value should be shown to the customer at checkout."},"total_retail_price_incl_vat":{"type":["number","null"],"description":"Total retail price including VAT. The amount corresponds with the sum of `sale_ticket_value_incl_vat` and `booking_fee_incl_vat.` Any additional charges to this price are for the risk of the Distributor."},"distributor_commission_excl_vat":{"type":["number","null"],"description":"Distributor commission excluding VAT. Products with dynamic pricing have the final amount in the invoice."},"prediscount_price_incl_vat":{"description":"Pre-discount price returned in case a discount applies to the `price` of this product.","type":["number","null"]},"estimated_partner_rate":{"description":"As an intermediary of Tiqets, you receive a partner commission for your services in accordance with your partner contract. The Estimated Partner Rate is merely displayed to indicate the estimated difference between the ticket retail price (including VAT) and your estimated partner commission (excluding VAT). No rights can be derived from this estimation. The terms of your partner contract shall prevail and take precedence in all cases.","type":["number","null"]}}},"price_son":{"type":"object","deprecated":true,"description":"In the past, this object returned price components for the now deprecated SON pricing type. This object can be completely ignored and is only returned for compatibility with legacy integrations. All values are always returned as `null`.","properties":{"net_payment_by_distributor":{"type":["number","null"],"description":"Always `null`."},"venue_legal_mode":{"type":["string","null"],"description":"Always `null`."},"collection_of_fee_on_behalf_of_venue":{"type":["number","null"],"description":"Always `null`."},"distributor_discount_excl_vat":{"type":["number","null"],"description":"Always `null`."},"payable_vat_by_tiqets":{"type":["number","null"],"description":"Always `null`."},"distributor_booking_fee_excl_vat":{"type":["number","null"],"description":"Always `null`."},"face_value_price_excl_vat":{"type":["number","null"],"description":"Always `null`."},"face_value_price_incl_vat":{"type":["number","null"],"description":"Always `null`."},"tiqets_retail_price_incl_vat":{"type":["number","null"],"description":"Always `null`."},"distributor_commission_excl_vat":{"type":["number","null"],"description":"Always `null`."}}},"pricing_restriction":{"deprecated":true,"description":"Deprecated field; always `null`. Always follow 'total_retail_price_incl_vat' and do not change the price.","type":["string","null"]}}}}}}}}}},"variants":{"type":"array","items":{"type":"object","properties":{"id":{"type":"integer","description":"Variant identifier."},"label":{"type":"string","description":"Localized label for the variant."},"valid_with_variant_ids":{"type":["array","null"],"description":"List of variant_ids. If the list is not `null`, this variant can only be booked in combination with at least one of the listed variant_ids. A common use case are infant variants which require an adult variant.","items":{"type":"integer","description":"Variant identifier."}},"description":{"type":["string","null"],"description":"Localized description for the variant with embedded age ranges."},"requires_visitors_details":{"type":["array","null"],"description":"For products that require visitor's details, this is a list of additional data fields required when placing an order. Please find the detailed requirements of the individual elements in the documentation of our Booking API endpoints.","items":{"type":"string","enum":["full_name","email","phone","passport_id","passport_ids","date_of_birth","nationality","weight_kg","weight_lb","address","zipcode","pickup_location","dropoff_location","flight_number","dietary_preference"],"description":"The fields required to create an order."}},"variant_type":{"description":"Variant type classification information. This field is intended to enable partners to do machine matching/processing of certain properties of a variant.","type":"string","enum":["adult","youth","child","infant","senior","family","regular","reduced"]},"maximum_visitors_per_ticket":{"description":"Number of visitors that can use one ticket of this type. If the variant is not of type family, the value is always 1. Family variants can typically be used by more than one visitor, a detailed description can be found in the label and description of the variant.","type":"integer"},"languages":{"description":"List of the languages of available tour guides for this variant. The format generally follows ISO 639-1 codes; for languages that do not have a 639-1 code, it is in 639-3.","type":["array","null"],"items":{"type":"string","description":"Language code."}},"language_selection":{"description":"List of the languages of available tour guides for this variant. The format follows ISO 639-3 codes. If this is not `null`, customers need to select a language on the tiqets.com checkout. Please refer to [How to implement language selection](https://developers.tiqets.dev/integration-guides/product-integration/how-to-implement-language-selection) for more details.","type":["array","null"],"items":{"type":"string","description":"Language code."}},"is_addon":{"description":"True if the variant is an addon that can only be sold in combination with a non-addon variant. False if the variant can be sold as stand-alone.","type":"boolean"},"group_ids":{"type":"array","description":"List of group ID, associated with the variant. NOTE: Multiple IDs can be associated with one variant.","items":{"type":"integer","description":"Group identifier."}},"cancellation":{"description":"Cancellation information.","type":"object","properties":{"window":{"type":["integer","null"],"description":"The cancellation window in hours corresponds to the cancellation policy."},"policy":{"type":"string","enum":["before_timeslot","before_date","never"],"description":"Indicates the cancellation policy of the product.\nPossible values:\n- before_date: Cancellation is possible until X hours (returned as `window`) before midnight on the visit date.\n- before_timeslot: Cancellation is possible until X hours (returned as `window`) before the booked timeslot (if the product makes use of timeslots) or the opening hour of the venue (if the product does not have timeslots).\n- never: Cancellation is not possible for this product."}}},"min_per_order":{"description":"The minimum number of tickets required to create an order.","type":["integer","null"]},"max_per_order":{"description":"The maximum number of tickets allowed to create an order.","type":["integer","null"]}}}},"groups":{"type":"array","description":"Group ID and label description.","items":{"type":"object","properties":{"id":{"type":"integer"},"name":{"type":"string"}}}}}}}}},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"405":{"$ref":"#/components/responses/MethodNotAllowed"},"429":{"$ref":"#/components/responses/TooManyRequests"},"500":{"$ref":"#/components/responses/InternalServerError"},"503":{"$ref":"#/components/responses/ServiceUnavailable"}}}}},"components":{"parameters":{"ProductId":{"name":"productId","in":"path","description":"ID of the product to return.","required":true,"schema":{"type":"integer"}},"Currency":{"name":"currency","in":"query","description":"Currency code of the price components (ISO 4217).","required":false,"style":"form","explode":true,"schema":{"type":"string","default":"EUR"}},"Language":{"name":"lang","in":"query","description":"Language of the content to retrieve (ISO 639-1). Defaults to English if undefined.","required":false,"style":"form","explode":true,"schema":{"type":"string","default":"en"}},"Authorization":{"name":"Authorization","in":"header","required":true,"description":"Token <Your_API_Key>.","schema":{"type":"string","default":"Token <Partner_API_key>."}}},"responses":{"BadRequest":{"description":"Bad Request -- Check your request parameters (typo in parameter or invalid value).","content":{"application/json":{"schema":{"type":"object","properties":{"success":{"type":"boolean"},"message":{"type":"string"},"error":{"type":"string"},"field_errors":{"type":"object"}}}}}},"Unauthorized":{"description":"Unauthorized -- Your API key is incorrect.","content":{"application/json":{"schema":{"type":"object","properties":{"success":{"type":"boolean"},"message":{"type":"string"},"error":{"type":"string"}}}}}},"Forbidden":{"description":"Forbidden -- The endpoint or parameters are not allowed for the matching API key.","content":{"application/json":{"schema":{"type":"object","properties":{"success":{"type":"boolean"},"message":{"type":"string"},"error":{"type":"string"}}}}}},"NotFound":{"description":"Not Found -- Requested resource/endpoint could not be found.","content":{"application/json":{"schema":{"type":"object","properties":{"success":{"type":"boolean"},"message":{"type":"string"},"error":{"type":"string"}}}}}},"MethodNotAllowed":{"description":"Method Not Allowed -- Check your request method.","content":{"application/json":{"schema":{"type":"object","properties":{"success":{"type":"boolean"},"message":{"type":"string"},"error":{"type":"string"}}}}}},"TooManyRequests":{"description":"Too Many Requests -- We currently apply a fair-use policy, but we might enforce limits in the future.","content":{"application/json":{"schema":{"type":"object","properties":{"success":{"type":"boolean"},"message":{"type":"string"},"error":{"type":"string"}}}}}},"InternalServerError":{"description":"Internal Server Error -- We had a problem with our server. Try again later.","content":{"application/json":{"schema":{"type":"object","properties":{"success":{"type":"boolean"},"message":{"type":"string"},"error":{"type":"string"}}}}}},"ServiceUnavailable":{"description":"Service Unavailable -- We're temporarily offline for maintenance. Please try again later.","content":{"application/json":{"schema":{"type":"object","properties":{"success":{"type":"boolean"},"message":{"type":"string"},"error":{"type":"string"}}}}}}}}}
```


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## Querying This Documentation
If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter, and the optional `goal` query parameter:

```
GET https://developers.tiqets.dev/basics/openapi/availability-and-pricing-api/get-product-availability-and-pricing.md?ask=<question>&goal=<endgoal>
```

`ask` is the immediate question: it should be specific, self-contained, and written in natural language.
`goal` is optional and describes the broader end goal you are ultimately trying to accomplish on behalf of the user. GitBook uses it to tailor the answer towards what is most useful for that goal.

The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
