---
# System prepended metadata

title: Travel Api

---

# Travel Api

## Agoda Travel Api
We have some list of hotels in our database. And each hotel can have multiple rooms. Hotels are identified by `hotel-id` and rooms are identified by `room-id`. This service is consumed by several types of clients identified by `client-id`. Each room has prices and can be selled at different prices based on customer's loyalty level identified by `loyalty`.

There are 3 (three) loyalty levels(along with `loyalty` id) for now
* *Default*: 10
* *Discount*: 11
* *Vip*: 12

Also, We've 3(three) clients(along with `client-id`) for now
* *Desktop*: 1
* *Mobile app*: 2
* *Google search*: 3

### BaseURL: {scheme}://{host}:{port}
### Example URL: http://localhost:8000

## Ping the service
* **Description:** Pings the service
* **Method:** `GET`
* **Endpoint:** `/`
* **Headers:** `{Content-Type: application/json}`
* **Request Example:** `http://localhost:8000`
* **Response:**
```json=
{
  "message": "success",
  "data": {
    "method": "GET",
    "service_name": "Travel REST api"
  }
}
```

## Create/Update room price
* **Description:** Creates/updates room prices. We can create/update price for a single client at a time.
* **Method:** `POST`
* **Endpoint:** `/api/v1/prices`
* **Headers:** `{Content-Type: application/json}`
* **Body:** 
```json=
{
    "hotel_id": 1,
    "room_id": 101,
    "prices": {
        "client_id": 1,
        "price": {
            "default": 100.00,
            "vip": 90.00,
            "discount": 95
        }
    }
}
```
* **Request curl:** 
```json=
curl --request POST \
  --url http://localhost:8000/api/v1/prices \
  --header 'Content-Type: application/json' \
  --data '{
	"hotel_id": 1,
	"room_id": 101,
	"prices": {
		"client_id": 1,
		"price": {
			"default": 100.00,
			"vip": 90.00,
			"discount": 95
		}
	}
}'
```
* **Body Description :**
    * **hotel_id:** (`required`) - Id of the hotel | `integer`
    * **room_id:** (`required`) - Id of the room | `integer`
    * **client_id:**(`required`) - Id of the client for which the price will be created/updated | `integer` | `any value from 1, 2 or 3`
    * **default:** (`required`) - Price for loyalty level Default | `number`
    * **discount:**(`optional`) - Price for loyalty level Discount | `number`
    * **vip:**(`optional`) - Price for loyalty level Vip | `number`
* **Response:**
 ```json=
{
    "message": "successful",
    "data": {
        "hotel_id": 1,
        "room_id": 101,
        "client_id": 1
    }
}
```
## Get Rooms
* **Description:** Finds rooms by given criteria specified in query params
* **Method:** `GET`
* **Endpoint:** `/api/v1/hotels/{hotel-id}`
* **Headers:** `{Content-Type: application/json}`
* **Query Params:** 
    * *`room-id:`* return all rooms in the hotel if `room-id` is not provided
    * *`client-id:`* if not provided return prices for all available clients, if provided return prices for the exact client
    * *`loyalty:`* if not provided return prices for all available loyalty levels | `any value from 10, 11 or 12`
    * *`limit:`* limit the maximum number of rooms this endpoint can return, default is 2 if not provided
* **Request:** `/api/v1/hotels/1?room-id=102&client-id=1&loyalty=10&limit=1`
* **Request curl:** 
```json=
curl --request GET \
  --url 'http://localhost:8000/api/v1/hotels/1?room-id=101&client-id=1&loyalty=10&limit=1'
```
* **Response:**
 ```json=
{
    "next": "/api/v1/hotels/1?limit=1&page=2",
    "previous": "",
    "message": "successful",
    "data": {
        "hotel_id": 1,
        "rooms": [
            {
                "room_id": 101,
                "prices": [
                    {
                        "client_id": 1,
                        "price": {
                            "default": 100
                        }
                    }
                ]
            }
        ]
    }
}
```
* **Response Description :**
    * **next:** url for next rooms with given limit
    * **prev:** ulr for previous rooms with given limit
* **Request:** `/api/v1/hotels/1`
* **Request curl:** 
```json=
curl --request GET \
  --url http://localhost:8000/api/v1/hotels/1
```
* **Response:**
```json=
{
  "next": "/api/v1/hotels/1?limit=2&page=2",
  "previous": "",
  "message": "successful",
  "data": {
    "hotel_id": 1,
    "rooms": [
      {
        "room_id": 100,
        "prices": [
          {
            "client_id": 1,
            "price": {
              "default": 100,
              "vip": 90,
              "discount": 98
            }
          }
        ]
      },
      {
        "room_id": 101,
        "prices": [
          {
            "client_id": 1,
            "price": {
              "default": 100,
              "vip": 90,
              "discount": 95
            }
          },
          {
            "client_id": 2,
            "price": {
              "default": 100,
              "vip": 90,
              "discount": 95
            }
          }
        ]
      }
    ]
  }
}
```