Get availability
Get day-level availability, prices, and stay limits for one listing.
GET/api/v1/availability/{listingID}
Returns one row per date and unit from OnSeason's synchronized calendar. It doesn't call the PMS and doesn't hold inventory. The quote and the reservation check availability again.
Path parameters
| Parameter | Type | Description |
|---|---|---|
listingID | UUID | OnSeason listing ID. |
Query parameters
| Parameter | Type | Description |
|---|---|---|
startDate | date | First date, YYYY-MM-DD. Send with endDate. |
endDate | date | Last date, YYYY-MM-DD. Inclusive. |
status | enum | AVAILABLE or NOT_AVAILABLE. |
displayCurrency | string | ISO 4217 currency for prices. |
includePrice | boolean | true adds avgNightlyPrice for the rows on the page. |
aggregate | boolean | true returns one row per date, available when any requested unit is available. |
unitIds | UUID | Unit to include in aggregate mode. Repeat the parameter for each unit. |
page | integer | Page number. Default 1. |
limit | integer | Rows per page. Default 90, maximum 730. |
endDate is the last night, unlike search and quote, where the checkout date is not charged. For a stay from 10 to 13 August, request startDate=2026-08-10 and endDate=2026-08-12.
Example
curl --get \
"https://zepl-staging.calry.app/api/v1/availability/80e0e6d4-48cf-4ca7-8c85-6e8d7e9d969a" \
--header "x-calry-api-key: <API_KEY>" \
--data-urlencode "startDate=2026-08-10" \
--data-urlencode "endDate=2026-08-12" \
--data-urlencode "displayCurrency=EUR" \
--data-urlencode "includePrice=true"{
"data": [
{
"id": "14bb0c51-7f5a-4b36-9704-8c5cd65eca1f",
"date": "2026-08-10",
"status": "AVAILABLE",
"price": 132,
"minimumNights": 2,
"maximumNights": 30,
"currency": "EUR",
"originalPrice": 120,
"priceModifications": {
"defaultDiscount": { "percentage": 0, "value": 0 },
"markup": { "percentage": 10, "value": 12 }
},
"unit": {
"id": "70978a5b-c0d4-4f8c-8187-c695cac9d64e",
"providerUnitID": "staging-unit-101",
"name": "Entire apartment"
}
}
],
"meta": { "total": 3, "limit": 90, "totalPages": 1, "current": 1 },
"avgNightlyPrice": 132
}The example shows the first of three rows.
Response
| Field | Description |
|---|---|
data[].id | Row ID. |
data[].date | Calendar date, YYYY-MM-DD. |
data[].status | AVAILABLE or NOT_AVAILABLE. |
data[].price | Price for the night, with your channel's pricing. |
data[].minimumNights | Minimum stay for a booking that starts on this date. |
data[].maximumNights | Maximum stay for a booking that starts on this date. |
data[].currency | Currency of the prices. |
data[].originalPrice | Price before OnSeason's price modifications. |
data[].priceModifications | Default discount and channel markup applied. |
data[].unit | Unit id, providerUnitID, and name. Absent in aggregate mode. |
meta | Pagination metadata. |
avgNightlyPrice | Average of the row prices on the page. Only with includePrice=true. |
Status codes
| Status | Meaning |
|---|---|
200 | Availability returned. An empty data array is valid. |
400 | The listing ID, dates, status, currency, or pagination is invalid. |
401 | The API key is missing or invalid. |
404 | No listing with this ID is enabled for your channel. |