# Availability

The first step when making a sale is to check for availability. Note if `allowFreesale` is set to true on the [product](https://docs.octo.travel/octo-api-core/products) then this step is optional but it is advised you check it anyway if you can to check for closures.

OCTO has two main availability calls:

[Availability Calendar](#availability-calendar) endpoint is designed to be highly optimized and returns a single object per day. It's designed to be queried for large date ranges and the result is used to populate an availability calendar.

[Availability Check](#availability-check) endpoint may be slightly slower as it will return an object for each individual departure time (or day).&#x20;

## Availability Calendar

## Availability Calendar

> This endpoint is highly optimised and will return a single object per day. It's designed to be queried for large date ranges and the result is used to populate an availability calendar.\
> \
> When the end user selects an open date you can call on \`/availability\` endpoint to get the \`availabilityId\` to create the booking

```json
{"openapi":"3.1.0","info":{"title":"OCTO API Specification","version":"0.0.0"},"tags":[{"name":"Availability"}],"servers":[{"url":"http://localhost:8080/api/octo","description":"","variables":{}},{"url":"https://ventrata-api-1011165921260.us-central1.run.app/api/octo","description":"","variables":{}}],"security":[{"BearerAuth":[]}],"components":{"securitySchemes":{"BearerAuth":{"type":"http","scheme":"Bearer"}},"parameters":{"RequestHeaders.octoCapabilities":{"name":"Octo-Capabilities","in":"header","required":true,"description":"A list of the Capabilities (their IDs) initialized with your request.","schema":{"type":"string"}},"RequestHeadersContent":{"name":"Accept-Language","in":"header","required":false,"description":"This optional request header allows to specify preferred languages for content in the response. A language code that specifies the language of the product content. This code must conform to the BCP 47 standard, following RFC 5646 and RFC 4647 specifications for language tags. Examples include en-US for American English, fr-FR for French (France), and es-ES for Spanish (Spain). This header supports a comma-separated list of language tags with optional quality values (q) to indicate priority, such as en-US, fr-CA;q=0.8, fr;q=0.7, which prioritizes U.S. English, followed by Canadian French, and general French. This header is defined in the HTTP/1.1 specification (RFC 7231) and is commonly used for internationalized websites and services to enhance user experience. For more details, visit MDN Web Docs: Accept-Language - HTTP | MDN. Note this only determines preference and does not guarantee location has content available in the desired language.","schema":{"type":"string"}}},"schemas":{"AvailabilityCalendar":{"type":"object","required":["localDate","available","status","vacancies","capacity","openingHours"],"properties":{"localDate":{"type":"string","description":"The specific date for querying availability on Availability Calendar endpoint. This field must follow the ISO 8601 date format (e.g., 2024-11-18). It ensures standardized representation of dates across different systems."},"available":{"type":"boolean","description":"Indicates whether there is any remaining availability for the specified date.\ntrue: Availability exists.\nfalse: Fully booked or unavailable."},"status":{"allOf":[{"$ref":"#/components/schemas/AvailabilityStatus"}],"description":"Defines the current status of the availability date:\nAVAILABLE: Open for booking.\nFREESALE: Unlimited availability, no capacity limits.\nSOLD_OUT: No spots available.\nLIMITED: Less than 50% capacity remaining.\nCLOSED: The availability is closed."},"vacancies":{"type":"integer","nullable":true,"description":"Specifies the number of available slots remaining quantity (highest remaining vacancies from all availabilities of this day). Should be nulled or omitted when status is FREESALE."},"capacity":{"type":"integer","nullable":true,"description":"The total capacity for this availability date. "},"openingHours":{"type":"array","items":{"$ref":"#/components/schemas/OpeningHours"},"description":"Defines the opening hours for this availability, even for start time-based availability. Supports multiple periods for breaks in the day."},"unitPricingFrom":{"type":"array","items":{"$ref":"#/components/schemas/PricingUnit"},"description":"Is on the object when Pricing capability is requested. "},"pricingFrom":{"type":"array","items":{"$ref":"#/components/schemas/Pricing"},"description":"Is on the object when Pricing capability is requested. "}}},"AvailabilityStatus":{"type":"string","enum":["AVAILABLE","FREESALE","SOLD_OUT","LIMITED","CLOSED"]},"OpeningHours":{"type":"object","required":["from","to"],"properties":{"from":{"type":"string","description":"The opening time"},"to":{"type":"string","description":"The closing time"}},"description":"Defines the opening hours for this availability, even for start time-based availability. Supports multiple periods for breaks in the day."},"PricingUnit":{"type":"object","required":["unitId"],"properties":{"unitId":{"type":"string","description":"ID of the unit this pricing is related to"}},"allOf":[{"$ref":"#/components/schemas/Pricing"}]},"Pricing":{"type":"object","required":["original","retail","net","currency","currencyPrecision","includedTaxes"],"properties":{"original":{"type":"integer","description":"Represents the advertised marketing price, which must be equal to or higher than pricingFrom.retail. Typically used for strike-through pricing, it highlights the original or component-based value of the product when the retail price reflects a discount or bundled offer. For example, a package product combining multiple components (e.g., hotel + tour + meals) may have a total component value of $500 (original), while the bundled retail price is $400. In such cases, the original price is displayed to show savings.This field should only be shown when it is higher than pricingFrom.retail and must accurately reflect a valid reference price, ensuring transparency and trust."},"retail":{"type":"integer","description":"The supplier’s recommended sale price, including all taxes and fees. This is the price charged to end customers and represents the total cost."},"net":{"type":"integer","nullable":true,"description":"The wholesale price charged to the reseller, including all taxes and fees. This price reflects the amount the reseller pays to the supplier."},"currency":{"type":"string","description":"Specifies the currency used for the prices provided in the pricingFrom object. The value must adhere to ISO 4217 currency codes (e.g., USD, EUR, JPY) to ensure consistency across systems."},"currencyPrecision":{"type":"integer","description":"All pricing is given in integers to avoid floating point rounding issues. e.g. USD = 2 and JPY = 0. To convert a price to decimal you should do: price / (10 ** currencyPrecision) where ** is to the power of e.g. Math.pow(10, currencyPrecision)."},"includedTaxes":{"type":"array","items":{"$ref":"#/components/schemas/Tax"},"description":"This field defines the number of decimal places used for the currency in the pricingFrom object, ensuring precise representation and preventing rounding errors during calculations. For example, in currencies like USD, which have a precision of 2, prices are expressed in cents (e.g., $45.00 is represented as 4500). In currencies like JPY, which have a precision of 0, prices are expressed as whole yen amounts (e.g., ¥4500 is represented as 4500). By aligning with the specific decimal requirements of different currencies, this field guarantees accurate pricing calculations and consistent handling across various currency formats."}}},"Tax":{"type":"object","required":["name","retail","original","net"],"properties":{"name":{"type":"string","description":"The name of the tax or fee, such as \"VAT\", \"City Tax\", or \"Service Charge\". This field provides clear labeling of the tax or fee being applied, making the pricing structure easier to interpret."},"retail":{"type":"integer","description":"The value of the tax or fee included in the retail price, expressed in the same currency as the pricingFrom.currency. This value indicates the portion of the end-customer price attributable to the specific tax or fee."},"original":{"type":"integer","description":""},"net":{"type":"integer","nullable":true,"description":"The value of the tax or fee included in the net price, expressed in the same currency as the pricingFrom.currency. This value indicates the portion of the reseller’s cost attributable to the specific tax or fee."}}},"ErrorInvalidProductID":{"type":"object","required":["productId"],"properties":{"productId":{"type":"string","description":"Missing or invalid `productId` in the request"}},"allOf":[{"$ref":"#/components/schemas/BaseError"}]},"BaseError":{"type":"object","required":["error","errorMessage"],"properties":{"error":{"type":"string","description":"The error code. A table of possible error codes is shown below."},"errorMessage":{"type":"string","description":"A human-readable error message will be translated depending on the language provided by the Accept-Language header."}}},"ErrorInvalidOptionID":{"type":"object","required":["optionId"],"properties":{"optionId":{"type":"string","description":"Missing or invalid `optionId` in the request"}},"allOf":[{"$ref":"#/components/schemas/BaseError"}]},"ErrorBadRequest":{"type":"object","allOf":[{"$ref":"#/components/schemas/BaseError"}]},"ErrorUnauthorized":{"type":"object","allOf":[{"$ref":"#/components/schemas/BaseError"}]},"ErrorInternalServerError":{"type":"object","allOf":[{"$ref":"#/components/schemas/BaseError"}]},"ErrorForbidden":{"type":"object","allOf":[{"$ref":"#/components/schemas/BaseError"}]},"AvailabilityCalendarBody":{"type":"object","required":["productId","optionId"],"properties":{"productId":{"type":"string","description":"The product id."},"optionId":{"type":"string","description":"The option id."},"localDateStart":{"type":"string","description":"Start date to query for (YYYY-MM-DD)."},"localDateEnd":{"type":"string","description":"End date to query for (YYYY-MM-DD)."},"units":{"type":"array","items":{"$ref":"#/components/schemas/AvailabilityUnit"},"description":"A list of units."},"currency":{"type":"string","description":"Can be used only when pricing capability is used."}}},"AvailabilityUnit":{"type":"object","required":["id","quantity"],"properties":{"id":{"type":"string","description":"The unit id."},"quantity":{"type":"integer","description":"The quantity of the unit."}},"description":"A list of units."}}},"paths":{"/availability/calendar":{"post":{"operationId":"Availabilities_AvailabilityCalendar","summary":"Availability Calendar","description":"This endpoint is highly optimised and will return a single object per day. It's designed to be queried for large date ranges and the result is used to populate an availability calendar.\n\nWhen the end user selects an open date you can call on `/availability` endpoint to get the `availabilityId` to create the booking","parameters":[{"$ref":"#/components/parameters/RequestHeaders.octoCapabilities"},{"$ref":"#/components/parameters/RequestHeadersContent"}],"responses":{"200":{"description":"The request has succeeded.","headers":{"Octo-Capabilities":{"required":true,"description":"A list of the Capabilities (their IDs) initialized with your request.","schema":{"type":"string"}},"Content-Language":{"required":false,"description":"This response header indicates the language of the content being returned in the response. The OCTO specification allows only one language to be returned per response. This code must conform to the BCP 47 standard, following RFC 5646 and RFC 4647 specifications for language tags. Examples include en-US for American English, fr-FR for French (France), and es-ES for Spanish (Spain).  To obtain content in multiple languages, separate requests must be made for each desired language. This header is defined in the HTTP/1.1 specification (RFC 7231). For more information, see MDN Web Docs: Content-Language - HTTP | MDN. This response header is required when using Content capability.","schema":{"type":"string"}},"Available-Languages":{"required":false,"description":"This response header is used to inform of the languages in which content is available, helping understand the language options without needing additional requests. This code must conform to the BCP 47 standard, following RFC 5646 and RFC 4647 specifications for language tags. Examples include en-US for American English, fr-FR for French (France), and es-ES for Spanish (Spain).  Although not a standard HTTP header, it is commonly used in APIs to list available languages, such as en-US, fr-CA, es-ES, indicating that content can be requested in U.S. English, Canadian French, or Spanish. This response header is required when using Content capability.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/AvailabilityCalendar"}}}}},"400":{"description":"The server could not understand the request due to invalid syntax.","content":{"application/json":{"schema":{"anyOf":[{"$ref":"#/components/schemas/ErrorInvalidProductID"},{"$ref":"#/components/schemas/ErrorInvalidOptionID"},{"$ref":"#/components/schemas/ErrorBadRequest"},{"$ref":"#/components/schemas/ErrorUnauthorized"},{"$ref":"#/components/schemas/ErrorInternalServerError"},{"$ref":"#/components/schemas/ErrorForbidden"}]}}}}},"tags":["Availability"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AvailabilityCalendarBody"}}}}}}}}
```

## Availability Check

{% hint style="danger" %}
**A reseller has to perform** [**Availability Check**](#availability-check) **to retrieve an** `availabilityId` **in order to make a** [**Booking Reservation**](https://docs.octo.travel/bookings#booking-reservation)**, so this endpoint is critical for the booking flow.**&#x20;
{% endhint %}

## Availability Check

> This endpoint is slightly slower as it will return an object for each individual departure time (or day). You have to perform this step to retrieve an \`availabilityId\` in order to confirm a sale, so if you just want to use this endpoint and skip the calendar endpoint then that's perfectly ok.\
> \
> You must pass in one of the following combinations of parameters for this endpoint:\
> \- \`localDate\`\
> \- \`localeDateStart\` and \`localDateEnd\`\
> \- \`availabilityIds\`

```json
{"openapi":"3.1.0","info":{"title":"OCTO API Specification","version":"0.0.0"},"tags":[{"name":"Availability"}],"servers":[{"url":"http://localhost:8080/api/octo","description":"","variables":{}},{"url":"https://ventrata-api-1011165921260.us-central1.run.app/api/octo","description":"","variables":{}}],"security":[{"BearerAuth":[]}],"components":{"securitySchemes":{"BearerAuth":{"type":"http","scheme":"Bearer"}},"parameters":{"RequestHeaders.octoCapabilities":{"name":"Octo-Capabilities","in":"header","required":true,"description":"A list of the Capabilities (their IDs) initialized with your request.","schema":{"type":"string"}},"RequestHeadersContent":{"name":"Accept-Language","in":"header","required":false,"description":"This optional request header allows to specify preferred languages for content in the response. A language code that specifies the language of the product content. This code must conform to the BCP 47 standard, following RFC 5646 and RFC 4647 specifications for language tags. Examples include en-US for American English, fr-FR for French (France), and es-ES for Spanish (Spain). This header supports a comma-separated list of language tags with optional quality values (q) to indicate priority, such as en-US, fr-CA;q=0.8, fr;q=0.7, which prioritizes U.S. English, followed by Canadian French, and general French. This header is defined in the HTTP/1.1 specification (RFC 7231) and is commonly used for internationalized websites and services to enhance user experience. For more details, visit MDN Web Docs: Accept-Language - HTTP | MDN. Note this only determines preference and does not guarantee location has content available in the desired language.","schema":{"type":"string"}}},"schemas":{"Availability":{"type":"object","required":["id","localDateTimeStart","localDateTimeEnd","utcCutoffAt","allDay","available","status","vacancies","capacity","maxUnits","openingHours"],"properties":{"id":{"type":"string","description":"A unique identifier for this availability. This ID is used during booking and must be unique within the scope of an option."},"localDateTimeStart":{"type":"string","description":"The start time for this availability in the product’s local time zone. This value must conform to ISO 8601 standards (e.g., \"2024-11-17T09:00:00+00:00\")."},"localDateTimeEnd":{"type":"string","description":"The end time for this availability in the product’s local time zone. It must also adhere to ISO 8601 standards."},"utcCutoffAt":{"type":"string","format":"date-time","description":"The time by which the booking must be confirmed at"},"allDay":{"type":"boolean","description":"Indicates if this availability spans the entire day. If set to true, there will be no specific start or end times for this availability."},"available":{"type":"boolean","description":"Indicates if there are remaining slots available for this date or time slot."},"status":{"allOf":[{"$ref":"#/components/schemas/AvailabilityStatus"}],"description":"Defines the current status of the availability:\nAVAILABLE: Open for booking.\nFREESALE: Unlimited availability, no capacity limits.\nSOLD_OUT: No spots available.\nLIMITED: Less than 50% capacity remaining.\nCLOSED: The availability is closed."},"vacancies":{"type":"integer","nullable":true,"description":"Specifies the number of available slots remaining. Should be nulled or omitted when status is FREESALE. If availability is tracked per unit, this represents the maximum remaining quantity across all units."},"capacity":{"type":"integer","nullable":true,"description":"The total capacity for this availability."},"maxUnits":{"type":"integer","nullable":true,"description":"The maximum number of units that can be sold in a single booking during this availability slot."},"openingHours":{"type":"array","items":{"$ref":"#/components/schemas/OpeningHours"},"description":"Defines the opening hours for this availability, even for start time-based availability. Supports multiple periods for breaks in the day."},"unitPricing":{"type":"array","items":{"$ref":"#/components/schemas/PricingUnit"},"description":"Is on the object when Pricing capability is requested. "},"pricing":{"type":"array","items":{"$ref":"#/components/schemas/Pricing"},"description":"Is on the object when Pricing capability is requested. "},"title":{"type":"string","nullable":true,"description":"The public, customer-facing for the availablity. This name is displayed to end customers and should accurately represent the option for marketing and sales purposes. Can be null when not appliable "},"shortDescription":{"type":"string","description":"A brief, customer-facing description of the availability. This field provides a concise overview of availability. "}}},"AvailabilityStatus":{"type":"string","enum":["AVAILABLE","FREESALE","SOLD_OUT","LIMITED","CLOSED"]},"OpeningHours":{"type":"object","required":["from","to"],"properties":{"from":{"type":"string","description":"The opening time"},"to":{"type":"string","description":"The closing time"}},"description":"Defines the opening hours for this availability, even for start time-based availability. Supports multiple periods for breaks in the day."},"PricingUnit":{"type":"object","required":["unitId"],"properties":{"unitId":{"type":"string","description":"ID of the unit this pricing is related to"}},"allOf":[{"$ref":"#/components/schemas/Pricing"}]},"Pricing":{"type":"object","required":["original","retail","net","currency","currencyPrecision","includedTaxes"],"properties":{"original":{"type":"integer","description":"Represents the advertised marketing price, which must be equal to or higher than pricingFrom.retail. Typically used for strike-through pricing, it highlights the original or component-based value of the product when the retail price reflects a discount or bundled offer. For example, a package product combining multiple components (e.g., hotel + tour + meals) may have a total component value of $500 (original), while the bundled retail price is $400. In such cases, the original price is displayed to show savings.This field should only be shown when it is higher than pricingFrom.retail and must accurately reflect a valid reference price, ensuring transparency and trust."},"retail":{"type":"integer","description":"The supplier’s recommended sale price, including all taxes and fees. This is the price charged to end customers and represents the total cost."},"net":{"type":"integer","nullable":true,"description":"The wholesale price charged to the reseller, including all taxes and fees. This price reflects the amount the reseller pays to the supplier."},"currency":{"type":"string","description":"Specifies the currency used for the prices provided in the pricingFrom object. The value must adhere to ISO 4217 currency codes (e.g., USD, EUR, JPY) to ensure consistency across systems."},"currencyPrecision":{"type":"integer","description":"All pricing is given in integers to avoid floating point rounding issues. e.g. USD = 2 and JPY = 0. To convert a price to decimal you should do: price / (10 ** currencyPrecision) where ** is to the power of e.g. Math.pow(10, currencyPrecision)."},"includedTaxes":{"type":"array","items":{"$ref":"#/components/schemas/Tax"},"description":"This field defines the number of decimal places used for the currency in the pricingFrom object, ensuring precise representation and preventing rounding errors during calculations. For example, in currencies like USD, which have a precision of 2, prices are expressed in cents (e.g., $45.00 is represented as 4500). In currencies like JPY, which have a precision of 0, prices are expressed as whole yen amounts (e.g., ¥4500 is represented as 4500). By aligning with the specific decimal requirements of different currencies, this field guarantees accurate pricing calculations and consistent handling across various currency formats."}}},"Tax":{"type":"object","required":["name","retail","original","net"],"properties":{"name":{"type":"string","description":"The name of the tax or fee, such as \"VAT\", \"City Tax\", or \"Service Charge\". This field provides clear labeling of the tax or fee being applied, making the pricing structure easier to interpret."},"retail":{"type":"integer","description":"The value of the tax or fee included in the retail price, expressed in the same currency as the pricingFrom.currency. This value indicates the portion of the end-customer price attributable to the specific tax or fee."},"original":{"type":"integer","description":""},"net":{"type":"integer","nullable":true,"description":"The value of the tax or fee included in the net price, expressed in the same currency as the pricingFrom.currency. This value indicates the portion of the reseller’s cost attributable to the specific tax or fee."}}},"ErrorInvalidProductID":{"type":"object","required":["productId"],"properties":{"productId":{"type":"string","description":"Missing or invalid `productId` in the request"}},"allOf":[{"$ref":"#/components/schemas/BaseError"}]},"BaseError":{"type":"object","required":["error","errorMessage"],"properties":{"error":{"type":"string","description":"The error code. A table of possible error codes is shown below."},"errorMessage":{"type":"string","description":"A human-readable error message will be translated depending on the language provided by the Accept-Language header."}}},"ErrorInvalidOptionID":{"type":"object","required":["optionId"],"properties":{"optionId":{"type":"string","description":"Missing or invalid `optionId` in the request"}},"allOf":[{"$ref":"#/components/schemas/BaseError"}]},"ErrorBadRequest":{"type":"object","allOf":[{"$ref":"#/components/schemas/BaseError"}]},"ErrorUnauthorized":{"type":"object","allOf":[{"$ref":"#/components/schemas/BaseError"}]},"ErrorInternalServerError":{"type":"object","allOf":[{"$ref":"#/components/schemas/BaseError"}]},"ErrorForbidden":{"type":"object","allOf":[{"$ref":"#/components/schemas/BaseError"}]},"AvailabilityCheckBody":{"type":"object","required":["productId","optionId"],"properties":{"productId":{"type":"string","description":"The product id."},"optionId":{"type":"string","description":"The option id."},"localDateStart":{"type":"string","description":"Start date to query for (YYYY-MM-DD). Required if `localDateEnd` is set."},"localDateEnd":{"type":"string","description":"End date to query for (YYYY-MM-DD). Required if `localDateStart` is set."},"availabilityIds":{"type":"array","items":{"type":"string"},"description":"Filter the results by the given ids."},"units":{"type":"array","items":{"$ref":"#/components/schemas/AvailabilityUnit"},"description":"A list of units."},"currency":{"type":"string","description":"Can be used only when pricing capability is used."}}},"AvailabilityUnit":{"type":"object","required":["id","quantity"],"properties":{"id":{"type":"string","description":"The unit id."},"quantity":{"type":"integer","description":"The quantity of the unit."}},"description":"A list of units."}}},"paths":{"/availability/":{"post":{"operationId":"Availabilities_AvailabilityCheck","summary":"Availability Check","description":"This endpoint is slightly slower as it will return an object for each individual departure time (or day). You have to perform this step to retrieve an `availabilityId` in order to confirm a sale, so if you just want to use this endpoint and skip the calendar endpoint then that's perfectly ok.\n\nYou must pass in one of the following combinations of parameters for this endpoint:\n- `localDate`\n- `localeDateStart` and `localDateEnd`\n- `availabilityIds`","parameters":[{"$ref":"#/components/parameters/RequestHeaders.octoCapabilities"},{"$ref":"#/components/parameters/RequestHeadersContent"}],"responses":{"200":{"description":"The request has succeeded.","headers":{"Octo-Capabilities":{"required":true,"description":"A list of the Capabilities (their IDs) initialized with your request.","schema":{"type":"string"}},"Content-Language":{"required":false,"description":"This response header indicates the language of the content being returned in the response. The OCTO specification allows only one language to be returned per response. This code must conform to the BCP 47 standard, following RFC 5646 and RFC 4647 specifications for language tags. Examples include en-US for American English, fr-FR for French (France), and es-ES for Spanish (Spain).  To obtain content in multiple languages, separate requests must be made for each desired language. This header is defined in the HTTP/1.1 specification (RFC 7231). For more information, see MDN Web Docs: Content-Language - HTTP | MDN. This response header is required when using Content capability.","schema":{"type":"string"}},"Available-Languages":{"required":false,"description":"This response header is used to inform of the languages in which content is available, helping understand the language options without needing additional requests. This code must conform to the BCP 47 standard, following RFC 5646 and RFC 4647 specifications for language tags. Examples include en-US for American English, fr-FR for French (France), and es-ES for Spanish (Spain).  Although not a standard HTTP header, it is commonly used in APIs to list available languages, such as en-US, fr-CA, es-ES, indicating that content can be requested in U.S. English, Canadian French, or Spanish. This response header is required when using Content capability.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/Availability"}}}}},"400":{"description":"The server could not understand the request due to invalid syntax.","content":{"application/json":{"schema":{"anyOf":[{"$ref":"#/components/schemas/ErrorInvalidProductID"},{"$ref":"#/components/schemas/ErrorInvalidOptionID"},{"$ref":"#/components/schemas/ErrorBadRequest"},{"$ref":"#/components/schemas/ErrorUnauthorized"},{"$ref":"#/components/schemas/ErrorInternalServerError"},{"$ref":"#/components/schemas/ErrorForbidden"}]}}}}},"tags":["Availability"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AvailabilityCheckBody"}}}}}}}}
```
