> ## Documentation Index
> Fetch the complete documentation index at: https://docs.spaportal.cz/llms.txt
> Use this file to discover all available pages before exploring further.

# Visit type

> A stay package with its board, treatment, stay rules, prices, hotel listings, and promotions.

A visit type is a stay package sold by one or more hotels, such as a spa cure
or a wellness weekend. [Visit types](https://docs.spaportal.cz/api/visit-types.md) explains availability
and stay rules. The [list](https://docs.spaportal.cz/api/v2/reference/visit-types/list-visit-types.md)
and [detail](https://docs.spaportal.cz/api/v2/reference/visit-types/get-a-visit-type.md) endpoints define
the request parameters and show complete responses.

The example on this page also includes the optional `hotelListings[].hotel`
and `priceFromPeriods` fields. The API returns them only with `expand=hotel`
and, on the detail endpoint, `expand=priceFromPeriods`.

## Name and short description

`name` and `shortDescription` are localized by
[`Accept-Language`](https://docs.spaportal.cz/api/localization). A missing name translation falls back
to the Czech name. `shortDescription` is a plain-text teaser for package
lists and previews, at most 120 characters per locale; a missing translation
is `null`.

## Category, payer, and booking mode

| `category` | Meaning |
| - | - |
| `health` | A spa cure with medical treatment. |
| `wellness` | Any other stay, such as a wellness weekend. |

`payer` says who pays for a health stay; every health stay has one. It is
`null` for a wellness stay.

| `payer` | Meaning |
| - | - |
| `guest` | The guest pays for the whole stay. |
| `guest_and_insurer` | The insurer pays for treatment and medical care; the guest pays for accommodation and meals. |
| `insurer` | The insurer pays for treatment, medical care, accommodation, and meals. |

| `bookingMode` | Meaning |
| - | - |
| `instant` | A booking is confirmed immediately when a room is available. |
| `request` | Every booking is a request that the hotel confirms. |

A package with `payer: "insurer"` always has `bookingMode: "request"`.
`bookingMode` is the package's confirmation policy; it says nothing about
room availability on a particular date.

## Availability

`available` says whether the package is offered now. When it is `false`,
`unavailableReason` gives the first applicable reason:

| `unavailableReason` | Meaning |
| - | - |
| `disabled` | The package is switched off in SpaPortal. |
| `ended` | Every validity period has ended. |
| `no_arrival` | No permitted stay with an arrival from today onward remains. |
| `no_hotels` | No active hotel sells the package. |

`unavailableReason` is `null` when `available` is `true`. Availability is a
catalog property; room capacity and prices are separate. See
[Publication and availability](https://docs.spaportal.cz/api/visit-types.md#publication-and-availability).

## Website presentation

`webOrder` is the package's position on the website, starting at 1, or `null`
when it has none. The list endpoint sorts by it by default.

### Channel content

`channelContent` groups the content that depends on the sales channel of your
public key. Its only field, `collections`, lists the website collections the
package belongs to.

Collections are content of the company's own website. Only keys of that
website's channel receive them, and only with such a key does the `collection`
filter match. Every other key, including SpaBooking, receives `[]`.
[Channels and scope](https://docs.spaportal.cz/api/authentication.md#channels-and-scope) defines the
company's own website.

Codes appear in this order, each at most once:

| Code | Meaning |
| - | - |
| `advent_christmas_new_year` | Advent, Christmas, and New Year stays. |
| `families_with_children` | Stays for families with children. |
| `wellness` | Wellness stays. |
| `treatment_stays` | Spa cures. |
| `special_offers` | Packages with at least one current or future promotion for your channel. |
| `hotel_stay` | Wellness stays without included procedures. |

`advent_christmas_new_year` and `families_with_children` are assigned in
SpaPortal. The other codes are derived. `wellness` covers every package with
`category: "wellness"`, and `treatment_stays` every package with
`category: "health"`. `hotel_stay` covers wellness packages whose
`treatment.procedures.count` is `0` and whose `selection` is not `fixed` with
items; these packages are also in `wellness`. `special_offers` is present
exactly when a current or future promotion applies to the company's own
website key. Ended promotions, which the detail returns with
`expand=priceFromPeriods`, do not count.

## Board

`board.meals` has one row per meal, always in this order: `breakfast`,
`lunch`, `dinner`, `all_inclusive`. Each row has:

| Field | Meaning |
| - | - |
| `meal` | The meal code. |
| `included` | The meal is included in the package price. |
| `changeable` | The guest can drop the meal when it is included, or add it when it is not. |

`all_inclusive` adds snacks and drinks during the day. When it is included,
breakfast, lunch, and dinner are included too; dropping it leaves those meals
in place. Drinks served with a meal are a property of the hotel's
[meal services](https://docs.spaportal.cz/api/objects/hotel.md#structured-profile), not of the package.

The following board is half board with lunch available as an add-on:

```json theme={null}
{
  "meals": [
    { "meal": "breakfast", "included": true, "changeable": false },
    { "meal": "lunch", "included": false, "changeable": true },
    { "meal": "dinner", "included": true, "changeable": false },
    { "meal": "all_inclusive", "included": false, "changeable": false }
  ]
}
```

Derive your own board label, such as "Half board", from the included rows.
The API does not price meal changes.

## Stay length and arrival

`stayLength` is never `null`:

| Field | Meaning |
| - | - |
| `unit` | `night` or `week`. A week is seven nights. |
| `min` | Shortest permitted stay, in `unit`. |
| `max` | Longest permitted stay, in `unit`, or `null` when there is no maximum. |

For example, `{ "unit": "night", "min": 2, "max": null }` permits any stay of
two or more nights, and `{ "unit": "week", "min": 1, "max": 3 }` permits 7, 14,
or 21 nights.

`arrival` has one of two shapes, selected by `type`:

| `arrival.type` | Field | Meaning |
| - | - | - |
| `weekdays` | `weekdays` | Permitted arrival weekdays, Monday first; never empty. |
| `dates` | `dates` | Permitted arrival dates from today onward, ascending. Empty when every configured date has passed; the package then has no permitted stay. |

Weekday codes are the lowercase English day names, `monday` to `sunday`.

## Validity

`validity` lists the current and future periods in which the package can be
stayed, ordered by `from`. Each period has:

| Field | Meaning |
| - | - |
| `from` | First permitted arrival date. |
| `to` | Last permitted date, inclusive, as interpreted by `toAppliesTo`. |
| `toAppliesTo` | `arrival`: `to` limits the arrival date. `departure`: `to` limits the checkout date. |

`validity` is `null` when no periods are configured, which means no date
restriction, and `[]` when every configured period has ended.
[Testing a stay against its rules](https://docs.spaportal.cz/api/visit-types.md#testing-a-stay-against-its-rules)
shows how periods permit a stay.

## Treatment

`treatment` is a [Treatment](https://docs.spaportal.cz/api/objects/treatment.md) object: the included
examinations and the procedure allowance with its selection mode.

## Prices and promotions

`priceFrom` holds the package's lowest prices across all its hotels, per
currency, as two independent [Price from](https://docs.spaportal.cz/api/objects/price-from.md) minima.
Packages booked on request and packages switched off in SpaPortal
(`unavailableReason: "disabled"`) also have a `priceFrom`; check `available`
and `bookingMode` before you offer a booking. `priceFrom` is `null` when no
complete stay exists from today onward. [Prices](https://docs.spaportal.cz/api/prices.md) explains how
stays are selected.

`priceFromPeriods` lists the package's [price periods](https://docs.spaportal.cz/api/objects/price-from-period.md):
ranges of nights with their prices across all hotels, including past nights.
The detail returns it only with `expand=priceFromPeriods`. Periods do not
check free rooms or permitted arrival days.

`promotions` lists the current and future [promotions](https://docs.spaportal.cz/api/objects/promotion.md)
that apply to your channel, ordered by `from`, then `id`. With
`expand=priceFromPeriods`, it also includes ended promotions, so every
promotion id in a period can be looked up.

## Hotel listings

`hotelListings` lists the active hotels selling the package, ordered by Czech
hotel name. Every listing has:

| Field | Meaning |
| - | - |
| `hotelId` | The hotel. |
| `priceFrom` | Lowest prices of this package at this hotel, per currency, or `null`. |
| `hotel` | Hotel summary with `id`, localized `name`, and `stars`. Only with `expand=hotel`. |
| `priceFromPeriods` | Price periods of this package at this hotel. Only with `expand=priceFromPeriods` on the detail. |

A listing describes the package at one hotel and stays present when its
`priceFrom` is `null`. Fetch the [Hotel](https://docs.spaportal.cz/api/objects/hotel.md) endpoint for the
full profile. Hotel names use
the same Czech fallback as the hotel's `name`.

On the detail endpoint, `hotelId` narrows `hotelListings` to one entry.
The package's `priceFrom`, `priceFromPeriods`, and `promotions` still cover
all its hotels.

## Images

`images` contains the package photos in configured order; the first is the
main photo. Each uses the [image fields](https://docs.spaportal.cz/api/images.md). A missing `alt`
translation falls back to the localized package name; an empty string marks a
decorative image.

## Fields


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.