Updated 12 Nov 2026

Hotels, rooms and rates

Developers (API)REST API v1

These four calls are read-only and safe at any time. They give you the numeric ids that every other call needs: the hotel_id, the room ids and the rate ids. Responses below are abbreviated and use fictional values. Authenticate as described in the overview.

List hotels

GET /hotels/ returns the active hotels that belong to your company, with the location and the active channel connections. The id of each hotel is the hotel_id for all other calls.

curl -s "https://api.effectivetours.com/v1/hotels/" \
  -H "Authorization: Bearer $ET_API_KEY"

Example response (abbreviated to one hotel):

[
  {
    "id": 1001,
    "name": "Example Guest House",
    "category": "guest_house",
    "address": "1 Example Street",
    "rate_type": "per_room",
    "company": {
      "id": 3001,
      "name": "Example Distributor Ltd",
      "company_type": "DISTRIBUTOR"
    },
    "city": {
      "id": 4001,
      "country": {
        "id": 5001,
        "code": "XX",
        "name": "Exampleland"
      },
      "name": "Exampleville"
    },
    "connections": {}
  }
]

Get one hotel

GET /hotels/{id} returns the same object for one hotel. A hotel your company cannot access answers 404 with {"detail":"Hotel not found"}. A hotel that belongs to your company but has been permanently removed answers 410 with {"detail":"Requested HotelID: <id> not found."}.

curl -s "https://api.effectivetours.com/v1/hotels/{id}" \
  -H "Authorization: Bearer $ET_API_KEY"

The example response has the same shape as one item of the list above.

List rooms

GET /hotels/{id}/rooms returns the active rooms of a hotel. Each room shows which occupancies it supports (sgl, dbl, tpl, apartment), whether it is virtual, and the rates that apply to it. For distributor hotels the rooms are resolved from the parent hotel, and the room ids can be used directly when you create a reservation.

curl -s "https://api.effectivetours.com/v1/hotels/{id}/rooms" \
  -H "Authorization: Bearer $ET_API_KEY"

Example response (abbreviated to one room):

[
  {
    "id": 2001,
    "name": "Double Room",
    "sgl": true,
    "dbl": true,
    "tpl": false,
    "apartment": false,
    "is_virtual": false,
    "rates": [
      {
        "id": 6001,
        "name": "Standard",
        "food": "room_only"
      }
    ]
  }
]

List rates

GET /hotels/{id}/rates returns the active rate types of a hotel: the supported occupancies (sgl, dbl, tpl, full), the food inclusion, and the rate plan ids on each connected channel. An empty list is a normal answer.

curl -s "https://api.effectivetours.com/v1/hotels/{id}/rates" \
  -H "Authorization: Bearer $ET_API_KEY"

Example response (abbreviated to one rate):

[
  {
    "id": 6001,
    "name": "Standard",
    "food": "room_only",
    "sgl": true,
    "dbl": true,
    "tpl": false,
    "full": false,
    "connections": {
      "booking": [
        {
          "booking_id": 7001,
          "booking_rate": 7002,
          "occupancy": 2
        }
      ],
      "agoda": [
        {
          "agoda_id": 8001,
          "rate_plan_id": 8002,
          "occupancy": 2
        }
      ]
    }
  }
]

Store these ids next to your own room types and rate plans. Next: Daily prices and Reservations.