Price a new order#
/v1/ordersBuilds and prices a real cart for the requested stay — the same pricing path a CRS agent's cart goes through, so the quoted price matches exactly. Scoped to the caller's own channel and agent group (there is no channelId/agentId/userId field on this payload — none would be honoured). Takes no inventory hold: validUntil is a courtesy expiry, not a guarantee that the stay is still available or that its price hasn't moved. Book promptly once the quote is accepted.
Bank offers. Supply bankOfferCode to apply a specific offer, or applyBestBankOffer: true to have the highest-value one picked for you. Only offers on your own channel are ever visible or applicable. An explicit bankOfferCode always wins over applyBestBankOffer — a named code is never swapped for a richer one — and a code that is unknown, off-channel, or ineligible for this stay comes back 400 rather than being quietly ignored. Whatever was applied is named in summary.bankOffer, with the amount and the stayAfterCancellationPlan → priceAfterBankOffer steps it moved between.
Request
curl -X POST 'https://partner-api.elivaas.com/v1/orders' \
-u "$ELIVAAS_API_KEY:" \
-H 'Content-Type: application/json' \
-d '{"listingId":"list_9f8a2b1c","checkIn":"2026-08-10","checkOut":"2026-08-13","adults":2,"children":0,"infants":0,"selectedProperties":[{"propertyId":"prop_1a2b3c","quantity":1}],"meals":[{"mealId":"meal_breakfast","dates":["2026-08-01"],"unsureOfDates":true,"adults":0,"children":0,"chefOnCall":true}],"vas":[{"vasId":"vas_airport_transfer","variantId":"string","dates":["2026-08-01"],"unsureOfDates":true,"quantity":0,"dateQuantities":[{"date":"2026-08-01","quantity":0}]}],"bankOfferCode":"HDFC10","applyBestBankOffer":false,"externalRef":"PO-48213"}'const res = await fetch('https://partner-api.elivaas.com/v1/orders', {
method: 'POST',
headers: {
Authorization: 'Basic ' + Buffer.from(process.env.ELIVAAS_API_KEY + ':').toString('base64'),
'Content-Type': 'application/json',
},
body: JSON.stringify({"listingId":"list_9f8a2b1c","checkIn":"2026-08-10","checkOut":"2026-08-13","adults":2,"children":0,"infants":0,"selectedProperties":[{"propertyId":"prop_1a2b3c","quantity":1}],"meals":[{"mealId":"meal_breakfast","dates":["2026-08-01"],"unsureOfDates":true,"adults":0,"children":0,"chefOnCall":true}],"vas":[{"vasId":"vas_airport_transfer","variantId":"string","dates":["2026-08-01"],"unsureOfDates":true,"quantity":0,"dateQuantities":[{"date":"2026-08-01","quantity":0}]}],"bankOfferCode":"HDFC10","applyBestBankOffer":false,"externalRef":"PO-48213"}),
});
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/orders",
auth=(os.environ["ELIVAAS_API_KEY"], ""),
json={"listingId":"list_9f8a2b1c","checkIn":"2026-08-10","checkOut":"2026-08-13","adults":2,"children":0,"infants":0,"selectedProperties":[{"propertyId":"prop_1a2b3c","quantity":1}],"meals":[{"mealId":"meal_breakfast","dates":["2026-08-01"],"unsureOfDates":true,"adults":0,"children":0,"chefOnCall":true}],"vas":[{"vasId":"vas_airport_transfer","variantId":"string","dates":["2026-08-01"],"unsureOfDates":true,"quantity":0,"dateQuantities":[{"date":"2026-08-01","quantity":0}]}],"bankOfferCode":"HDFC10","applyBestBankOffer":false,"externalRef":"PO-48213"},
timeout=30,
)
res.raise_for_status()
data = res.json(){
"orderId": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
"validUntil": "2026-07-27T05:30:00Z",
"currency": "INR",
"items": [
{
"listingId": "string",
"checkIn": "2026-08-01",
"checkOut": "2026-08-01",
"nights": 0,
"soldOut": true,
"itemSubtotal": 0,
"cancellationPlanId": "string",
"cancellationPlanDiscount": 0,
"cancellationPolicy": [
{
"cancelBy": "2026-08-01",
"refundPercentage": 0,
"label": "string"
}
]
}
],
"summary": {
"baseSubtotal": 0,
"mealsSubtotal": 0,
"vasSubtotal": 0,
"cancellationPlanDiscount": 0,
"stayAfterCancellationPlan": 0,
"bankOffer": {
"code": "HDFC10",
"title": "10% off with HDFC credit cards",
"discountType": "PERCENTAGE",
"discount": 1000,
"applied": true,
"reason": "string"
},
"priceAfterBankOffer": 0,
"offersDiscount": 0,
"taxableSubtotal": 0,
"gst": 0,
"grandTotal": 0
}
}Request body#
listingIdstringrequiredListing to price.
checkInstring<date>requiredCheck-in date (ISO 8601).
checkOutstring<date>requiredCheck-out date (ISO 8601).
adultsinteger<int32>Adult guest count.
childreninteger<int32>Child guest count.
infantsinteger<int32>Infant guest count.
selectedPropertiesobject[]Specific properties picked from the listing, with per-property quantity. Omit to record only the listing-level booking, with no property breakdown tracked.
mealsobject[]Meal add-ons to apply to the stay. Omit or leave empty for none.
vasobject[]Value-added-service add-ons to apply to the stay. Omit or leave empty for none.
bankOfferCodestringApply this specific bank offer to the stay. Only offers available on your own channel can be applied; a code that doesn't exist, isn't offered on your channel, or isn't eligible for this stay is rejected with
400— it is never silently dropped and never silently replaced by a different offer. Takes precedence overapplyBestBankOffer, even when the best available offer is worth more.applyBestBankOfferbooleanApply the highest-value bank offer available on your channel for this stay, chosen for you. Ignored entirely when
bankOfferCodeis supplied. When no offer is eligible the order simply prices without one — that is not an error. The offer that won is named insummary.bankOfferon the response.externalRefstringOptional caller-supplied reference. Used as the order's display name when supplied; purely cosmetic, never used for lookups or scoping.
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.