OnSeasonChannel API

Search

Find listings by location, dates, party size, and filters.

GET/api/v1/search

Returns the listings that match the stay and filters, with availability-aware prices and cancellation terms. Search and pricing explains how to use the prices.

Query parameters

Every parameter is optional. Send checkInDate and checkOutDate together to search for a stay. radius is required when you send location.

ParameterTypeDescription
checkInDatedateCheck-in date, YYYY-MM-DD.
checkOutDatedateCheck-out date, YYYY-MM-DD. At least one day after check-in.
guestsintegerParty size. Minimum 1.
locationstringCenter of the search as latitude,longitude, for example 48.8566,2.3522.
radiusnumberRadius in kilometers. Above 0.
amenitiesstring listComma-separated amenity IDs. A listing must have all of them.
petFriendlybooleantrue returns pet-friendly listings only.
bedroomCountintegerMinimum bedrooms. Minimum 0.
bathroomCountintegerMinimum bathrooms. Minimum 0.
propertyTypestring listComma-separated categories, for example Apartment,House,Hotel,Villa.
minPricenumberMinimum average nightly price in the display currency.
maxPricenumberMaximum average nightly price in the display currency.
displayCurrencystringISO 4217 currency for every price.
listingIDsUUID listComma-separated listing IDs to limit the search to. For many IDs, use Search by IDs.
tagsUUID listComma-separated tag IDs. A listing with any of them matches.
pageintegerPage number. Default 1.
limitintegerResults per page. Default 50, maximum 100.

Example

curl --get "https://zepl-staging.calry.app/api/v1/search" \
  --header "x-calry-api-key: <API_KEY>" \
  --data-urlencode "checkInDate=2026-12-02" \
  --data-urlencode "checkOutDate=2026-12-05" \
  --data-urlencode "guests=4" \
  --data-urlencode "location=48.8566,2.3522" \
  --data-urlencode "radius=25" \
  --data-urlencode "amenities=wifi,kitchen" \
  --data-urlencode "displayCurrency=EUR"
{
  "checkInDate": "2026-12-02",
  "checkOutDate": "2026-12-05",
  "location": "48.8566,2.3522",
  "radius": 25,
  "guests": 4,
  "amenities": ["wifi", "kitchen"],
  "listings": [
    {
      "id": "80e0e6d4-48cf-4ca7-8c85-6e8d7e9d969a",
      "providerID": "staging-property-101",
      "integrationAccountID": "50bfb7a4-cbc4-4c33-a8c8-37ba9a75c96d",
      "name": "Staging Apartment",
      "description": "Two-bedroom apartment available for API testing.",
      "address": {
        "city": "Paris",
        "line1": "10 Example Street",
        "line2": "",
        "state": "Ile-de-France",
        "country": "France",
        "postal_code": "75001"
      },
      "thumbnailURL": "https://example.com/images/staging-apartment.jpg",
      "pictures": [
        { "url": "https://example.com/images/staging-apartment-1.jpg", "description": "Living room" }
      ],
      "rating": { "count": 12, "average": 4.7 },
      "maxOccupancy": 4,
      "currency": "EUR",
      "latitude": 48.8566,
      "longitude": 2.3522,
      "bedroomCount": 2,
      "bathroomCount": 1,
      "avgNightlyPrice": 132,
      "totalPrice": 486,
      "distance": 1.8,
      "tags": [],
      "isPromoted": false,
      "amenities": {
        "categories": {
          "General": {
            "categoryID": "general",
            "values": [
              { "id": "wifi", "name": "Wi-Fi" },
              { "id": "kitchen", "name": "Kitchen" }
            ]
          }
        }
      },
      "priceModifications": {
        "defaultDiscount": { "percentage": 0, "value": 0 },
        "markup": { "percentage": 10, "value": 12 }
      },
      "cancellationPolicy": {
        "policyID": null,
        "name": "Non-refundable",
        "version": null,
        "source": "DEFAULT",
        "salesChannel": "acme",
        "timeZone": "Europe/Paris",
        "fixedAt": "2026-11-10T10:00:00.000Z",
        "refundable": false,
        "refundableTag": "NRFN",
        "freeCancellationUntil": null,
        "penalties": [
          { "from": "2026-11-10T10:00:00.000Z", "percentage": 100, "amount": 486, "currency": "EUR" }
        ],
        "description": "Non-refundable: no refund if cancelled."
      }
    }
  ],
  "meta": { "total": 1, "limit": 50, "totalPages": 1, "current": 1 }
}

The values are examples. Staging content, prices, and availability change.

Response

FieldTypeDescription
checkInDate, checkOutDatestringStay dates used, when sent.
location, radiusstring, numberSearch center and radius used, when sent.
guestsnumberParty size used, when sent.
amenitiesstring arrayAmenity IDs used, when sent.
listingsarrayMatching listings. See below.
metaobjectPagination metadata.

Listing result

FieldTypeDescription
idUUIDOnSeason listing ID. Use it in quotes and reservations.
providerIDstringListing ID in the source PMS.
integrationAccountIDUUIDThe property's connected PMS account.
name, descriptionstringTitle and description.
addressobjectcity, line1, line2, state, country, and postal_code.
thumbnailURL, picturesstring, arrayMain image and images.
ratingobjectaverage and count, when available.
maxOccupancynumberMaximum number of guests, when available.
latitude, longitudenumberCoordinates.
bedroomCount, bathroomCountnumberLayout.
currencystringCurrency of every price on the result.
avgNightlyPricenumberAverage nightly price for the stay, with your channel's markup. Leaves out fees and taxes when totalPrice is absent.
totalPricenumberFull price of the stay with fees, taxes, and markup, rounded up to a whole unit. Present only when OnSeason can rebuild the PMS's quote for the stay.
priceModificationsobjectdefaultDiscount and markup already applied, each with percentage and value. Discount values are negative and markup values are positive.
distancenumberKilometers from location, for location searches.
bookableCapacitynumberGuests the property can host across the rooms free for the stay. MULTI_UNIT and COMPLEX only.
roomsForPartynumberFewest rooms that seat the party. Above 1, avgNightlyPrice is per room.
amenitiesobjectAmenities grouped by category.
tagsarrayTags on the listing.
isPromotedbooleanWhether the listing is promoted.
cancellationPolicyobjectThe cancellation terms a quote for this stay returns, with amounts based on the search price. Present only when you send both dates.

Status codes

StatusMeaning
200Search completed. An empty listings array is a valid result.
400A parameter is invalid.
401The API key is missing or invalid.

On this page