Skip to main content

Elivaas Distribution API

The Elivaas Distribution API enables channel partners to programmatically search properties, retrieve real-time availability and pricing, and create confirmed bookings. It is a RESTful API that accepts and returns JSON over HTTPS.

Quick Start

Go from zero to your first booking in four steps.

API Reference

Explore the full endpoint reference with request and response schemas.

Support

Reach the integrations team at developers@elivaas.com.

Authentication

All requests are authenticated with two headers issued by the Elivaas team during onboarding.
HeaderTypeDescription
Api-KeystringA secret key that identifies your application. Treat it like a password — transmit it only over HTTPS and never expose it in client-side code.
Channel-IdstringIdentifies your distribution channel. Determines which properties, rate plans, and promotions are accessible.
curl -X GET "https://sandbox.elivaas.com/v1/cities" \
  -H "Api-Key: YOUR_API_KEY" \
  -H "Channel-Id: YOUR_CHANNEL_ID"
Requests missing either header will receive a 401 Unauthorized response.

Base URLs

EnvironmentBase URLDescription
Sandboxhttps://sandbox.elivaas.comIsolated environment for development and testing. No real inventory is affected.
Productionhttps://api.elivaas.com/apiLive environment with real-time inventory. Bookings created here are fulfilled.
Complete your integration against Sandbox before switching to Production. Both environments share the same API contract — only the base URL changes.

Quick Start

The core booking flow requires four steps. Each step produces a value consumed by the next.
Fetch Cities ──▶ Search Properties & Rates ──▶ Get a Quote ──▶ Create Booking
  (slugs)              (browse)               (lock pricing)     (confirm)

1. Fetch Cities

Before you can search properties by location, you need the list of available cities and states. This call returns slug values that are required as the city parameter in the Discovery API.

GET /v1/cities

curl -X GET "https://sandbox.elivaas.com/v1/cities" \
  -H "Api-Key: YOUR_API_KEY" \
  -H "Channel-Id: YOUR_CHANNEL_ID"
Response:
[
  {
    "name": "Goa",
    "displayName": "Goa",
    "slug": "stategoa",
    "type": "STATE",
    "numberOfProperties": null
  },
  {
    "name": "North Goa",
    "displayName": "North Goa, Goa",
    "slug": "citynorth-goa",
    "type": "CITY",
    "numberOfProperties": null
  },
  {
    "name": "Shimla",
    "displayName": "Shimla, Himachal Pradesh",
    "slug": "cityshimla",
    "type": "CITY",
    "numberOfProperties": null
  }
]
How to use:
  • Display displayName in your location dropdown or filter UI.
  • Store the slug value — pass it as the city parameter in Step 2.
  • STATE slugs (e.g., stategoa) return properties across all cities in that state.
  • CITY slugs (e.g., citynorth-goa) return properties in that specific city only.
Cache this response. The cities list changes infrequently — fetch it once on app load and refresh periodically.

2. Search Properties & Rates

Use the Discovery API to retrieve a paginated list of available properties with calculated pricing. Pass the slug from Step 1 as the city parameter.

GET /v1/properties/rates

curl -X GET "https://sandbox.elivaas.com/v1/properties/rates\
?checkinDate=2025-08-01\
&checkoutDate=2025-08-05\
&adults=2\
&children=1\
&city=stategoa\
&page=0\
&pageSize=10" \
  -H "Api-Key: YOUR_API_KEY" \
  -H "Channel-Id: YOUR_CHANNEL_ID"
Response — a paginated list of property cards, each containing one or more quotes (rate plan options):
{
  "list": [
    {
      "id": "prop_456",
      "name": "Luxury Beach Villa",
      "soldOut": false,
      "quotes": [
        {
          "propertyId": "prop_456",
          "ratePlanId": "rp_123",
          "ratePlanCode": "european-plan",
          "ratePlanName": "Room Only",
          "propertyName": "Luxury Beach Villa",
          "checkinDate": "2025-08-01",
          "checkoutDate": "2025-08-05",
          "numberOfNights": 4,
          "adults": 2,
          "children": 1,
          "numberOfGuests": 3,
          "originalNetAmountBeforeTax": 6000,
          "originalNetAmountAfterTax": 7080,
          "netAmountBeforeTax": 6000,
          "netAmountAfterTax": 7080,
          "netPerNightAmountBeforeTax": 1500,
          "netPerNightAmountAfterTax": 1770,
          "gstAmount": 1080,
          "securityDeposit": 1000,
          "soldOut": false
        }
      ]
    }
  ],
  "currentPage": 0,
  "pageSize": 10,
  "totalElementsCount": 25,
  "pagesCount": 3,
  "hasNext": true,
  "hasPrevious": false
}
Key response fields:
FieldPurpose
quotes[].ratePlanCodeIdentifies the rate plan. Required in Step 3 to generate a quote.
quotes[].netAmountAfterTaxTotal stay cost inclusive of tax. Display as the headline price.
quotes[].netPerNightAmountAfterTaxPer-night price inclusive of tax.
quotes[].originalNetAmountAfterTaxPrice before discounts. Show as strike-through when a discount is applied.
soldOutWhen true, the property has no availability for the requested dates.
Supported query parameters:
ParameterTypeDefaultDescription
citystringCity slug from Step 1. Required for location filtering.
checkinDatedateCheck-in date (YYYY-MM-DD).
checkoutDatedateCheck-out date (YYYY-MM-DD).
adultsinteger1Number of adult guests.
childreninteger0Number of child guests.
propertyIdstringRetrieve rates for a single property.
keywordstringFree-text search across property names.
couponCodestringApply a coupon to preview discounted pricing.
bedroomintegerFilter by number of bedrooms.
pageinteger0Zero-based page index.
pageSizeinteger50Results per page.
For the full response schema including property details, images, amenities, FAQs, and all quote fields, see the Discovery API reference.

