API Documentation

🔐 Authentication

This API uses Bearer Token authentication.

Authorization: Bearer YOUR_TOKEN

Get your token from the Login endpoint and include it in every protected request.

General

POST /login.php

Login

Examples

Request
{
  "username": "test",
  "password": "1234"
}
Response
{
    "status": true,
    "message": "Login successful",
    "data": {
        "token": "M3wxNzc1NTc1MDU0fDA1Njk2Y2E0OTNkZjk1ZmQ5NGZlOGM5MzhjOTA2ZmNi",
        "sjid": 1501
    }
}
GET /properties

Properties

List of properties you are currently connected to

🔒 Requires authentication

Examples

Response
{
    "status": true,
    "data": [
        {
            "id": 4,
            "name": "DZL Serengeti Camp",
            "channel_id": 1,
            "company": "DZL Camps"
        },
        {
            "id": 14,
            "name": "Rustic Tented Lodge",
            "channel_id": 3,
            "company": "Nembo Tanzania Ltd"
        },
]
GET /property

Property

🔒 Requires authentication

Parameters

Name Type In Required Description
channel_id int query Yes
property_id int query Yes

Examples

Response
{
    "status": true,
    "data": {
        "property_id": 4,
        "categories": [
            {
                "category_id": 67,
                "category": "VILLAS",
                "description": "",
                "room_types": [
                    {
                        "id": "457",
                        "name": "SINGLE",
                        "maxpax": "1"
                    },
                    {
                        "id": "458",
                        "name": "DOUBLE",
                        "maxpax": "2"
                    },
                    {
                        "id": "459",
                        "name": "TWIN",
                        "maxpax": "2"
                    },
                    {
                        "id": "460",
                        "name": "TRIPLE",
                        "maxpax": "3"
                    },
                    {
                        "id": "461",
                        "name": "QUAD-FAMILY",
                        "maxpax": "5"
                    }
                ]
            },
            {
                "category_id": 69,
                "category": "Standard Rooms",
                "description": "",
                "room_types": [
                    {
                        "id": "467",
                        "name": "SINGLE",
                        "maxpax": "1"
                    },
                    {
                        "id": "468",
                        "name": "DOUBLE",
                        "maxpax": "2"
                    },
                    {
                        "id": "469",
                        "name": "TWIN",
                        "maxpax": "2"
                    },
                    {
                        "id": "470",
                        "name": "TRIPLE",
                        "maxpax": "3"
                    },
                    {
                        "id": "471",
                        "name": "QUAD-FAMILY",
                        "maxpax": "4"
                    }
                ]
            }
        ],
        "mealplans": [
            {
                "id": "14",
                "name": "Full Board"
            }
        ]
    }
}
GET /rates

Rates

🔒 Requires authentication

Parameters

Name Type In Required Description
channel_id int query Yes
property_id int query Yes
fromdate date query Yes
todate date query Yes

Examples

Response
 "status": true,
    "data": {
        "currency": "USD",
        "rate_type": "Per Person",
        "2026-08-05": {
            "season": "High Season",
            "rates_id": 109,
            "FB": {
                "Standard": {
                    "SINGLE": 150,
                    "DOUBLE": 100,
                    "TWIN": 100,
                    "TRIPLE": 80
                }
            }
        },
        "2026-08-06": {
            "season": "High Season",
            "rates_id": 109,
            "FB": {
                "Standard": {
                    "SINGLE": 150,
                    "DOUBLE": 100,
                    "TWIN": 100,
                    "TRIPLE": 80
                }
            }
        },
    }
}
GET /availability

Availability

🔒 Requires authentication

Parameters

Name Type In Required Description
channel_id int query Yes
property_id int query Yes
fromdate date query Yes
todate date query Yes

Examples

Response
{
    "status": true,
    "data": {
        "2027-04-01": {
            "VILLAS": 8,
            "Standard Rooms": 2
        },
        "2027-04-02": {
            "VILLAS": 6,
            "Standard Rooms": 5
        },
        "minimum_availability": {
            "VILLAS": 6,
            "Standard Rooms": 2
        }
    }
}
GET /bookings

Bookings

🔒 Requires authentication

Parameters

Name Type In Required Description
channel_id int query Yes
property_id int query Yes
fromdate date query Yes
todate date query Yes

Examples

Response
{
    "status": true,
    "data": [
        {
            "booking_id": "236",
            "group_name": "Melanin",
            "arrival_date": "01/01/2027",
            "nights": "1",
            "arrival_time": "Dinner",
            "departure_time": "After Breakfast",
            "status": "Confirmed",
            "special_request": "Allergic to nuts",
            "pax": 2,
            "invoice_no": 0,
            "receipts": "",
            "amount": "238.36",
            "paid": "0.00",
            "balance": "238.36"
        },
        {
            "booking_id": "304",
            "group_name": "Hamid Chori",
            "arrival_date": "01/01/2027",
            "nights": "1",
            "arrival_time": "Dinner",
            "departure_time": "After Breakfast",
            "status": "Confirmed",
            "special_request": "Family Interconnected (With Plunge Pool in 1 unit)",
            "pax": 5,
            "invoice_no": 0,
            "receipts": "",
            "amount": "567.89",
            "paid": "0.00",
            "balance": "567.89"
        },
   }
}
POST /create

Create a booking

🔒 Requires authentication

Examples

Request
{
    "channel_id": 1,
    "property_id": 4,
    "group_name": "Smith X 3",
    "arrival_date": "2027-04-01",
    "nights": "1",
    "email": "smith2100@gmail.com",
    "contact_person": "Kevin",
    "arrival_time": "Lunch",
    "departure_time": "After Breakfast",
    "mealplans": [14],
    "rooms": [
        {
            "category_id": 69,
            "room_type_id": 468,
            "adults": 2,
            "children": 1,
            "child_ages": [8]
        }
    ],
    "special_request": "Lunch Box on Departure",
    "sjid": 1501
}
Response
{
    "status": true,
    "data": {
        "message": "Booking created successfully",
        "booking_id": 150047
    }
}
PUT /update

Update existing booking

Only email, special request, arrival and departure time can be updated

🔒 Requires authentication

Examples

Request
{
    "channel_id": 1,
    "property_id": 4,
    "booking_id": 150047,
    "email": "gift@gmail.com",
    "arrival_time": "Dinner",
    "special_request": "Transfer to JRO",
    "sjid": 1501
}
Response
{
    "status": true,
    "data": {
        "booking_id": 150047,
        "updated": true,
        "message": "Booking updated successfully"
    }
}
PUT /cancel

Cancel existing booking

You can only cancel your future bookings

🔒 Requires authentication

Examples

Request
{
    "channel_id": 1,
    "property_id": 4,
    "booking_id": 150047,
    "reason": "Health",
    "remarks": "Daughter got sick",
    "sjid": 1501
}
Response
{
    "status": true,
    "data": {
        "booking_id": 150047,
        "cancelled": true,
        "message": "Booking cancelled successfully"
    }
}