Search listings#
POST
/v1/listings/searchAvailability- and filter-aware search over the catalogue, scoped to your channel — the same search CRS runs, so the two surfaces never drift. Prices returned here are INDICATIVE ONLY: the order preview (a later API slice) is the authoritative price a booking is actually made against. Do not book against these figures.
Request
curl -X POST 'https://partner-api.elivaas.com/v1/listings/search' \
-u "$ELIVAAS_API_KEY:" \
-H 'Content-Type: application/json' \
-d '{"rawParams":[{"filterName":"string","filterValues":["string"]}],"selections":[{"date":"string","type":"string","id":"string","adults":0,"children":0,"quantity":0}],"selectedCancellationPlanId":"string"}'const res = await fetch('https://partner-api.elivaas.com/v1/listings/search', {
method: 'POST',
headers: {
Authorization: 'Basic ' + Buffer.from(process.env.ELIVAAS_API_KEY + ':').toString('base64'),
'Content-Type': 'application/json',
},
body: JSON.stringify({"rawParams":[{"filterName":"string","filterValues":["string"]}],"selections":[{"date":"string","type":"string","id":"string","adults":0,"children":0,"quantity":0}],"selectedCancellationPlanId":"string"}),
});
if (!res.ok) throw new Error(`${res.status} ${await res.text()}`);
const data = await res.json();import os, requests
res = requests.post(
"https://partner-api.elivaas.com/v1/listings/search",
auth=(os.environ["ELIVAAS_API_KEY"], ""),
json={"rawParams":[{"filterName":"string","filterValues":["string"]}],"selections":[{"date":"string","type":"string","id":"string","adults":0,"children":0,"quantity":0}],"selectedCancellationPlanId":"string"},
timeout=30,
)
res.raise_for_status()
data = res.json(){
"singleListings": [
{
"listingId": "string",
"title": "string",
"coverPicture": "string",
"encodedId": "string",
"propertyType": "string",
"brand": "string",
"badges": [
{
"label": "string",
"type": "NEW",
"placement": "TOP_LEFT"
}
],
"adults": 0,
"beds": 0,
"bathrooms": 0,
"bedrooms": 0,
"unitCount": 0,
"locality": "string",
"city": "string",
"state": "string",
"rating": 0,
"reviewCount": 0,
"overallRating": 0,
"totalReviews": 0,
"tags": [
"string"
],
"usps": [
{
"id": 0,
"name": "string",
"description": "string",
"isDifferentiator": true
}
],
"selectedProperties": [
{
"propertyId": "string",
"title": "string",
"quantity": 0
}
],
"price": {
"perNight": 0,
"perNightBeforeDiscount": 0,
"total": 0,
"totalBeforeDiscount": 0,
"totalSaving": 0,
"discountPercent": 0
},
"offerTitles": [
"string"
],
"cancellationPlans": [
{
"id": "string",
"name": "string",
"planType": "string",
"cancellationSummary": "string",
"hasDiscount": true,
"totalAfterDiscount": 0,
"perNightAfterDiscount": 0,
"totalSaving": 0,
"discountPercent": 0
}
]
}
],
"combinedGroups": [
{
"groupId": "string",
"totalAdultCapacity": 0,
"totalChildrenCapacity": 0,
"listingCount": 0,
"maxPairwiseDistanceMeters": 0,
"proximityLabel": "string",
"listings": [
{
"listingId": "string",
"title": "string",
"coverPicture": "string",
"encodedId": "string",
"propertyType": "string",
"brand": "string",
"badges": [],
"adults": 0,
"beds": 0,
"bathrooms": 0,
"bedrooms": 0,
"unitCount": 0,
"locality": "string",
"city": "string",
"state": "string",
"rating": 0,
"reviewCount": 0,
"overallRating": 0,
"totalReviews": 0,
"tags": [],
"usps": [],
"selectedProperties": [],
"price": {},
"offerTitles": [],
"cancellationPlans": []
}
],
"price": {
"perNight": 0,
"perNightBeforeDiscount": 0,
"total": 0,
"totalBeforeDiscount": 0,
"totalSaving": 0,
"discountPercent": 0
}
}
],
"nights": 0,
"requiredAdults": 0,
"requiredChildren": 0,
"page": 0,
"size": 0,
"totalSingleListings": 0,
"totalPages": 0,
"rawParams": [
{
"filterName": "string",
"filterValues": [
"string"
]
}
]
}Request body#
rawParamsobject[]No description in the spec.
selectionsobject[]No description in the spec.
selectedCancellationPlanIdstringNo description in the spec.
Responses#
| Status | Meaning |
|---|---|
200 | OK |
400 | Validation failure. The message names the offending parameter. Limits are rejected, never silently clamped: an over-length id list, a page size above 100 or a date window longer than 365 days all land here rather than coming back quietly truncated. |
401 | Missing, malformed, revoked or unknown API key, or an agent group whose distribution access is disabled. Pass the key as the HTTP Basic username with an empty password. |
429 | Rate limit exhausted for this credential. Wait Retry-After seconds before retrying; the budget is per credential, not per IP. |
See Errors for the error body shape and which statuses are worth retrying.