3. Get a Quote

When the user selects a property and rate plan, request a quote by adding the ratePlanCode parameter. The response returns a quoteId — a token that locks in the pricing for booking.

GET /v1/properties/rates?ratePlanCode=...

curl -X GET "https://sandbox.elivaas.com/v1/properties/rates\
?propertyId=prop_456\
&checkinDate=2025-08-01\
&checkoutDate=2025-08-05\
&ratePlanCode=european-plan\
&adults=2\
&children=1\
&quantity=1" \
  -H "Api-Key: YOUR_API_KEY" \
  -H "Channel-Id: YOUR_CHANNEL_ID"
Response — includes quoteId and final pricing breakdown:
{
  "list": [
    {
      "id": "prop_456",
      "soldOut": false,
      "quotes": [
        {
          "quoteId": "quote_abc123",
          "propertyId": "prop_456",
          "ratePlanId": "rp_123",
          "ratePlanCode": "european-plan",
          "ratePlanName": "Room Only",
          "checkinDate": "2025-08-01",
          "checkoutDate": "2025-08-05",
          "numberOfNights": 4,
          "adults": 2,
          "children": 1,
          "quantity": 1,
          "netAmountBeforeTax": 6000,
          "netAmountAfterTax": 7080,
          "gstAmount": 1080,
          "securityDeposit": 1000
        }
      ]
    }
  ]
}
Present the pricing summary to the user before confirmation:
Display LabelField
Rate PlanratePlanName
NightsnumberOfNights
SubtotalnetAmountBeforeTax
Tax (GST)gstAmount
TotalnetAmountAfterTax
Security DepositsecurityDeposit
Persist the quoteId — it is required to create the booking in the next step.

4. Create a Booking

Submit the quoteId along with guest details to confirm the reservation.

POST /v2/bookings

curl -X POST "https://sandbox.elivaas.com/v2/bookings" \
  -H "Api-Key: YOUR_API_KEY" \
  -H "Channel-Id: YOUR_CHANNEL_ID" \
  -H "Content-Type: application/json" \
  -d '{
    "quoteId": "quote_abc123",
    "bookingId": "your_unique_booking_id",
    "bookingStatus": "CONFIRMED",
    "guest": {
      "email": "guest@example.com",
      "phone": "+911234567890",
      "firstName": "John",
      "lastName": "Doe"
    }
  }'
Request body:
FieldTypeRequiredConstraints
quoteIdstringYesMust be a valid, unexpired quote from Step 3.
bookingIdstringYesYour internal reference. Must be unique per channel.
bookingStatusstringYesMust be CONFIRMED.
guest.emailstringYesGuest email address.
guest.phonestringYesGuest phone number with country code.
guest.firstNamestringYesGuest first name.
guest.lastNamestringYesGuest last name.
Response 201 Created:
{
  "bookingId": "your_unique_booking_id"
}
Upon successful creation, the system automatically:
  • Blocks inventory for the booked dates
  • Assigns an available property unit
  • Dispatches confirmation to the guest via email and WhatsApp
Duplicate bookingId values within the same channel are rejected with a 500 error. Use your internal order ID to guarantee uniqueness.

Going Live Checklist

Complete each item before switching from Sandbox to Production.
1

Obtain credentials

Receive your Production Api-Key and Channel-Id from the Elivaas integrations team.
2

Fetch cities

Call GET /v1/cities and cache the response. Use slug values for location filtering.
3

Implement property search

Integrate GET /v1/properties/rates with city slugs, date, and occupancy filters. Verify pagination works correctly.
4

Implement quote generation

Add ratePlanCode to the search request. Confirm a quoteId is returned and stored.
5

Implement booking creation

Submit POST /v2/bookings with the stored quoteId. Verify a 201 response with the bookingId.
6

Handle errors gracefully

Implement error handling for 400, 401, and 500 responses. Display actionable messages to the user.
7

Switch to Production

Replace the base URL with https://api.elivaas.com/api and use Production credentials.

Additional APIs

The following endpoints are not required for the core booking flow but provide capabilities for richer integrations.

Promotions

Retrieve active promotions and coupon codes to display on property pages.

Inventory

Query raw availability by date — useful for building calendar views.

Rate Plans

Access detailed rate plan definitions including extra guest surcharges.

Fetch Rates

Bulk-fetch daily rates across multiple properties for rate synchronization.

Error Handling

All endpoints return a consistent error envelope.
{
  "status": 400,
  "message": "Booking ID already exists for this channel",
  "errorCode": "BOOKING_ID_DUPLICATE",
  "timestamp": "2025-08-01T10:30:00",
  "details": "A booking with ID 'order_123' already exists for channel 'chnl_abc'"
}
HTTP StatusMeaningRecommended Action
200 / 201SuccessProcess the response body.
400Bad RequestInspect the message and details fields. Fix the request parameters or body.
401UnauthorizedVerify that Api-Key and Channel-Id are present and valid.
404Not FoundThe referenced resource does not exist. Confirm the ID is correct.
500Internal Server ErrorRetry with exponential backoff. If the error persists, contact support with the timestamp and errorCode.

Support

Contact the Integrations Team

For onboarding, technical issues, or credential requests — reach us at developers@elivaas.com.