MENU navbar-image

Introduction

This documentation aims to provide all the information you need to work with our API.

<aside>As you scroll, you'll see code examples for working with the API in different programming languages in the dark area to the right (or as part of the content on mobile).
You can switch the language used with the tabs at the top right (or from the nav menu at the top left on mobile).</aside>

Authenticating requests

This API is not authenticated.

Ads

Get ads

Example request:
curl --request GET \
    --get "https://flex-home.botble.com/api/v1/ads?keys[]=homepage-banner&keys[]=sidebar-banner" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --data "{
    \"keys\": [
        \"homepage-banner\",
        \"sidebar-banner\"
    ]
}"
const url = new URL(
    "https://flex-home.botble.com/api/v1/ads"
);

const params = {
    "keys[0]": "homepage-banner",
    "keys[1]": "sidebar-banner",
};
Object.keys(params)
    .forEach(key => url.searchParams.append(key, params[key]));

const headers = {
    "Content-Type": "application/json",
    "Accept": "application/json",
};

let body = {
    "keys": [
        "homepage-banner",
        "sidebar-banner"
    ]
};

fetch(url, {
    method: "GET",
    headers,
    body: JSON.stringify(body),
}).then(response => response.json());

Example response (200):

Show headers
cache-control: no-cache, private
content-type: application/json
access-control-allow-origin: *
 

{
    "error": false,
    "data": [],
    "message": null
}
 

Request      

GET api/v1/ads

Headers

Content-Type        

Example: application/json

Accept        

Example: application/json

Query Parameters

keys   string[]  optional    

Array of ad keys to filter by.

Body Parameters

keys   string[]  optional    

Array of ad keys to filter by.

Authentication

Register

Example request:
curl --request POST \
    "https://flex-home.botble.com/api/v1/register" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --data "{
    \"first_name\": \"John\",
    \"last_name\": \"Smith\",
    \"name\": \"architecto\",
    \"email\": \"[email protected]\",
    \"password\": \"|]|{+-\",
    \"phone\": \"architecto\",
    \"password_confirmation\": \"architecto\"
}"
const url = new URL(
    "https://flex-home.botble.com/api/v1/register"
);

const headers = {
    "Content-Type": "application/json",
    "Accept": "application/json",
};

let body = {
    "first_name": "John",
    "last_name": "Smith",
    "name": "architecto",
    "email": "[email protected]",
    "password": "|]|{+-",
    "phone": "architecto",
    "password_confirmation": "architecto"
};

fetch(url, {
    method: "POST",
    headers,
    body: JSON.stringify(body),
}).then(response => response.json());

Example response (200):


{
    "error": false,
    "data": null,
    "message": "Registered successfully! We emailed you to verify your account!"
}
 

Example response (422):


{
    "message": "The given data was invalid.",
    "errors": {
        "name": [
            "The name field is required."
        ],
        "email": [
            "The email field is required."
        ],
        "password": [
            "The password field is required."
        ]
    }
}
 

Request      

POST api/v1/register

Headers

Content-Type        

Example: application/json

Accept        

Example: application/json

Body Parameters

first_name   string  optional    

The first name of the user. This field is required when name is not present. Must not be greater than 120 characters. Must be at least 2 characters. Example: John

last_name   string  optional    

The last name of the user. This field is required when name is not present. Must not be greater than 120 characters. Must be at least 2 characters. Example: Smith

name   string     

The name of the user. Example: architecto

email   string     

The email of the user. Example: [email protected]

password   string     

The password of user to create. Example: |]|{+-

phone   string     

The phone of the user. Example: architecto

password_confirmation   string     

The password confirmation. Example: architecto

Login

Example request:
curl --request POST \
    "https://flex-home.botble.com/api/v1/login" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --data "{
    \"email\": \"[email protected]\",
    \"password\": \"|]|{+-\"
}"
const url = new URL(
    "https://flex-home.botble.com/api/v1/login"
);

const headers = {
    "Content-Type": "application/json",
    "Accept": "application/json",
};

let body = {
    "email": "[email protected]",
    "password": "|]|{+-"
};

fetch(url, {
    method: "POST",
    headers,
    body: JSON.stringify(body),
}).then(response => response.json());

Example response (200):


{
    "error": false,
    "data": {
        "token": "1|aF5s7p3xxx1lVL8hkSrPN72m4wPVpTvTs..."
    },
    "message": null
}
 

Request      

POST api/v1/login

Headers

Content-Type        

Example: application/json

Accept        

Example: application/json

Body Parameters

email   string     

The email of the user. Example: [email protected]

password   string     

The password of user to create. Example: |]|{+-

Check email existing or not

Example request:
curl --request POST \
    "https://flex-home.botble.com/api/v1/email/check" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --data "{
    \"email\": \"[email protected]\"
}"
const url = new URL(
    "https://flex-home.botble.com/api/v1/email/check"
);

const headers = {
    "Content-Type": "application/json",
    "Accept": "application/json",
};

let body = {
    "email": "[email protected]"
};

fetch(url, {
    method: "POST",
    headers,
    body: JSON.stringify(body),
}).then(response => response.json());

Example response (200):


{
    "error": false,
    "data": {
        "exists": true
    },
    "message": null
}
 

Request      

POST api/v1/email/check

Headers

Content-Type        

Example: application/json

Accept        

Example: application/json

Body Parameters

email   string     

The email of the user. Example: [email protected]

Forgot password

Send a reset link to the given user.

Example request:
curl --request POST \
    "https://flex-home.botble.com/api/v1/password/forgot" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --data "{
    \"email\": \"[email protected]\"
}"
const url = new URL(
    "https://flex-home.botble.com/api/v1/password/forgot"
);

const headers = {
    "Content-Type": "application/json",
    "Accept": "application/json",
};

let body = {
    "email": "[email protected]"
};

fetch(url, {
    method: "POST",
    headers,
    body: JSON.stringify(body),
}).then(response => response.json());

Request      

POST api/v1/password/forgot

Headers

Content-Type        

Example: application/json

Accept        

Example: application/json

Body Parameters

email   string     

The email of the user. Example: [email protected]

Resend email verification

Resend the email verification notification.

Example request:
curl --request POST \
    "https://flex-home.botble.com/api/v1/resend-verify-account-email" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --data "{
    \"email\": \"[email protected]\"
}"
const url = new URL(
    "https://flex-home.botble.com/api/v1/resend-verify-account-email"
);

const headers = {
    "Content-Type": "application/json",
    "Accept": "application/json",
};

let body = {
    "email": "[email protected]"
};

fetch(url, {
    method: "POST",
    headers,
    body: JSON.stringify(body),
}).then(response => response.json());

Request      

POST api/v1/resend-verify-account-email

Headers

Content-Type        

Example: application/json

Accept        

Example: application/json

Body Parameters

email   string     

The email of the user. Example: [email protected]

Logout

requires authentication

Example request:
curl --request GET \
    --get "https://flex-home.botble.com/api/v1/logout" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "https://flex-home.botble.com/api/v1/logout"
);

const headers = {
    "Content-Type": "application/json",
    "Accept": "application/json",
};

fetch(url, {
    method: "GET",
    headers,
}).then(response => response.json());

Example response (401):

Show headers
cache-control: no-cache, private
content-type: application/json
access-control-allow-origin: *
 

{
    "error": true,
    "data": null,
    "message": "Unauthenticated."
}
 

Request      

GET api/v1/logout

Headers

Content-Type        

Example: application/json

Accept        

Example: application/json

Blog

Example request:
curl --request GET \
    --get "https://flex-home.botble.com/api/v1/search" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --data "{
    \"q\": \"architecto\"
}"
const url = new URL(
    "https://flex-home.botble.com/api/v1/search"
);

const headers = {
    "Content-Type": "application/json",
    "Accept": "application/json",
};

let body = {
    "q": "architecto"
};

fetch(url, {
    method: "GET",
    headers,
    body: JSON.stringify(body),
}).then(response => response.json());

Example response (200):


{
    "error": false,
    "data": {
        "items": [
            {
                "id": 1,
                "title": "Sample Post",
                "slug": "sample-post",
                "excerpt": "This is a sample post excerpt"
            }
        ],
        "query": "sample",
        "count": 1
    }
}
 

Example response (400):


{
    "error": true,
    "message": "No search result"
}
 

List posts

Example request:
curl --request GET \
    --get "https://flex-home.botble.com/api/v1/posts?per_page=16&page=16" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "https://flex-home.botble.com/api/v1/posts"
);

const params = {
    "per_page": "16",
    "page": "16",
};
Object.keys(params)
    .forEach(key => url.searchParams.append(key, params[key]));

const headers = {
    "Content-Type": "application/json",
    "Accept": "application/json",
};

fetch(url, {
    method: "GET",
    headers,
}).then(response => response.json());

Example response (200):


{
    "error": false,
    "data": [
        {
            "id": 1,
            "title": "Sample Post",
            "slug": "sample-post",
            "excerpt": "This is a sample post excerpt",
            "content": "Full post content here...",
            "published_at": "2023-01-01T00:00:00.000000Z",
            "author": {
                "id": 1,
                "name": "John Doe"
            },
            "categories": [],
            "tags": []
        }
    ],
    "message": null
}
 

Request      

GET api/v1/posts

Headers

Content-Type        

Example: application/json

Accept        

Example: application/json

Query Parameters

per_page   integer  optional    

The number of items to return per page (default: 10). Example: 16

page   integer  optional    

The page number to retrieve (default: 1). Example: 16

List tags

Example request:
curl --request GET \
    --get "https://flex-home.botble.com/api/v1/tags?per_page=16&page=16" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "https://flex-home.botble.com/api/v1/tags"
);

const params = {
    "per_page": "16",
    "page": "16",
};
Object.keys(params)
    .forEach(key => url.searchParams.append(key, params[key]));

const headers = {
    "Content-Type": "application/json",
    "Accept": "application/json",
};

fetch(url, {
    method: "GET",
    headers,
}).then(response => response.json());

Example response (200):


{
    "error": false,
    "data": [
        {
            "id": 1,
            "name": "Laravel",
            "slug": "laravel",
            "description": "PHP Framework for web development",
            "created_at": "2023-01-01T00:00:00.000000Z"
        }
    ],
    "message": null
}
 

Request      

GET api/v1/tags

Headers

Content-Type        

Example: application/json

Accept        

Example: application/json

Query Parameters

per_page   integer  optional    

The number of items to return per page (default: 10). Example: 16

page   integer  optional    

The page number to retrieve (default: 1). Example: 16

Filters posts

Example request:
curl --request GET \
    --get "https://flex-home.botble.com/api/v1/posts/filters?page=16&per_page=16&search=architecto&after=architecto&author=architecto&author_exclude=architecto&before=architecto&exclude=architecto&include=architecto&order=architecto&order_by=architecto&categories=architecto&categories_exclude=architecto&tags=architecto&tags_exclude=architecto&featured=architecto" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "https://flex-home.botble.com/api/v1/posts/filters"
);

const params = {
    "page": "16",
    "per_page": "16",
    "search": "architecto",
    "after": "architecto",
    "author": "architecto",
    "author_exclude": "architecto",
    "before": "architecto",
    "exclude": "architecto",
    "include": "architecto",
    "order": "architecto",
    "order_by": "architecto",
    "categories": "architecto",
    "categories_exclude": "architecto",
    "tags": "architecto",
    "tags_exclude": "architecto",
    "featured": "architecto",
};
Object.keys(params)
    .forEach(key => url.searchParams.append(key, params[key]));

const headers = {
    "Content-Type": "application/json",
    "Accept": "application/json",
};

fetch(url, {
    method: "GET",
    headers,
}).then(response => response.json());

Example response (200):

Show headers
cache-control: no-cache, private
content-type: application/json
access-control-allow-origin: *
 

{
    "data": [],
    "links": {
        "first": "https://flex-home.botble.com/api/v1/posts/filters?page=1",
        "last": "https://flex-home.botble.com/api/v1/posts/filters?page=1",
        "prev": "https://flex-home.botble.com/api/v1/posts/filters?page=15",
        "next": null
    },
    "meta": {
        "current_page": 16,
        "from": null,
        "last_page": 1,
        "links": [
            {
                "url": "https://flex-home.botble.com/api/v1/posts/filters?page=15",
                "label": "&laquo; Previous",
                "page": 15,
                "active": false
            },
            {
                "url": "https://flex-home.botble.com/api/v1/posts/filters?page=1",
                "label": "1",
                "page": 1,
                "active": false
            },
            {
                "url": null,
                "label": "Next &raquo;",
                "page": null,
                "active": false
            }
        ],
        "path": "https://flex-home.botble.com/api/v1/posts/filters",
        "per_page": 16,
        "to": null,
        "total": 0
    },
    "error": false,
    "message": null
}
 

Request      

GET api/v1/posts/filters

Headers

Content-Type        

Example: application/json

Accept        

Example: application/json

Query Parameters

page   integer  optional    

Current page of the collection. Default: 1 Example: 16

per_page   integer  optional    

Maximum number of items to be returned in result set.Default: 10 Example: 16

search   string  optional    

Limit results to those matching a string. Example: architecto

after   string  optional    

Limit response to posts published after a given ISO8601 compliant date. Example: architecto

author   string  optional    

Limit result set to posts assigned to specific authors. Example: architecto

author_exclude   string  optional    

Ensure result set excludes posts assigned to specific authors. Example: architecto

before   string  optional    

Limit response to posts published before a given ISO8601 compliant date. Example: architecto

exclude   string  optional    

Ensure result set excludes specific IDs. Example: architecto

include   string  optional    

Limit result set to specific IDs. Example: architecto

order   string  optional    

Order sort attribute ascending or descending. Default: desc .One of: asc, desc Example: architecto

order_by   string  optional    

Sort collection by object attribute. Default: updated_at. One of: author, created_at, updated_at, id, slug, title Example: architecto

categories   string  optional    

Limit result set to all items that have the specified term assigned in the categories taxonomy. Example: architecto

categories_exclude   string  optional    

Limit result set to all items except those that have the specified term assigned in the categories taxonomy. Example: architecto

tags   string  optional    

Limit result set to all items that have the specified term assigned in the tags taxonomy. Example: architecto

tags_exclude   string  optional    

Limit result set to all items except those that have the specified term assigned in the tags taxonomy. Example: architecto

featured   string  optional    

Limit result set to items that are sticky. Example: architecto

Get post by slug

Example request:
curl --request GET \
    --get "https://flex-home.botble.com/api/v1/posts/architecto?slug=architecto" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "https://flex-home.botble.com/api/v1/posts/architecto"
);

const params = {
    "slug": "architecto",
};
Object.keys(params)
    .forEach(key => url.searchParams.append(key, params[key]));

const headers = {
    "Content-Type": "application/json",
    "Accept": "application/json",
};

fetch(url, {
    method: "GET",
    headers,
}).then(response => response.json());

Example response (404):

Show headers
cache-control: no-cache, private
content-type: application/json
access-control-allow-origin: *
 

{
    "error": true,
    "data": null,
    "message": "Not found"
}
 

Request      

GET api/v1/posts/{slug}

Headers

Content-Type        

Example: application/json

Accept        

Example: application/json

URL Parameters

slug   string     

The slug of the post. Example: architecto

Query Parameters

slug   string  optional    

Find by slug of post. Example: architecto

Device Tokens

Register or update device token

Register a new device token or update an existing one for push notifications.

Example request:
curl --request POST \
    "https://flex-home.botble.com/api/v1/device-tokens" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --data "{
    \"token\": \"architecto\",
    \"platform\": \"architecto\",
    \"app_version\": \"architecto\",
    \"device_id\": \"architecto\",
    \"user_type\": \"architecto\",
    \"user_id\": 16
}"
const url = new URL(
    "https://flex-home.botble.com/api/v1/device-tokens"
);

const headers = {
    "Content-Type": "application/json",
    "Accept": "application/json",
};

let body = {
    "token": "architecto",
    "platform": "architecto",
    "app_version": "architecto",
    "device_id": "architecto",
    "user_type": "architecto",
    "user_id": 16
};

fetch(url, {
    method: "POST",
    headers,
    body: JSON.stringify(body),
}).then(response => response.json());

Request      

POST api/v1/device-tokens

Headers

Content-Type        

Example: application/json

Accept        

Example: application/json

Body Parameters

token   string     

The FCM device token. Example: architecto

platform   string  optional    

The device platform (android, ios). Example: architecto

app_version   string  optional    

The app version. Example: architecto

device_id   string  optional    

The unique device identifier. Example: architecto

user_type   string  optional    

The user type (customer, admin). Example: architecto

user_id   integer  optional    

The user ID. Example: 16

Get user's device tokens

Retrieve all device tokens for the authenticated user.

Example request:
curl --request GET \
    --get "https://flex-home.botble.com/api/v1/device-tokens" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "https://flex-home.botble.com/api/v1/device-tokens"
);

const headers = {
    "Content-Type": "application/json",
    "Accept": "application/json",
};

fetch(url, {
    method: "GET",
    headers,
}).then(response => response.json());

Example response (401):

Show headers
cache-control: no-cache, private
content-type: application/json
access-control-allow-origin: *
 

{
    "error": true,
    "data": null,
    "message": "Unauthenticated."
}
 

Request      

GET api/v1/device-tokens

Headers

Content-Type        

Example: application/json

Accept        

Example: application/json

Update device token

Update an existing device token.

Example request:
curl --request PUT \
    "https://flex-home.botble.com/api/v1/device-tokens/564" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --data "{
    \"platform\": \"architecto\",
    \"app_version\": \"architecto\",
    \"device_id\": \"architecto\"
}"
const url = new URL(
    "https://flex-home.botble.com/api/v1/device-tokens/564"
);

const headers = {
    "Content-Type": "application/json",
    "Accept": "application/json",
};

let body = {
    "platform": "architecto",
    "app_version": "architecto",
    "device_id": "architecto"
};

fetch(url, {
    method: "PUT",
    headers,
    body: JSON.stringify(body),
}).then(response => response.json());

Request      

PUT api/v1/device-tokens/{id}

Headers

Content-Type        

Example: application/json

Accept        

Example: application/json

URL Parameters

id   string     

The ID of the device token. Example: 564

Body Parameters

platform   string  optional    

The device platform (android, ios). Example: architecto

app_version   string  optional    

The app version. Example: architecto

device_id   string  optional    

The unique device identifier. Example: architecto

Delete device token by token value

Delete a device token using the token value.

Example request:
curl --request DELETE \
    "https://flex-home.botble.com/api/v1/device-tokens/by-token" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --data "{
    \"token\": \"architecto\"
}"
const url = new URL(
    "https://flex-home.botble.com/api/v1/device-tokens/by-token"
);

const headers = {
    "Content-Type": "application/json",
    "Accept": "application/json",
};

let body = {
    "token": "architecto"
};

fetch(url, {
    method: "DELETE",
    headers,
    body: JSON.stringify(body),
}).then(response => response.json());

Request      

DELETE api/v1/device-tokens/by-token

Headers

Content-Type        

Example: application/json

Accept        

Example: application/json

Body Parameters

token   string     

The FCM device token to delete. Example: architecto

Delete device token

Delete a device token to stop receiving push notifications.

Example request:
curl --request DELETE \
    "https://flex-home.botble.com/api/v1/device-tokens/564" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "https://flex-home.botble.com/api/v1/device-tokens/564"
);

const headers = {
    "Content-Type": "application/json",
    "Accept": "application/json",
};

fetch(url, {
    method: "DELETE",
    headers,
}).then(response => response.json());

Request      

DELETE api/v1/device-tokens/{id}

Headers

Content-Type        

Example: application/json

Accept        

Example: application/json

URL Parameters

id   string     

The ID of the device token. Example: 564

Deactivate device token

Deactivate a device token without deleting it.

Example request:
curl --request POST \
    "https://flex-home.botble.com/api/v1/device-tokens/564/deactivate" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "https://flex-home.botble.com/api/v1/device-tokens/564/deactivate"
);

const headers = {
    "Content-Type": "application/json",
    "Accept": "application/json",
};

fetch(url, {
    method: "POST",
    headers,
}).then(response => response.json());

Request      

POST api/v1/device-tokens/{id}/deactivate

Headers

Content-Type        

Example: application/json

Accept        

Example: application/json

URL Parameters

id   string     

The ID of the device token. Example: 564

Languages

Get list of available languages

Example request:
curl --request GET \
    --get "https://flex-home.botble.com/api/v1/languages" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "https://flex-home.botble.com/api/v1/languages"
);

const headers = {
    "Content-Type": "application/json",
    "Accept": "application/json",
};

fetch(url, {
    method: "GET",
    headers,
}).then(response => response.json());

Example response (200):


{
    "error": false,
    "data": [
        {
            "lang_id": 1,
            "lang_name": "English",
            "lang_locale": "en",
            "lang_code": "en_US",
            "lang_flag": "<svg ...>",
            "lang_is_default": true,
            "lang_is_rtl": false,
            "lang_order": 0
        },
        {
            "lang_id": 2,
            "lang_name": "Vietnamese",
            "lang_locale": "vi",
            "lang_code": "vi",
            "lang_flag": "<svg ...>",
            "lang_is_default": false,
            "lang_is_rtl": false,
            "lang_order": 1
        }
    ],
    "message": null
}
 

Request      

GET api/v1/languages

Headers

Content-Type        

Example: application/json

Accept        

Example: application/json

Get current language

Example request:
curl --request GET \
    --get "https://flex-home.botble.com/api/v1/languages/current" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "https://flex-home.botble.com/api/v1/languages/current"
);

const headers = {
    "Content-Type": "application/json",
    "Accept": "application/json",
};

fetch(url, {
    method: "GET",
    headers,
}).then(response => response.json());

Example response (200):


{
    "error": false,
    "data": {
        "lang_id": 1,
        "lang_name": "English",
        "lang_locale": "en",
        "lang_code": "en_US",
        "lang_flag": "us",
        "lang_is_default": true,
        "lang_is_rtl": false,
        "lang_order": 0
    },
    "message": null
}
 

Request      

GET api/v1/languages/current

Headers

Content-Type        

Example: application/json

Accept        

Example: application/json

Notifications

Get user notifications

Retrieve notifications for the authenticated user.

Example request:
curl --request GET \
    --get "https://flex-home.botble.com/api/v1/notifications?page=1&per_page=20&unread_only=&type=general" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "https://flex-home.botble.com/api/v1/notifications"
);

const params = {
    "page": "1",
    "per_page": "20",
    "unread_only": "0",
    "type": "general",
};
Object.keys(params)
    .forEach(key => url.searchParams.append(key, params[key]));

const headers = {
    "Content-Type": "application/json",
    "Accept": "application/json",
};

fetch(url, {
    method: "GET",
    headers,
}).then(response => response.json());

Example response (401):

Show headers
cache-control: no-cache, private
content-type: application/json
access-control-allow-origin: *
 

{
    "error": true,
    "data": null,
    "message": "Unauthenticated."
}
 

Request      

GET api/v1/notifications

Headers

Content-Type        

Example: application/json

Accept        

Example: application/json

Query Parameters

page   integer  optional    

Page number for pagination. Example: 1

per_page   integer  optional    

Number of notifications per page (max 50). Example: 20

unread_only   boolean  optional    

Filter to show only unread notifications. Example: false

type   string  optional    

Filter by notification type. Example: general

Get notification statistics

Get notification statistics for the authenticated user.

Example request:
curl --request GET \
    --get "https://flex-home.botble.com/api/v1/notifications/stats" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "https://flex-home.botble.com/api/v1/notifications/stats"
);

const headers = {
    "Content-Type": "application/json",
    "Accept": "application/json",
};

fetch(url, {
    method: "GET",
    headers,
}).then(response => response.json());

Example response (401):

Show headers
cache-control: no-cache, private
content-type: application/json
access-control-allow-origin: *
 

{
    "error": true,
    "data": null,
    "message": "Unauthenticated."
}
 

Request      

GET api/v1/notifications/stats

Headers

Content-Type        

Example: application/json

Accept        

Example: application/json

Mark all notifications as read

Mark all notifications as read for the authenticated user.

Example request:
curl --request POST \
    "https://flex-home.botble.com/api/v1/notifications/mark-all-read" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "https://flex-home.botble.com/api/v1/notifications/mark-all-read"
);

const headers = {
    "Content-Type": "application/json",
    "Accept": "application/json",
};

fetch(url, {
    method: "POST",
    headers,
}).then(response => response.json());

Request      

POST api/v1/notifications/mark-all-read

Headers

Content-Type        

Example: application/json

Accept        

Example: application/json

Mark notification as read

Mark a specific notification as read for the authenticated user.

Example request:
curl --request POST \
    "https://flex-home.botble.com/api/v1/notifications/564/read" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "https://flex-home.botble.com/api/v1/notifications/564/read"
);

const headers = {
    "Content-Type": "application/json",
    "Accept": "application/json",
};

fetch(url, {
    method: "POST",
    headers,
}).then(response => response.json());

Request      

POST api/v1/notifications/{id}/read

Headers

Content-Type        

Example: application/json

Accept        

Example: application/json

URL Parameters

id   string     

The ID of the notification. Example: 564

Mark notification as clicked

Mark a notification as clicked when user taps on it.

Example request:
curl --request POST \
    "https://flex-home.botble.com/api/v1/notifications/564/clicked" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "https://flex-home.botble.com/api/v1/notifications/564/clicked"
);

const headers = {
    "Content-Type": "application/json",
    "Accept": "application/json",
};

fetch(url, {
    method: "POST",
    headers,
}).then(response => response.json());

Request      

POST api/v1/notifications/{id}/clicked

Headers

Content-Type        

Example: application/json

Accept        

Example: application/json

URL Parameters

id   string     

The ID of the notification. Example: 564

Delete notification

Delete a notification from user's list.

Example request:
curl --request DELETE \
    "https://flex-home.botble.com/api/v1/notifications/564" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "https://flex-home.botble.com/api/v1/notifications/564"
);

const headers = {
    "Content-Type": "application/json",
    "Accept": "application/json",
};

fetch(url, {
    method: "DELETE",
    headers,
}).then(response => response.json());

Request      

DELETE api/v1/notifications/{id}

Headers

Content-Type        

Example: application/json

Accept        

Example: application/json

URL Parameters

id   string     

The ID of the notification. Example: 564

Page

List pages

Example request:
curl --request GET \
    --get "https://flex-home.botble.com/api/v1/pages?per_page=16&page=16" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "https://flex-home.botble.com/api/v1/pages"
);

const params = {
    "per_page": "16",
    "page": "16",
};
Object.keys(params)
    .forEach(key => url.searchParams.append(key, params[key]));

const headers = {
    "Content-Type": "application/json",
    "Accept": "application/json",
};

fetch(url, {
    method: "GET",
    headers,
}).then(response => response.json());

Example response (200):


{
    "error": false,
    "data": [
        {
            "id": 1,
            "title": "About Us",
            "slug": "about-us",
            "content": "This is the about us page content...",
            "published_at": "2023-01-01T00:00:00.000000Z"
        }
    ],
    "message": null
}
 

Request      

GET api/v1/pages

Headers

Content-Type        

Example: application/json

Accept        

Example: application/json

Query Parameters

per_page   integer  optional    

The number of items to return per page (default: 10). Example: 16

page   integer  optional    

The page number to retrieve (default: 1). Example: 16

Get page by ID

Example request:
curl --request GET \
    --get "https://flex-home.botble.com/api/v1/pages/16" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "https://flex-home.botble.com/api/v1/pages/16"
);

const headers = {
    "Content-Type": "application/json",
    "Accept": "application/json",
};

fetch(url, {
    method: "GET",
    headers,
}).then(response => response.json());

Example response (200):


{
    "error": false,
    "data": {
        "id": 1,
        "title": "About Us",
        "slug": "about-us",
        "content": "This is the about us page content...",
        "published_at": "2023-01-01T00:00:00.000000Z"
    },
    "message": null
}
 

Example response (404):


{
    "error": true,
    "message": "Not found"
}
 

Request      

GET api/v1/pages/{id}

Headers

Content-Type        

Example: application/json

Accept        

Example: application/json

URL Parameters

id   integer     

The ID of the page to retrieve. Example: 16

Profile

Get the user profile information.

requires authentication

Example request:
curl --request GET \
    --get "https://flex-home.botble.com/api/v1/me" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "https://flex-home.botble.com/api/v1/me"
);

const headers = {
    "Content-Type": "application/json",
    "Accept": "application/json",
};

fetch(url, {
    method: "GET",
    headers,
}).then(response => response.json());

Example response (401):

Show headers
cache-control: no-cache, private
content-type: application/json
access-control-allow-origin: *
 

{
    "error": true,
    "data": null,
    "message": "Unauthenticated."
}
 

Request      

GET api/v1/me

Headers

Content-Type        

Example: application/json

Accept        

Example: application/json

Update profile

requires authentication

Example request:
curl --request PUT \
    "https://flex-home.botble.com/api/v1/me" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --data "{
    \"first_name\": \"bngz\",
    \"last_name\": \"miyv\",
    \"name\": \"architecto\",
    \"phone\": \"architecto\",
    \"dob\": \"architecto\",
    \"gender\": \"architecto\",
    \"description\": \"Eius et animi quos velit et.\",
    \"email\": \"[email protected]\"
}"
const url = new URL(
    "https://flex-home.botble.com/api/v1/me"
);

const headers = {
    "Content-Type": "application/json",
    "Accept": "application/json",
};

let body = {
    "first_name": "bngz",
    "last_name": "miyv",
    "name": "architecto",
    "phone": "architecto",
    "dob": "architecto",
    "gender": "architecto",
    "description": "Eius et animi quos velit et.",
    "email": "[email protected]"
};

fetch(url, {
    method: "PUT",
    headers,
    body: JSON.stringify(body),
}).then(response => response.json());

Request      

PUT api/v1/me

Headers

Content-Type        

Example: application/json

Accept        

Example: application/json

Body Parameters

first_name   string  optional    

This field is required when name is not present. Must not be greater than 120 characters. Must be at least 2 characters. Example: bngz

last_name   string  optional    

This field is required when name is not present. Must not be greater than 120 characters. Must be at least 2 characters. Example: miyv

name   string     

Name. Example: architecto

phone   string     

Phone. Example: architecto

dob   date  optional    

nullable Date of birth (format: Y-m-d). Example: architecto

gender   string  optional    

Gender (male, female, other). Example: architecto

description   string  optional    

Description Example: Eius et animi quos velit et.

email   string  optional    

Email. Example: [email protected]

Update Avatar

requires authentication

Example request:
curl --request POST \
    "https://flex-home.botble.com/api/v1/update/avatar" \
    --header "Content-Type: multipart/form-data" \
    --header "Accept: application/json" \
    --form "avatar=@/tmp/phpUDm9f6" 
const url = new URL(
    "https://flex-home.botble.com/api/v1/update/avatar"
);

const headers = {
    "Content-Type": "multipart/form-data",
    "Accept": "application/json",
};

const body = new FormData();
body.append('avatar', document.querySelector('input[name="avatar"]').files[0]);

fetch(url, {
    method: "POST",
    headers,
    body,
}).then(response => response.json());

Request      

POST api/v1/update/avatar

Headers

Content-Type        

Example: multipart/form-data

Accept        

Example: application/json

Body Parameters

avatar   file     

Avatar file. Example: /tmp/phpUDm9f6

Update password

requires authentication

Example request:
curl --request PUT \
    "https://flex-home.botble.com/api/v1/update/password" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --data "{
    \"password\": \"|]|{+-\",
    \"old_password\": \"architecto\"
}"
const url = new URL(
    "https://flex-home.botble.com/api/v1/update/password"
);

const headers = {
    "Content-Type": "application/json",
    "Accept": "application/json",
};

let body = {
    "password": "|]|{+-",
    "old_password": "architecto"
};

fetch(url, {
    method: "PUT",
    headers,
    body: JSON.stringify(body),
}).then(response => response.json());

Request      

PUT api/v1/update/password

Headers

Content-Type        

Example: application/json

Accept        

Example: application/json

Body Parameters

password   string     

The new password of user. Example: |]|{+-

old_password   string     

The current password of user. Example: architecto

Get user settings

requires authentication

Example request:
curl --request GET \
    --get "https://flex-home.botble.com/api/v1/settings" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "https://flex-home.botble.com/api/v1/settings"
);

const headers = {
    "Content-Type": "application/json",
    "Accept": "application/json",
};

fetch(url, {
    method: "GET",
    headers,
}).then(response => response.json());

Example response (401):

Show headers
cache-control: no-cache, private
content-type: application/json
access-control-allow-origin: *
 

{
    "error": true,
    "data": null,
    "message": "Unauthenticated."
}
 

Request      

GET api/v1/settings

Headers

Content-Type        

Example: application/json

Accept        

Example: application/json

Update user settings

requires authentication

Example request:
curl --request PUT \
    "https://flex-home.botble.com/api/v1/settings" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --data "{
    \"biometric_enabled\": false,
    \"notification_enabled\": false,
    \"language\": \"architecto\",
    \"currency\": \"architecto\",
    \"theme\": \"architecto\",
    \"timezone\": \"Asia\\/Yekaterinburg\"
}"
const url = new URL(
    "https://flex-home.botble.com/api/v1/settings"
);

const headers = {
    "Content-Type": "application/json",
    "Accept": "application/json",
};

let body = {
    "biometric_enabled": false,
    "notification_enabled": false,
    "language": "architecto",
    "currency": "architecto",
    "theme": "architecto",
    "timezone": "Asia\/Yekaterinburg"
};

fetch(url, {
    method: "PUT",
    headers,
    body: JSON.stringify(body),
}).then(response => response.json());

Request      

PUT api/v1/settings

Headers

Content-Type        

Example: application/json

Accept        

Example: application/json

Body Parameters

biometric_enabled   boolean  optional    

Enable/disable biometric authentication. Example: false

notification_enabled   boolean  optional    

Enable/disable notifications. Example: false

language   string  optional    

User's preferred language. Example: architecto

currency   string  optional    

User's preferred currency. Example: architecto

theme   string  optional    

User's preferred theme (light, dark, auto). Example: architecto

timezone   string  optional    

User's timezone. Example: Asia/Yekaterinburg

Real Estate

List categories

Example request:
curl --request GET \
    --get "https://flex-home.botble.com/api/v1/categories?page=16&per_page=16&search=architecto&parent_id=architecto&order=architecto&order_by=architecto" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "https://flex-home.botble.com/api/v1/categories"
);

const params = {
    "page": "16",
    "per_page": "16",
    "search": "architecto",
    "parent_id": "architecto",
    "order": "architecto",
    "order_by": "architecto",
};
Object.keys(params)
    .forEach(key => url.searchParams.append(key, params[key]));

const headers = {
    "Content-Type": "application/json",
    "Accept": "application/json",
};

fetch(url, {
    method: "GET",
    headers,
}).then(response => response.json());

Example response (200):

Show headers
cache-control: no-cache, private
content-type: application/json
access-control-allow-origin: *
 

{
    "data": [],
    "links": {
        "first": "https://flex-home.botble.com/api/v1/categories?page=1",
        "last": "https://flex-home.botble.com/api/v1/categories?page=1",
        "prev": "https://flex-home.botble.com/api/v1/categories?page=15",
        "next": null
    },
    "meta": {
        "current_page": 16,
        "from": null,
        "last_page": 1,
        "links": [
            {
                "url": "https://flex-home.botble.com/api/v1/categories?page=15",
                "label": "&laquo; Previous",
                "page": 15,
                "active": false
            },
            {
                "url": "https://flex-home.botble.com/api/v1/categories?page=1",
                "label": "1",
                "page": 1,
                "active": false
            },
            {
                "url": null,
                "label": "Next &raquo;",
                "page": null,
                "active": false
            }
        ],
        "path": "https://flex-home.botble.com/api/v1/categories",
        "per_page": 16,
        "to": null,
        "total": 6
    },
    "error": false,
    "message": null
}
 

Request      

GET api/v1/categories

Headers

Content-Type        

Example: application/json

Accept        

Example: application/json

Query Parameters

page   integer  optional    

Current page of the collection. Default: 1 Example: 16

per_page   integer  optional    

Maximum number of items to be returned in result set. Default: 10 Example: 16

search   string  optional    

Limit results to those matching a string. Example: architecto

parent_id   string  optional    

Filter by parent category ID. Example: architecto

order   string  optional    

Order sort attribute ascending or descending. Default: asc. One of: asc, desc Example: architecto

order_by   string  optional    

Sort collection by object attribute. Default: order. One of: created_at, updated_at, name, order Example: architecto

Get category filters

Example request:
curl --request GET \
    --get "https://flex-home.botble.com/api/v1/categories/filters?parent_id=architecto&order=architecto&order_by=architecto" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "https://flex-home.botble.com/api/v1/categories/filters"
);

const params = {
    "parent_id": "architecto",
    "order": "architecto",
    "order_by": "architecto",
};
Object.keys(params)
    .forEach(key => url.searchParams.append(key, params[key]));

const headers = {
    "Content-Type": "application/json",
    "Accept": "application/json",
};

fetch(url, {
    method: "GET",
    headers,
}).then(response => response.json());

Example response (200):

Show headers
cache-control: no-cache, private
content-type: application/json
access-control-allow-origin: *
 

{
    "data": [
        {
            "id": 1,
            "name": "Apartment",
            "description": null,
            "status": {
                "value": "published",
                "label": "Published"
            },
            "order": 0,
            "is_default": 1,
            "parent_id": 0,
            "created_at": "2025-09-30T15:56:18.000000Z",
            "updated_at": "2025-09-30T15:56:18.000000Z",
            "url": "https://flex-home.botble.com/property-category/apartment",
            "slug": "apartment"
        },
        {
            "id": 2,
            "name": "Villa",
            "description": null,
            "status": {
                "value": "published",
                "label": "Published"
            },
            "order": 1,
            "is_default": 0,
            "parent_id": 0,
            "created_at": "2025-09-30T15:56:18.000000Z",
            "updated_at": "2025-09-30T15:56:18.000000Z",
            "url": "https://flex-home.botble.com/property-category/villa",
            "slug": "villa"
        },
        {
            "id": 3,
            "name": "Condo",
            "description": null,
            "status": {
                "value": "published",
                "label": "Published"
            },
            "order": 2,
            "is_default": 0,
            "parent_id": 0,
            "created_at": "2025-09-30T15:56:18.000000Z",
            "updated_at": "2025-09-30T15:56:18.000000Z",
            "url": "https://flex-home.botble.com/property-category/condo",
            "slug": "condo"
        },
        {
            "id": 4,
            "name": "House",
            "description": null,
            "status": {
                "value": "published",
                "label": "Published"
            },
            "order": 3,
            "is_default": 0,
            "parent_id": 0,
            "created_at": "2025-09-30T15:56:18.000000Z",
            "updated_at": "2025-09-30T15:56:18.000000Z",
            "url": "https://flex-home.botble.com/property-category/house",
            "slug": "house"
        },
        {
            "id": 5,
            "name": "Land",
            "description": null,
            "status": {
                "value": "published",
                "label": "Published"
            },
            "order": 4,
            "is_default": 0,
            "parent_id": 0,
            "created_at": "2025-09-30T15:56:18.000000Z",
            "updated_at": "2025-09-30T15:56:18.000000Z",
            "url": "https://flex-home.botble.com/property-category/land",
            "slug": "land"
        },
        {
            "id": 6,
            "name": "Commercial property",
            "description": null,
            "status": {
                "value": "published",
                "label": "Published"
            },
            "order": 5,
            "is_default": 0,
            "parent_id": 0,
            "created_at": "2025-09-30T15:56:18.000000Z",
            "updated_at": "2025-09-30T15:56:18.000000Z",
            "url": "https://flex-home.botble.com/property-category/commercial-property",
            "slug": "commercial-property"
        }
    ],
    "error": false,
    "message": null
}
 

Request      

GET api/v1/categories/filters

Headers

Content-Type        

Example: application/json

Accept        

Example: application/json

Query Parameters

parent_id   string  optional    

Filter by parent category ID. Example: architecto

order   string  optional    

Order sort attribute ascending or descending. Default: asc. One of: asc, desc Example: architecto

order_by   string  optional    

Sort collection by object attribute. Default: order. One of: created_at, updated_at, name, order Example: architecto

Get category by slug

Example request:
curl --request GET \
    --get "https://flex-home.botble.com/api/v1/categories/architecto" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "https://flex-home.botble.com/api/v1/categories/architecto"
);

const headers = {
    "Content-Type": "application/json",
    "Accept": "application/json",
};

fetch(url, {
    method: "GET",
    headers,
}).then(response => response.json());

Example response (404):

Show headers
cache-control: no-cache, private
content-type: application/json
access-control-allow-origin: *
 

{
    "error": true,
    "data": null,
    "message": "Category not found"
}
 

Request      

GET api/v1/categories/{slug}

Headers

Content-Type        

Example: application/json

Accept        

Example: application/json

URL Parameters

slug   string     

The slug of the category. Example: architecto

List properties

Example request:
curl --request GET \
    --get "https://flex-home.botble.com/api/v1/properties?page=16&per_page=16&search=architecto&type=architecto&city_id=architecto&state_id=architecto&country_id=16&category_id=architecto&project_id=architecto&min_price=architecto&max_price=architecto&min_square=architecto&max_square=architecto&number_bedroom=16&number_bathroom=16&number_floor=16&features=architecto&facilities=architecto&is_featured=architecto&order=architecto&order_by=architecto" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "https://flex-home.botble.com/api/v1/properties"
);

const params = {
    "page": "16",
    "per_page": "16",
    "search": "architecto",
    "type": "architecto",
    "city_id": "architecto",
    "state_id": "architecto",
    "country_id": "16",
    "category_id": "architecto",
    "project_id": "architecto",
    "min_price": "architecto",
    "max_price": "architecto",
    "min_square": "architecto",
    "max_square": "architecto",
    "number_bedroom": "16",
    "number_bathroom": "16",
    "number_floor": "16",
    "features": "architecto",
    "facilities": "architecto",
    "is_featured": "architecto",
    "order": "architecto",
    "order_by": "architecto",
};
Object.keys(params)
    .forEach(key => url.searchParams.append(key, params[key]));

const headers = {
    "Content-Type": "application/json",
    "Accept": "application/json",
};

fetch(url, {
    method: "GET",
    headers,
}).then(response => response.json());

Example response (200):

Show headers
cache-control: no-cache, private
content-type: application/json
access-control-allow-origin: *
 

{
    "data": [],
    "links": {
        "first": "https://flex-home.botble.com/api/v1/properties?page=1",
        "last": "https://flex-home.botble.com/api/v1/properties?page=2",
        "prev": "https://flex-home.botble.com/api/v1/properties?page=15",
        "next": null
    },
    "meta": {
        "current_page": 16,
        "from": null,
        "last_page": 2,
        "links": [
            {
                "url": "https://flex-home.botble.com/api/v1/properties?page=15",
                "label": "&laquo; Previous",
                "page": 15,
                "active": false
            },
            {
                "url": "https://flex-home.botble.com/api/v1/properties?page=1",
                "label": "1",
                "page": 1,
                "active": false
            },
            {
                "url": "https://flex-home.botble.com/api/v1/properties?page=2",
                "label": "2",
                "page": 2,
                "active": false
            },
            {
                "url": null,
                "label": "Next &raquo;",
                "page": null,
                "active": false
            }
        ],
        "path": "https://flex-home.botble.com/api/v1/properties",
        "per_page": 16,
        "to": null,
        "total": 17
    },
    "error": false,
    "message": null
}
 

Request      

GET api/v1/properties

Headers

Content-Type        

Example: application/json

Accept        

Example: application/json

Query Parameters

page   integer  optional    

Current page of the collection. Default: 1 Example: 16

per_page   integer  optional    

Maximum number of items to be returned in result set. Default: 10 Example: 16

search   string  optional    

Limit results to those matching a string. Example: architecto

type   string  optional    

Filter by property type (sale, rent). Example: architecto

city_id   string  optional    

Filter by city ID. Example: architecto

state_id   string  optional    

Filter by state ID. Example: architecto

country_id   integer  optional    

Filter by country ID. Example: 16

category_id   string  optional    

Filter by category ID. Example: architecto

project_id   string  optional    

Filter by project ID. Example: architecto

min_price   string  optional    

Filter by minimum price. Example: architecto

max_price   string  optional    

Filter by maximum price. Example: architecto

min_square   string  optional    

Filter by minimum square footage. Example: architecto

max_square   string  optional    

Filter by maximum square footage. Example: architecto

number_bedroom   integer  optional    

Filter by number of bedrooms. Example: 16

number_bathroom   integer  optional    

Filter by number of bathrooms. Example: 16

number_floor   integer  optional    

Filter by number of floors. Example: 16

features   string  optional    

Filter by feature IDs (comma-separated). Example: architecto

facilities   string  optional    

Filter by facility IDs (comma-separated). Example: architecto

is_featured   string  optional    

Filter by featured properties (1 or 0). Example: architecto

order   string  optional    

Order sort attribute ascending or descending. Default: desc. One of: asc, desc Example: architecto

order_by   string  optional    

Sort collection by object attribute. Default: created_at. One of: created_at, updated_at, name, price Example: architecto

Example request:
curl --request GET \
    --get "https://flex-home.botble.com/api/v1/properties/search" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --data "{
    \"q\": \"architecto\"
}"
const url = new URL(
    "https://flex-home.botble.com/api/v1/properties/search"
);

const headers = {
    "Content-Type": "application/json",
    "Accept": "application/json",
};

let body = {
    "q": "architecto"
};

fetch(url, {
    method: "GET",
    headers,
    body: JSON.stringify(body),
}).then(response => response.json());

Example response (200):

Show headers
cache-control: no-cache, private
content-type: application/json
access-control-allow-origin: *
 

{
    "error": false,
    "data": {
        "items": [
            {
                "id": 17,
                "name": "Nice Apartment for rent in Berlin",
                "description": "Fully furnished shared all-inclusive apartments, with modern amenities that’ll make you feel right at home. A great starting point for exploring the rest of the city and its many hidden gems. Area In the center of East Berlin, you’ll find everything from delicious street food to flee markets, to high-end restaurants.",
                "location": "Berlin, Germany",
                "images": [
                    "https://flex-home.botble.com/storage/properties/t3.jpg",
                    "https://flex-home.botble.com/storage/properties/t1.jpg",
                    "https://flex-home.botble.com/storage/properties/t2.jpg",
                    "https://flex-home.botble.com/storage/properties/t4.jpg",
                    "https://flex-home.botble.com/storage/properties/t5.jpg"
                ],
                "type": {
                    "value": "rent",
                    "label": "Rent"
                },
                "status": {
                    "value": "renting",
                    "label": "Renting"
                },
                "is_featured": 1,
                "number_bedroom": 1,
                "number_bathroom": 1,
                "number_floor": 1,
                "square": 33,
                "price": 1217,
                "price_formatted": "$1,217",
                "currency_id": 1,
                "currency": {
                    "id": 1,
                    "title": "USD",
                    "symbol": "$",
                    "is_prefix_symbol": true,
                    "decimals": 0,
                    "exchange_rate": 1,
                    "is_default": true
                },
                "period": {
                    "value": "month",
                    "label": "Monthly"
                },
                "city_id": 5,
                "state_id": 1,
                "country_id": 1,
                "city": {
                    "id": 5,
                    "name": "San Francisco"
                },
                "state": {
                    "id": 1,
                    "name": "California"
                },
                "country": {
                    "id": 1,
                    "name": "United States"
                },
                "latitude": "43.222732",
                "longitude": "-76.105523",
                "zip_code": null,
                "unique_id": null,
                "created_at": "2019-11-18T08:13:07.000000Z",
                "updated_at": "2025-09-30T15:56:44.000000Z",
                "url": "https://flex-home.botble.com/properties/nice-apartment-for-rent-in-berlin",
                "slug": "nice-apartment-for-rent-in-berlin"
            },
            {
                "id": 16,
                "name": "Apartment Muiderstraatweg in Diemen",
                "description": "Lovely modern and very well maintained apartment in Diemen.\nThe property is located on the first floor where you will find the living room and the kitchen with all modern conveniences.\nOn the second floor 2 bedrooms and a nice bathroom with a seperate shower and bathtub.\nOn this floor you have access to the small roof terrace.",
                "location": "Diemen, Netherlands",
                "images": [
                    "https://flex-home.botble.com/storage/properties/b4-1.jpg",
                    "https://flex-home.botble.com/storage/properties/b3.jpg",
                    "https://flex-home.botble.com/storage/properties/b5-1.jpg"
                ],
                "type": {
                    "value": "rent",
                    "label": "Rent"
                },
                "status": {
                    "value": "renting",
                    "label": "Renting"
                },
                "is_featured": 1,
                "number_bedroom": 3,
                "number_bathroom": 1,
                "number_floor": 2,
                "square": 90,
                "price": 2123,
                "price_formatted": "$2,123",
                "currency_id": 1,
                "currency": {
                    "id": 1,
                    "title": "USD",
                    "symbol": "$",
                    "is_prefix_symbol": true,
                    "decimals": 0,
                    "exchange_rate": 1,
                    "is_default": true
                },
                "period": {
                    "value": "month",
                    "label": "Monthly"
                },
                "city_id": 3,
                "state_id": 1,
                "country_id": 1,
                "city": {
                    "id": 3,
                    "name": "Bakersfield"
                },
                "state": {
                    "id": 1,
                    "name": "California"
                },
                "country": {
                    "id": 1,
                    "name": "United States"
                },
                "latitude": "43.52876",
                "longitude": "-76.65882",
                "zip_code": null,
                "unique_id": null,
                "created_at": "2019-11-18T07:59:14.000000Z",
                "updated_at": "2025-09-30T15:56:44.000000Z",
                "url": "https://flex-home.botble.com/properties/apartment-muiderstraatweg-in-diemen",
                "slug": "apartment-muiderstraatweg-in-diemen"
            },
            {
                "id": 15,
                "name": "2 Floor house in Compound Pejaten Barat Kemang",
                "description": "Want to lease a nice house in compound Renovated, balinese style ,homey and comfy area 220/300, 3 bedrooms, 2 bathrooms, garden furnished renovated fasilitas : s.pool, tenis court, jogging track 24 hours security rent price : IDR 250.000.000 / year ",
                "location": "Kota Administrasi Jakarta Selatan, South Jakarta City, Jakarta Raya, Indonesia",
                "images": [
                    "https://flex-home.botble.com/storage/properties/a1-2.jpg",
                    "https://flex-home.botble.com/storage/properties/a2-2.jpg",
                    "https://flex-home.botble.com/storage/properties/a3-2.jpg",
                    "https://flex-home.botble.com/storage/properties/a4-2.jpg"
                ],
                "type": {
                    "value": "rent",
                    "label": "Rent"
                },
                "status": {
                    "value": "renting",
                    "label": "Renting"
                },
                "is_featured": 1,
                "number_bedroom": 3,
                "number_bathroom": 2,
                "number_floor": 2,
                "square": 200,
                "price": 1400,
                "price_formatted": "$1,400",
                "currency_id": 1,
                "currency": {
                    "id": 1,
                    "title": "USD",
                    "symbol": "$",
                    "is_prefix_symbol": true,
                    "decimals": 0,
                    "exchange_rate": 1,
                    "is_default": true
                },
                "period": {
                    "value": "month",
                    "label": "Monthly"
                },
                "city_id": 5,
                "state_id": 1,
                "country_id": 1,
                "city": {
                    "id": 5,
                    "name": "San Francisco"
                },
                "state": {
                    "id": 1,
                    "name": "California"
                },
                "country": {
                    "id": 1,
                    "name": "United States"
                },
                "latitude": "43.636294",
                "longitude": "-76.116519",
                "zip_code": null,
                "unique_id": null,
                "created_at": "2019-11-18T07:44:44.000000Z",
                "updated_at": "2025-09-30T15:56:44.000000Z",
                "url": "https://flex-home.botble.com/properties/2-floor-house-in-compound-pejaten-barat-kemang",
                "slug": "2-floor-house-in-compound-pejaten-barat-kemang"
            },
            {
                "id": 14,
                "name": "5 room luxury penthouse for sale in Kuala Lumpur",
                "description": "Next to St Regis 5 Star Hotel, Excellent accessibility (LRT,KLIA TRANSIT,KTM), Rooftop Sky lounge, sky pool, sky gym, KLCC and Lake Garden VIEW",
                "location": "Kuala Lumpur, Malaysia",
                "images": [
                    "https://flex-home.botble.com/storage/properties/6-2.jpg",
                    "https://flex-home.botble.com/storage/properties/7-2.jpg",
                    "https://flex-home.botble.com/storage/properties/9-1.jpg",
                    "https://flex-home.botble.com/storage/properties/8-2.jpg",
                    "https://flex-home.botble.com/storage/properties/10-1.jpg",
                    "https://flex-home.botble.com/storage/properties/11-1.jpg"
                ],
                "type": {
                    "value": "sale",
                    "label": "Sale"
                },
                "status": {
                    "value": "selling",
                    "label": "Selling"
                },
                "is_featured": 1,
                "number_bedroom": 5,
                "number_bathroom": 7,
                "number_floor": 20,
                "square": 377,
                "price": 1590000,
                "price_formatted": "$1,590,000",
                "currency_id": 1,
                "currency": {
                    "id": 1,
                    "title": "USD",
                    "symbol": "$",
                    "is_prefix_symbol": true,
                    "decimals": 0,
                    "exchange_rate": 1,
                    "is_default": true
                },
                "period": {
                    "value": "month",
                    "label": "Monthly"
                },
                "city_id": 4,
                "state_id": 1,
                "country_id": 1,
                "city": {
                    "id": 4,
                    "name": "Anaheim"
                },
                "state": {
                    "id": 1,
                    "name": "California"
                },
                "country": {
                    "id": 1,
                    "name": "United States"
                },
                "latitude": "42.504328",
                "longitude": "-76.341293",
                "zip_code": null,
                "unique_id": null,
                "created_at": "2019-11-18T07:36:29.000000Z",
                "updated_at": "2025-09-30T15:56:44.000000Z",
                "url": "https://flex-home.botble.com/properties/5-room-luxury-penthouse-for-sale-in-kuala-lumpur",
                "slug": "5-room-luxury-penthouse-for-sale-in-kuala-lumpur"
            },
            {
                "id": 13,
                "name": "Luxury Apartments in Singapore for Sale",
                "description": "This apartment is located in Singapore. High Floor, Chinese Family, Sky Garden, Beautiful Roof Terrace with Jaccuzzi and Alfresco Dinning, Renovated with Quality Finishes, Near Amenities, Plenty of eateries, 5mins Walk to NTUC / Shaw Plaza, Mins Drive To Orchard",
                "location": "Balestier Road, Singapore",
                "images": [
                    "https://flex-home.botble.com/storage/properties/5-2.jpg",
                    "https://flex-home.botble.com/storage/properties/2-3.jpg",
                    "https://flex-home.botble.com/storage/properties/3-3.jpg",
                    "https://flex-home.botble.com/storage/properties/4-2.jpg",
                    "https://flex-home.botble.com/storage/properties/1-3.jpg"
                ],
                "type": {
                    "value": "sale",
                    "label": "Sale"
                },
                "status": {
                    "value": "selling",
                    "label": "Selling"
                },
                "is_featured": 1,
                "number_bedroom": 2,
                "number_bathroom": 2,
                "number_floor": 1,
                "square": 78,
                "price": 918000,
                "price_formatted": "$918,000",
                "currency_id": 1,
                "currency": {
                    "id": 1,
                    "title": "USD",
                    "symbol": "$",
                    "is_prefix_symbol": true,
                    "decimals": 0,
                    "exchange_rate": 1,
                    "is_default": true
                },
                "period": {
                    "value": "month",
                    "label": "Monthly"
                },
                "city_id": 5,
                "state_id": 1,
                "country_id": 1,
                "city": {
                    "id": 5,
                    "name": "San Francisco"
                },
                "state": {
                    "id": 1,
                    "name": "California"
                },
                "country": {
                    "id": 1,
                    "name": "United States"
                },
                "latitude": "42.813772",
                "longitude": "-76.615855",
                "zip_code": null,
                "unique_id": null,
                "created_at": "2019-11-18T07:23:02.000000Z",
                "updated_at": "2025-09-30T15:56:44.000000Z",
                "url": "https://flex-home.botble.com/properties/luxury-apartments-in-singapore-for-sale",
                "slug": "luxury-apartments-in-singapore-for-sale"
            },
            {
                "id": 12,
                "name": "Elegant family home presents premium modern living",
                "description": "Move straight into this beautifully presented four-bedroom home and enjoy the best in modern family living without lifting a finger. Two separate living areas and four generous bedrooms provide plenty of space to grow, and entertaining is a real pleasure on the elegant alfresco patio in a peaceful garden setting.",
                "location": "North Lakes QLD 4509, Australia",
                "images": [
                    "https://flex-home.botble.com/storage/properties/a1-1.jpg",
                    "https://flex-home.botble.com/storage/properties/a2-1.jpg",
                    "https://flex-home.botble.com/storage/properties/a3-1.jpg",
                    "https://flex-home.botble.com/storage/properties/a5.jpg",
                    "https://flex-home.botble.com/storage/properties/a4-1.jpg",
                    "https://flex-home.botble.com/storage/properties/a6.jpg"
                ],
                "type": {
                    "value": "rent",
                    "label": "Rent"
                },
                "status": {
                    "value": "renting",
                    "label": "Renting"
                },
                "is_featured": 1,
                "number_bedroom": 3,
                "number_bathroom": 3,
                "number_floor": 1,
                "square": 658,
                "price": 1574,
                "price_formatted": "$1,574",
                "currency_id": 1,
                "currency": {
                    "id": 1,
                    "title": "USD",
                    "symbol": "$",
                    "is_prefix_symbol": true,
                    "decimals": 0,
                    "exchange_rate": 1,
                    "is_default": true
                },
                "period": {
                    "value": "month",
                    "label": "Monthly"
                },
                "city_id": 5,
                "state_id": 1,
                "country_id": 1,
                "city": {
                    "id": 5,
                    "name": "San Francisco"
                },
                "state": {
                    "id": 1,
                    "name": "California"
                },
                "country": {
                    "id": 1,
                    "name": "United States"
                },
                "latitude": "43.137361",
                "longitude": "-76.539998",
                "zip_code": null,
                "unique_id": null,
                "created_at": "2019-11-18T02:47:05.000000Z",
                "updated_at": "2025-09-30T15:56:44.000000Z",
                "url": "https://flex-home.botble.com/properties/elegant-family-home-presents-premium-modern-living",
                "slug": "elegant-family-home-presents-premium-modern-living"
            },
            {
                "id": 11,
                "name": "Brand New 1 Bedroom Apartment In First Class Location",
                "description": "Set-back from Sandy Bay Road, walk to everything that counts: vibrant Battery Point village, Salamanca Place (Tasmania's premier entertainment precinct), the City Centre, University of Tasmania, hotel, retail and an easy stroll away from bustling Sandy Bay shops, local schools and with public transport outside your front door.",
                "location": "Sandy Bay Road, Sandy Bay TAS, Australia",
                "images": [
                    "https://flex-home.botble.com/storage/properties/12.jpg",
                    "https://flex-home.botble.com/storage/properties/10.jpg",
                    "https://flex-home.botble.com/storage/properties/13.jpg",
                    "https://flex-home.botble.com/storage/properties/14.jpg",
                    "https://flex-home.botble.com/storage/properties/15.jpg"
                ],
                "type": {
                    "value": "rent",
                    "label": "Rent"
                },
                "status": {
                    "value": "renting",
                    "label": "Renting"
                },
                "is_featured": 1,
                "number_bedroom": 1,
                "number_bathroom": 1,
                "number_floor": 1,
                "square": 80,
                "price": 1680,
                "price_formatted": "$1,680",
                "currency_id": 1,
                "currency": {
                    "id": 1,
                    "title": "USD",
                    "symbol": "$",
                    "is_prefix_symbol": true,
                    "decimals": 0,
                    "exchange_rate": 1,
                    "is_default": true
                },
                "period": {
                    "value": "month",
                    "label": "Monthly"
                },
                "city_id": 5,
                "state_id": 1,
                "country_id": 1,
                "city": {
                    "id": 5,
                    "name": "San Francisco"
                },
                "state": {
                    "id": 1,
                    "name": "California"
                },
                "country": {
                    "id": 1,
                    "name": "United States"
                },
                "latitude": "42.659611",
                "longitude": "-76.197177",
                "zip_code": null,
                "unique_id": null,
                "created_at": "2019-11-18T02:22:48.000000Z",
                "updated_at": "2025-09-30T15:56:44.000000Z",
                "url": "https://flex-home.botble.com/properties/brand-new-1-bedroom-apartment-in-first-class-location",
                "slug": "brand-new-1-bedroom-apartment-in-first-class-location"
            },
            {
                "id": 10,
                "name": "Thompsons Road House for rent",
                "description": "Perfectly positioned in the exclusive suburb of Bulleen, this renovated home 3 bedroom home offers a superb lifestyle to those seeking all the expected comforts, privacy, convenience to freeways & transport, and space.\nYou are welcomed by a beautiful, low maintenance and established front garden, with ample off street parking, an elevated porch and tantum large garage",
                "location": "Thompsons Road, Bulleen VIC, Australia",
                "images": [
                    "https://flex-home.botble.com/storage/properties/5-1.jpg",
                    "https://flex-home.botble.com/storage/properties/7-1.jpg",
                    "https://flex-home.botble.com/storage/properties/8-1.jpg",
                    "https://flex-home.botble.com/storage/properties/9.jpg",
                    "https://flex-home.botble.com/storage/properties/6.jpg"
                ],
                "type": {
                    "value": "rent",
                    "label": "Rent"
                },
                "status": {
                    "value": "renting",
                    "label": "Renting"
                },
                "is_featured": 1,
                "number_bedroom": 3,
                "number_bathroom": 3,
                "number_floor": 1,
                "square": 160,
                "price": 1465,
                "price_formatted": "$1,465",
                "currency_id": 1,
                "currency": {
                    "id": 1,
                    "title": "USD",
                    "symbol": "$",
                    "is_prefix_symbol": true,
                    "decimals": 0,
                    "exchange_rate": 1,
                    "is_default": true
                },
                "period": {
                    "value": "month",
                    "label": "Monthly"
                },
                "city_id": 3,
                "state_id": 1,
                "country_id": 1,
                "city": {
                    "id": 3,
                    "name": "Bakersfield"
                },
                "state": {
                    "id": 1,
                    "name": "California"
                },
                "country": {
                    "id": 1,
                    "name": "United States"
                },
                "latitude": "42.601639",
                "longitude": "-76.36969",
                "zip_code": null,
                "unique_id": null,
                "created_at": "2019-11-18T02:16:53.000000Z",
                "updated_at": "2025-09-30T15:56:44.000000Z",
                "url": "https://flex-home.botble.com/properties/thompsons-road-house-for-rent",
                "slug": "thompsons-road-house-for-rent"
            },
            {
                "id": 9,
                "name": "Private Estate Magnificent Views",
                "description": "Spacious 3 bedroom stabilised earth brick home, light and bright with statement entrance hall. Conservatory sun room, open plan kitchen/dining/lounge with raked cedar lined ceiling, kitchen with oregon timber cupboards and new Smeg oven. Air conditioner & wood heater",
                "location": "110 Springdale Heights, Hay Denmark, WA, Australia",
                "images": [
                    "https://flex-home.botble.com/storage/properties/79.jpg",
                    "https://flex-home.botble.com/storage/properties/71.jpg",
                    "https://flex-home.botble.com/storage/properties/73.jpg",
                    "https://flex-home.botble.com/storage/properties/72.jpg",
                    "https://flex-home.botble.com/storage/properties/74.jpg",
                    "https://flex-home.botble.com/storage/properties/75.jpg",
                    "https://flex-home.botble.com/storage/properties/78.jpg"
                ],
                "type": {
                    "value": "sale",
                    "label": "Sale"
                },
                "status": {
                    "value": "selling",
                    "label": "Selling"
                },
                "is_featured": 1,
                "number_bedroom": 3,
                "number_bathroom": 1,
                "number_floor": 1,
                "square": 2000,
                "price": 694000,
                "price_formatted": "$694,000",
                "currency_id": 1,
                "currency": {
                    "id": 1,
                    "title": "USD",
                    "symbol": "$",
                    "is_prefix_symbol": true,
                    "decimals": 0,
                    "exchange_rate": 1,
                    "is_default": true
                },
                "period": {
                    "value": "month",
                    "label": "Monthly"
                },
                "city_id": 5,
                "state_id": 1,
                "country_id": 1,
                "city": {
                    "id": 5,
                    "name": "San Francisco"
                },
                "state": {
                    "id": 1,
                    "name": "California"
                },
                "country": {
                    "id": 1,
                    "name": "United States"
                },
                "latitude": "42.812299",
                "longitude": "-76.137607",
                "zip_code": null,
                "unique_id": null,
                "created_at": "2019-11-18T02:02:19.000000Z",
                "updated_at": "2025-09-30T15:56:44.000000Z",
                "url": "https://flex-home.botble.com/properties/private-estate-magnificent-views",
                "slug": "private-estate-magnificent-views"
            },
            {
                "id": 8,
                "name": "Osaka Heights Apartment",
                "description": "Ceramic tiled flooring, Granite counter top , Single bowl stainless steel kitchen sink with drain board and provisions for water purifier , electric hood , exhaust fan will be provided. Anti-skid Ceramic tiles on floor and ceramic wall tiles up to 7 feet height. White coloured branded sanitary fittings, Chromium plated taps , concealed plumbing.",
                "location": "High Level Road, Colombo 06, Sri Lanka",
                "images": [
                    "https://flex-home.botble.com/storage/properties/24-1.jpg",
                    "https://flex-home.botble.com/storage/properties/22-1.jpg",
                    "https://flex-home.botble.com/storage/properties/p1.jpg",
                    "https://flex-home.botble.com/storage/properties/p2.jpg"
                ],
                "type": {
                    "value": "sale",
                    "label": "Sale"
                },
                "status": {
                    "value": "selling",
                    "label": "Selling"
                },
                "is_featured": 1,
                "number_bedroom": 2,
                "number_bathroom": 2,
                "number_floor": 1,
                "square": 110,
                "price": 150000,
                "price_formatted": "$150,000",
                "currency_id": 1,
                "currency": {
                    "id": 1,
                    "title": "USD",
                    "symbol": "$",
                    "is_prefix_symbol": true,
                    "decimals": 0,
                    "exchange_rate": 1,
                    "is_default": true
                },
                "period": {
                    "value": "month",
                    "label": "Monthly"
                },
                "city_id": 5,
                "state_id": 1,
                "country_id": 1,
                "city": {
                    "id": 5,
                    "name": "San Francisco"
                },
                "state": {
                    "id": 1,
                    "name": "California"
                },
                "country": {
                    "id": 1,
                    "name": "United States"
                },
                "latitude": "42.928003",
                "longitude": "-74.902172",
                "zip_code": null,
                "unique_id": null,
                "created_at": "2019-11-18T01:49:36.000000Z",
                "updated_at": "2025-09-30T15:56:44.000000Z",
                "url": "https://flex-home.botble.com/properties/osaka-heights-apartment",
                "slug": "osaka-heights-apartment"
            },
            {
                "id": 7,
                "name": "Family Victorian \"View\" Home",
                "description": "There is a formal dining room and spacious living room located on either side of the updated eat-in kitchen skylight, white cabinets, and stainless steel appliances. Enjoy ample natural light and spectacular southern views from the main living room oversized windows and a walk-out deck. A bonus room (guest bedroom/office) and a full bath complete t",
                "location": "Safeway San Francisco CA, Market Street, San Francisco, CA 94114, USA",
                "images": [
                    "https://flex-home.botble.com/storage/properties/b5.jpg",
                    "https://flex-home.botble.com/storage/properties/b1.jpg",
                    "https://flex-home.botble.com/storage/properties/b4.jpg",
                    "https://flex-home.botble.com/storage/properties/b6.jpg",
                    "https://flex-home.botble.com/storage/properties/b2.jpg"
                ],
                "type": {
                    "value": "rent",
                    "label": "Rent"
                },
                "status": {
                    "value": "renting",
                    "label": "Renting"
                },
                "is_featured": 1,
                "number_bedroom": 3,
                "number_bathroom": 2,
                "number_floor": 1,
                "square": 180,
                "price": 2580,
                "price_formatted": "$2,580",
                "currency_id": 1,
                "currency": {
                    "id": 1,
                    "title": "USD",
                    "symbol": "$",
                    "is_prefix_symbol": true,
                    "decimals": 0,
                    "exchange_rate": 1,
                    "is_default": true
                },
                "period": {
                    "value": "month",
                    "label": "Monthly"
                },
                "city_id": 1,
                "state_id": 1,
                "country_id": 1,
                "city": {
                    "id": 1,
                    "name": "Alhambra"
                },
                "state": {
                    "id": 1,
                    "name": "California"
                },
                "country": {
                    "id": 1,
                    "name": "United States"
                },
                "latitude": "43.819646",
                "longitude": "-74.89512",
                "zip_code": null,
                "unique_id": null,
                "created_at": "2019-11-18T01:12:07.000000Z",
                "updated_at": "2025-09-30T15:56:44.000000Z",
                "url": "https://flex-home.botble.com/properties/family-victorian-view-home",
                "slug": "family-victorian-view-home"
            },
            {
                "id": 6,
                "name": "5 beds luxury house",
                "description": "Luxury and spacious remodeled house in Sea Cliff with 3 levels, 5 bedrooms and 4 bathrooms, and a great Golden Gate View. 4-Car garage. The house is remodeled and spacious with a great layout, and is offered furnished. It is charming and beautiful with lots of details, has thoughtful front landscaping and a large backyard and a patio, and has a great view of the Golden Gate",
                "location": "Seacliff San Francisco, Sea Cliff Avenue, San Francisco, CA 94121, USA",
                "images": [
                    "https://flex-home.botble.com/storage/properties/a3.jpg",
                    "https://flex-home.botble.com/storage/properties/a1.jpg",
                    "https://flex-home.botble.com/storage/properties/a2.jpg",
                    "https://flex-home.botble.com/storage/properties/a4.jpg"
                ],
                "type": {
                    "value": "rent",
                    "label": "Rent"
                },
                "status": {
                    "value": "renting",
                    "label": "Renting"
                },
                "is_featured": 1,
                "number_bedroom": 5,
                "number_bathroom": 4,
                "number_floor": 3,
                "square": 270,
                "price": 1808,
                "price_formatted": "$1,808",
                "currency_id": 1,
                "currency": {
                    "id": 1,
                    "title": "USD",
                    "symbol": "$",
                    "is_prefix_symbol": true,
                    "decimals": 0,
                    "exchange_rate": 1,
                    "is_default": true
                },
                "period": {
                    "value": "month",
                    "label": "Monthly"
                },
                "city_id": 1,
                "state_id": 1,
                "country_id": 1,
                "city": {
                    "id": 1,
                    "name": "Alhambra"
                },
                "state": {
                    "id": 1,
                    "name": "California"
                },
                "country": {
                    "id": 1,
                    "name": "United States"
                },
                "latitude": "42.946985",
                "longitude": "-76.206616",
                "zip_code": null,
                "unique_id": null,
                "created_at": "2019-11-18T01:05:58.000000Z",
                "updated_at": "2025-09-30T15:56:44.000000Z",
                "url": "https://flex-home.botble.com/properties/5-beds-luxury-house",
                "slug": "5-beds-luxury-house"
            }
        ],
        "query": "architecto",
        "count": 12
    },
    "message": null
}
 

Get property filters

Example request:
curl --request GET \
    --get "https://flex-home.botble.com/api/v1/properties/filters?page=16&per_page=16&search=architecto&type=architecto&city_id=architecto&state_id=architecto&country_id=16&category_id=architecto&project_id=architecto&min_price=architecto&max_price=architecto&min_square=architecto&max_square=architecto&number_bedroom=16&number_bathroom=16&number_floor=16&features=architecto&facilities=architecto&is_featured=architecto&order=architecto&order_by=architecto" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "https://flex-home.botble.com/api/v1/properties/filters"
);

const params = {
    "page": "16",
    "per_page": "16",
    "search": "architecto",
    "type": "architecto",
    "city_id": "architecto",
    "state_id": "architecto",
    "country_id": "16",
    "category_id": "architecto",
    "project_id": "architecto",
    "min_price": "architecto",
    "max_price": "architecto",
    "min_square": "architecto",
    "max_square": "architecto",
    "number_bedroom": "16",
    "number_bathroom": "16",
    "number_floor": "16",
    "features": "architecto",
    "facilities": "architecto",
    "is_featured": "architecto",
    "order": "architecto",
    "order_by": "architecto",
};
Object.keys(params)
    .forEach(key => url.searchParams.append(key, params[key]));

const headers = {
    "Content-Type": "application/json",
    "Accept": "application/json",
};

fetch(url, {
    method: "GET",
    headers,
}).then(response => response.json());

Example response (200):

Show headers
cache-control: no-cache, private
content-type: application/json
access-control-allow-origin: *
 

{
    "data": [],
    "links": {
        "first": "https://flex-home.botble.com/api/v1/properties/filters?page=1",
        "last": "https://flex-home.botble.com/api/v1/properties/filters?page=2",
        "prev": "https://flex-home.botble.com/api/v1/properties/filters?page=15",
        "next": null
    },
    "meta": {
        "current_page": 16,
        "from": null,
        "last_page": 2,
        "links": [
            {
                "url": "https://flex-home.botble.com/api/v1/properties/filters?page=15",
                "label": "&laquo; Previous",
                "page": 15,
                "active": false
            },
            {
                "url": "https://flex-home.botble.com/api/v1/properties/filters?page=1",
                "label": "1",
                "page": 1,
                "active": false
            },
            {
                "url": "https://flex-home.botble.com/api/v1/properties/filters?page=2",
                "label": "2",
                "page": 2,
                "active": false
            },
            {
                "url": null,
                "label": "Next &raquo;",
                "page": null,
                "active": false
            }
        ],
        "path": "https://flex-home.botble.com/api/v1/properties/filters",
        "per_page": 16,
        "to": null,
        "total": 17
    },
    "error": false,
    "message": null
}
 

Request      

GET api/v1/properties/filters

Headers

Content-Type        

Example: application/json

Accept        

Example: application/json

Query Parameters

page   integer  optional    

Current page of the collection. Default: 1 Example: 16

per_page   integer  optional    

Maximum number of items to be returned in result set. Default: 10 Example: 16

search   string  optional    

Limit results to those matching a string. Example: architecto

type   string  optional    

Filter by property type (sale, rent). Example: architecto

city_id   string  optional    

Filter by city ID. Example: architecto

state_id   string  optional    

Filter by state ID. Example: architecto

country_id   integer  optional    

Filter by country ID. Example: 16

category_id   string  optional    

Filter by category ID. Example: architecto

project_id   string  optional    

Filter by project ID. Example: architecto

min_price   string  optional    

Filter by minimum price. Example: architecto

max_price   string  optional    

Filter by maximum price. Example: architecto

min_square   string  optional    

Filter by minimum square footage. Example: architecto

max_square   string  optional    

Filter by maximum square footage. Example: architecto

number_bedroom   integer  optional    

Filter by number of bedrooms. Example: 16

number_bathroom   integer  optional    

Filter by number of bathrooms. Example: 16

number_floor   integer  optional    

Filter by number of floors. Example: 16

features   string  optional    

Filter by feature IDs (comma-separated). Example: architecto

facilities   string  optional    

Filter by facility IDs (comma-separated). Example: architecto

is_featured   string  optional    

Filter by featured properties (1 or 0). Example: architecto

order   string  optional    

Order sort attribute ascending or descending. Default: desc. One of: asc, desc Example: architecto

order_by   string  optional    

Sort collection by object attribute. Default: created_at. One of: created_at, updated_at, name, price Example: architecto

Get property by slug

Example request:
curl --request GET \
    --get "https://flex-home.botble.com/api/v1/properties/architecto" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "https://flex-home.botble.com/api/v1/properties/architecto"
);

const headers = {
    "Content-Type": "application/json",
    "Accept": "application/json",
};

fetch(url, {
    method: "GET",
    headers,
}).then(response => response.json());

Example response (404):

Show headers
cache-control: no-cache, private
content-type: application/json
access-control-allow-origin: *
 

{
    "error": true,
    "data": null,
    "message": "Property not found"
}
 

Request      

GET api/v1/properties/{slug}

Headers

Content-Type        

Example: application/json

Accept        

Example: application/json

URL Parameters

slug   string     

The slug of the property. Example: architecto

Get property by ID

Example request:
curl --request GET \
    --get "https://flex-home.botble.com/api/v1/properties/id/16" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "https://flex-home.botble.com/api/v1/properties/id/16"
);

const headers = {
    "Content-Type": "application/json",
    "Accept": "application/json",
};

fetch(url, {
    method: "GET",
    headers,
}).then(response => response.json());

Example response (200):

Show headers
cache-control: no-cache, private
content-type: application/json
access-control-allow-origin: *
 

{
    "data": {
        "id": 16,
        "name": "Apartment Muiderstraatweg in Diemen",
        "description": "Lovely modern and very well maintained apartment in Diemen.\nThe property is located on the first floor where you will find the living room and the kitchen with all modern conveniences.\nOn the second floor 2 bedrooms and a nice bathroom with a seperate shower and bathtub.\nOn this floor you have access to the small roof terrace.",
        "content": "<p>For rent fully furnished 3 bedroom apartment in Diemen.<br />\r\nVery suitable for a couple or maximum 2 working sharers, garantors are not accepted.<br />\r\n<br />\r\nLovely modern and very well maintained apartment in Diemen.<br />\r\nThe property is located on the first floor where you will find the living room and the kitchen with all modern conveniences.<br />\r\nOn the second floor 2 bedrooms and a nice bathroom with a seperate shower and bathtub.<br />\r\nOn this floor you have access to the small roof terrace.<br />\r\nLast but not least there is a spacious attic room on the third floor.<br />\r\nThe tram stops in front of the door and within 20 minutes you are in the heart of Amsterdam.<br />\r\nPets are not allowed.</p><h5 class=\"headifhouse\">FAQs</h5> <section class=\"faq-section\">\n    \n    <div class=\"faq-content\">\n        <div class=\"faq-container\">\n                                <div class=\"faq-wrapper\">\n                        <div class=\"faq-list\" id=\"faq-list\">\n                                                                                            <div class=\"faq-item\">\n                                    <div class=\"faq-question-wrapper\">\n                                        <button class=\"faq-question \"\n                                                type=\"button\"\n                                                data-target=\"#faq-answer-1\"\n                                                aria-expanded=\"true\"\n                                                aria-controls=\"faq-answer-1\">\n                                            <span class=\"faq-question-text\">What steps are involved in buying a home?</span>\n                                            <span class=\"faq-icon\">\n                                                <span class=\"faq-icon-plus\">+</span>\n                                                <span class=\"faq-icon-minus\">−</span>\n                                            </span>\n                                        </button>\n                                    </div>\n                                    <div id=\"faq-answer-1\"\n                                         class=\"faq-answer  show \">\n                                        <div class=\"faq-answer-content\">\n                                            The home buying process involves several steps including getting pre-approved for a mortgage, finding a real estate agent, searching for homes, making an offer, getting a home inspection, and closing the deal.\n                                        </div>\n                                    </div>\n                                </div>\n                                                                                            <div class=\"faq-item\">\n                                    <div class=\"faq-question-wrapper\">\n                                        <button class=\"faq-question  collapsed \"\n                                                type=\"button\"\n                                                data-target=\"#faq-answer-2\"\n                                                aria-expanded=\"false\"\n                                                aria-controls=\"faq-answer-2\">\n                                            <span class=\"faq-question-text\">How can I increase the value of my home before selling?</span>\n                                            <span class=\"faq-icon\">\n                                                <span class=\"faq-icon-plus\">+</span>\n                                                <span class=\"faq-icon-minus\">−</span>\n                                            </span>\n                                        </button>\n                                    </div>\n                                    <div id=\"faq-answer-2\"\n                                         class=\"faq-answer \">\n                                        <div class=\"faq-answer-content\">\n                                            You can increase your home's value by making necessary repairs, updating outdated features, improving curb appeal, and ensuring the home is clean and well-maintained.\n                                        </div>\n                                    </div>\n                                </div>\n                                                                                            <div class=\"faq-item\">\n                                    <div class=\"faq-question-wrapper\">\n                                        <button class=\"faq-question  collapsed \"\n                                                type=\"button\"\n                                                data-target=\"#faq-answer-3\"\n                                                aria-expanded=\"false\"\n                                                aria-controls=\"faq-answer-3\">\n                                            <span class=\"faq-question-text\">What should I look for in a rental property?</span>\n                                            <span class=\"faq-icon\">\n                                                <span class=\"faq-icon-plus\">+</span>\n                                                <span class=\"faq-icon-minus\">−</span>\n                                            </span>\n                                        </button>\n                                    </div>\n                                    <div id=\"faq-answer-3\"\n                                         class=\"faq-answer \">\n                                        <div class=\"faq-answer-content\">\n                                            When looking for a rental property, consider factors such as location, rent price, amenities, lease terms, and the condition of the property. It's also important to understand your rights as a tenant.\n                                        </div>\n                                    </div>\n                                </div>\n                                                                                            <div class=\"faq-item\">\n                                    <div class=\"faq-question-wrapper\">\n                                        <button class=\"faq-question  collapsed \"\n                                                type=\"button\"\n                                                data-target=\"#faq-answer-4\"\n                                                aria-expanded=\"false\"\n                                                aria-controls=\"faq-answer-4\">\n                                            <span class=\"faq-question-text\">What are the benefits of renting versus buying?</span>\n                                            <span class=\"faq-icon\">\n                                                <span class=\"faq-icon-plus\">+</span>\n                                                <span class=\"faq-icon-minus\">−</span>\n                                            </span>\n                                        </button>\n                                    </div>\n                                    <div id=\"faq-answer-4\"\n                                         class=\"faq-answer \">\n                                        <div class=\"faq-answer-content\">\n                                            Renting offers flexibility and fewer maintenance responsibilities, while buying can provide long-term financial benefits and the freedom to customize your home. The decision depends on your financial situation, lifestyle, and future plans.\n                                        </div>\n                                    </div>\n                                </div>\n                                                                                            <div class=\"faq-item\">\n                                    <div class=\"faq-question-wrapper\">\n                                        <button class=\"faq-question  collapsed \"\n                                                type=\"button\"\n                                                data-target=\"#faq-answer-5\"\n                                                aria-expanded=\"false\"\n                                                aria-controls=\"faq-answer-5\">\n                                            <span class=\"faq-question-text\">What types of financing options are available for homebuyers?</span>\n                                            <span class=\"faq-icon\">\n                                                <span class=\"faq-icon-plus\">+</span>\n                                                <span class=\"faq-icon-minus\">−</span>\n                                            </span>\n                                        </button>\n                                    </div>\n                                    <div id=\"faq-answer-5\"\n                                         class=\"faq-answer \">\n                                        <div class=\"faq-answer-content\">\n                                            Common financing options include fixed-rate mortgages, adjustable-rate mortgages, FHA loans, VA loans, and USDA loans. Each has its own requirements and benefits.\n                                        </div>\n                                    </div>\n                                </div>\n                                                    </div>\n                    </div>\n\n                            </div>\n    </div>\n</section>\n",
        "location": "Diemen, Netherlands",
        "images": [
            "https://flex-home.botble.com/storage/properties/b4-1.jpg",
            "https://flex-home.botble.com/storage/properties/b3.jpg",
            "https://flex-home.botble.com/storage/properties/b5-1.jpg"
        ],
        "type": {
            "value": "rent",
            "label": "Rent"
        },
        "status": {
            "value": "renting",
            "label": "Renting"
        },
        "moderation_status": {
            "value": "approved",
            "label": "Approved"
        },
        "is_featured": 1,
        "featured_priority": 0,
        "number_bedroom": 3,
        "number_bathroom": 1,
        "number_floor": 2,
        "square": 90,
        "price": 2123,
        "price_formatted": "$2,123",
        "currency_id": 1,
        "currency": {
            "id": 1,
            "title": "USD",
            "symbol": "$",
            "is_prefix_symbol": true,
            "decimals": 0,
            "exchange_rate": 1,
            "is_default": true
        },
        "period": {
            "value": "month",
            "label": "Monthly"
        },
        "city_id": 3,
        "state_id": 1,
        "country_id": 1,
        "city": {
            "id": 3,
            "name": "Bakersfield"
        },
        "state": {
            "id": 1,
            "name": "California"
        },
        "country": {
            "id": 1,
            "name": "United States"
        },
        "latitude": "43.52876",
        "longitude": "-76.65882",
        "zip_code": null,
        "unique_id": null,
        "floor_plans": [
            {
                "name": {
                    "key": "name",
                    "value": "First Floor"
                },
                "bedrooms": {
                    "key": "bedrooms",
                    "value": "3"
                },
                "bathrooms": {
                    "key": "bathrooms",
                    "value": "2"
                },
                "image": {
                    "key": "image",
                    "value": "https://flex-home.botble.com/storage/properties/floor.png"
                }
            },
            {
                "name": {
                    "key": "name",
                    "value": "Second Floor"
                },
                "bedrooms": {
                    "key": "bedrooms",
                    "value": "2"
                },
                "bathrooms": {
                    "key": "bathrooms",
                    "value": "1"
                },
                "image": {
                    "key": "image",
                    "value": "https://flex-home.botble.com/storage/properties/floor.png"
                }
            }
        ],
        "expire_date": "2025-11-14T00:00:00.000000Z",
        "auto_renew": 0,
        "created_at": "2019-11-18T07:59:14.000000Z",
        "updated_at": "2025-09-30T15:56:44.000000Z",
        "url": "https://flex-home.botble.com/properties/apartment-muiderstraatweg-in-diemen",
        "slug": "apartment-muiderstraatweg-in-diemen",
        "categories": [
            {
                "id": 1,
                "name": "Apartment",
                "description": null,
                "status": {
                    "value": null,
                    "label": ""
                },
                "order": null,
                "is_default": null,
                "parent_id": null,
                "created_at": null,
                "updated_at": null,
                "url": "https://flex-home.botble.com/property-category/apartment",
                "slug": "apartment"
            }
        ]
    },
    "error": false,
    "message": null
}
 

Request      

GET api/v1/properties/id/{id}

Headers

Content-Type        

Example: application/json

Accept        

Example: application/json

URL Parameters

id   integer     

The ID of the property. Example: 16

List projects

Example request:
curl --request GET \
    --get "https://flex-home.botble.com/api/v1/projects?page=16&per_page=16&search=architecto&city_id=architecto&state_id=architecto&country_id=16&category_id=architecto&investor_id=architecto&min_price=architecto&max_price=architecto&is_featured=architecto&order=architecto&order_by=architecto" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "https://flex-home.botble.com/api/v1/projects"
);

const params = {
    "page": "16",
    "per_page": "16",
    "search": "architecto",
    "city_id": "architecto",
    "state_id": "architecto",
    "country_id": "16",
    "category_id": "architecto",
    "investor_id": "architecto",
    "min_price": "architecto",
    "max_price": "architecto",
    "is_featured": "architecto",
    "order": "architecto",
    "order_by": "architecto",
};
Object.keys(params)
    .forEach(key => url.searchParams.append(key, params[key]));

const headers = {
    "Content-Type": "application/json",
    "Accept": "application/json",
};

fetch(url, {
    method: "GET",
    headers,
}).then(response => response.json());

Example response (200):

Show headers
cache-control: no-cache, private
content-type: application/json
access-control-allow-origin: *
 

{
    "data": [],
    "links": {
        "first": "https://flex-home.botble.com/api/v1/projects?page=1",
        "last": "https://flex-home.botble.com/api/v1/projects?page=1",
        "prev": "https://flex-home.botble.com/api/v1/projects?page=15",
        "next": null
    },
    "meta": {
        "current_page": 16,
        "from": null,
        "last_page": 1,
        "links": [
            {
                "url": "https://flex-home.botble.com/api/v1/projects?page=15",
                "label": "&laquo; Previous",
                "page": 15,
                "active": false
            },
            {
                "url": "https://flex-home.botble.com/api/v1/projects?page=1",
                "label": "1",
                "page": 1,
                "active": false
            },
            {
                "url": null,
                "label": "Next &raquo;",
                "page": null,
                "active": false
            }
        ],
        "path": "https://flex-home.botble.com/api/v1/projects",
        "per_page": 16,
        "to": null,
        "total": 6
    },
    "error": false,
    "message": null
}
 

Request      

GET api/v1/projects

Headers

Content-Type        

Example: application/json

Accept        

Example: application/json

Query Parameters

page   integer  optional    

Current page of the collection. Default: 1 Example: 16

per_page   integer  optional    

Maximum number of items to be returned in result set. Default: 10 Example: 16

search   string  optional    

Limit results to those matching a string. Example: architecto

city_id   string  optional    

Filter by city ID. Example: architecto

state_id   string  optional    

Filter by state ID. Example: architecto

country_id   integer  optional    

Filter by country ID. Example: 16

category_id   string  optional    

Filter by category ID. Example: architecto

investor_id   string  optional    

Filter by investor ID. Example: architecto

min_price   string  optional    

Filter by minimum price. Example: architecto

max_price   string  optional    

Filter by maximum price. Example: architecto

is_featured   string  optional    

Filter by featured projects (1 or 0). Example: architecto

order   string  optional    

Order sort attribute ascending or descending. Default: desc. One of: asc, desc Example: architecto

order_by   string  optional    

Sort collection by object attribute. Default: created_at. One of: created_at, updated_at, name, price_from Example: architecto

Example request:
curl --request GET \
    --get "https://flex-home.botble.com/api/v1/projects/search" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --data "{
    \"q\": \"architecto\"
}"
const url = new URL(
    "https://flex-home.botble.com/api/v1/projects/search"
);

const headers = {
    "Content-Type": "application/json",
    "Accept": "application/json",
};

let body = {
    "q": "architecto"
};

fetch(url, {
    method: "GET",
    headers,
    body: JSON.stringify(body),
}).then(response => response.json());

Example response (200):

Show headers
cache-control: no-cache, private
content-type: application/json
access-control-allow-origin: *
 

{
    "error": false,
    "data": {
        "items": [
            {
                "id": 6,
                "name": "The Avila Apartments",
                "description": "Within the historical peninsula, there is a very special area where you will never find a similar one. Unique sea view with a historical texture of Istanbul. In the bustling city life, in the middle of all transportation possibilities. Large landscaping areas, cafes, shopping opportunities.",
                "location": "Singapore Island, Singapore",
                "images": [
                    "https://flex-home.botble.com/storage/properties/e1.jpg",
                    "https://flex-home.botble.com/storage/properties/e2.jpg",
                    "https://flex-home.botble.com/storage/properties/e3.jpg",
                    "https://flex-home.botble.com/storage/properties/e4.jpg",
                    "https://flex-home.botble.com/storage/properties/e5.jpg",
                    "https://flex-home.botble.com/storage/properties/e7.jpg",
                    "https://flex-home.botble.com/storage/properties/e8.jpg"
                ],
                "status": {
                    "value": "selling",
                    "label": "Selling"
                },
                "is_featured": true,
                "number_block": 2,
                "number_floor": 4,
                "number_flat": 125,
                "date_finish": "2019-11-19",
                "date_sell": "2019-03-11",
                "price_from": null,
                "price_from_formatted": null,
                "price_to": null,
                "price_to_formatted": null,
                "currency_id": 1,
                "currency": {
                    "id": 1,
                    "title": "USD",
                    "symbol": "$",
                    "is_prefix_symbol": true,
                    "decimals": 0,
                    "exchange_rate": 1,
                    "is_default": true
                },
                "city_id": 5,
                "state_id": 1,
                "country_id": 1,
                "city": {
                    "id": 5,
                    "name": "San Francisco"
                },
                "state": {
                    "id": 1,
                    "name": "California"
                },
                "country": {
                    "id": 1,
                    "name": "United States"
                },
                "latitude": "43.481307",
                "longitude": "-74.862851",
                "zip_code": null,
                "unique_id": null,
                "created_at": "2019-11-18T03:53:20.000000Z",
                "updated_at": "2025-07-12T01:23:49.000000Z",
                "url": "https://flex-home.botble.com/projects/the-avila-apartments",
                "slug": "the-avila-apartments"
            },
            {
                "id": 5,
                "name": "Aydos Forest Apartments",
                "description": "You will have a live site life with 90% occupancy; The clean air of Aydos Forest, the most important social facility of the region with 3,700 sqm which brings enjoyable social activities to your feet, and much more are waiting for you. You will live a life with nature thanks to the artificial lake and cherry trees in the project as",
                "location": "Sancaktepe/İstanbul, Turkey",
                "images": [
                    "https://flex-home.botble.com/storage/properties/q1.jpg",
                    "https://flex-home.botble.com/storage/properties/q2.jpg",
                    "https://flex-home.botble.com/storage/properties/q8.jpg",
                    "https://flex-home.botble.com/storage/properties/q7.jpg",
                    "https://flex-home.botble.com/storage/properties/q3.jpg",
                    "https://flex-home.botble.com/storage/properties/q6.jpg"
                ],
                "status": {
                    "value": "selling",
                    "label": "Selling"
                },
                "is_featured": true,
                "number_block": 4,
                "number_floor": 18,
                "number_flat": 1394,
                "date_finish": "2019-10-30",
                "date_sell": "2019-07-21",
                "price_from": null,
                "price_from_formatted": null,
                "price_to": null,
                "price_to_formatted": null,
                "currency_id": 1,
                "currency": {
                    "id": 1,
                    "title": "USD",
                    "symbol": "$",
                    "is_prefix_symbol": true,
                    "decimals": 0,
                    "exchange_rate": 1,
                    "is_default": true
                },
                "city_id": 3,
                "state_id": 1,
                "country_id": 1,
                "city": {
                    "id": 3,
                    "name": "Bakersfield"
                },
                "state": {
                    "id": 1,
                    "name": "California"
                },
                "country": {
                    "id": 1,
                    "name": "United States"
                },
                "latitude": "43.270016",
                "longitude": "-75.054121",
                "zip_code": null,
                "unique_id": null,
                "created_at": "2019-11-18T03:45:06.000000Z",
                "updated_at": "2025-07-12T01:23:49.000000Z",
                "url": "https://flex-home.botble.com/projects/aydos-forest-apartments",
                "slug": "aydos-forest-apartments"
            },
            {
                "id": 4,
                "name": "Aegean Villas",
                "description": "A very large area of 312.000sqm  has only 144 villas. Each villa’s garden is independent of one another and protects private life. There are 400 adult olive trees in the common area landscape. Strengthening of neighborly relations with common sharing points such as open air cinema, village coffee, market.",
                "location": "Büyükçekmece, İstanbul, Turkey",
                "images": [
                    "https://flex-home.botble.com/storage/properties/a5-1.jpg",
                    "https://flex-home.botble.com/storage/properties/a6-1.jpg",
                    "https://flex-home.botble.com/storage/properties/a7.jpg",
                    "https://flex-home.botble.com/storage/properties/a8.jpg",
                    "https://flex-home.botble.com/storage/properties/a10.jpg",
                    "https://flex-home.botble.com/storage/properties/a9.jpg"
                ],
                "status": {
                    "value": "selling",
                    "label": "Selling"
                },
                "is_featured": true,
                "number_block": 5,
                "number_floor": 2,
                "number_flat": 144,
                "date_finish": "2020-06-09",
                "date_sell": "2020-10-04",
                "price_from": null,
                "price_from_formatted": null,
                "price_to": null,
                "price_to_formatted": null,
                "currency_id": 1,
                "currency": {
                    "id": 1,
                    "title": "USD",
                    "symbol": "$",
                    "is_prefix_symbol": true,
                    "decimals": 0,
                    "exchange_rate": 1,
                    "is_default": true
                },
                "city_id": 2,
                "state_id": 1,
                "country_id": 1,
                "city": {
                    "id": 2,
                    "name": "Oakland"
                },
                "state": {
                    "id": 1,
                    "name": "California"
                },
                "country": {
                    "id": 1,
                    "name": "United States"
                },
                "latitude": "42.478281",
                "longitude": "-75.321856",
                "zip_code": null,
                "unique_id": null,
                "created_at": "2019-11-18T03:38:13.000000Z",
                "updated_at": "2025-07-12T01:23:49.000000Z",
                "url": "https://flex-home.botble.com/projects/aegean-villas",
                "slug": "aegean-villas"
            },
            {
                "id": 3,
                "name": "Mimaroba Paradise",
                "description": "A summerhouse in the center of the city. Remove the boundaries between you and the sea, you will be surrounded by blue sea. Everything you have imagined - from infinity pool, zen garden, gourmet restaurant to thematic playgrounds awaiting you. A unique design that makes luxury a habit, a wide variety of apartment plan options.",
                "location": "Texas, USA",
                "images": [
                    "https://flex-home.botble.com/storage/projects/13.jpg",
                    "https://flex-home.botble.com/storage/projects/12.jpg",
                    "https://flex-home.botble.com/storage/projects/11.jpg",
                    "https://flex-home.botble.com/storage/projects/14.jpg"
                ],
                "status": {
                    "value": "selling",
                    "label": "Selling"
                },
                "is_featured": true,
                "number_block": 2,
                "number_floor": 16,
                "number_flat": 327,
                "date_finish": "2020-06-09",
                "date_sell": "2019-09-10",
                "price_from": null,
                "price_from_formatted": null,
                "price_to": null,
                "price_to_formatted": null,
                "currency_id": 1,
                "currency": {
                    "id": 1,
                    "title": "USD",
                    "symbol": "$",
                    "is_prefix_symbol": true,
                    "decimals": 0,
                    "exchange_rate": 1,
                    "is_default": true
                },
                "city_id": 1,
                "state_id": 1,
                "country_id": 1,
                "city": {
                    "id": 1,
                    "name": "Alhambra"
                },
                "state": {
                    "id": 1,
                    "name": "California"
                },
                "country": {
                    "id": 1,
                    "name": "United States"
                },
                "latitude": "42.795156",
                "longitude": "-76.237441",
                "zip_code": null,
                "unique_id": null,
                "created_at": "2019-11-18T03:30:34.000000Z",
                "updated_at": "2025-07-12T01:23:49.000000Z",
                "url": "https://flex-home.botble.com/projects/mimaroba-paradise",
                "slug": "mimaroba-paradise"
            },
            {
                "id": 2,
                "name": "Osaka Heights",
                "description": "The homes come with all comfy amenities and facilities for a superior life. From the panoramic views, the rooftop swimming pool and the landscaped eco-balconies, beauty meets you at every step in Osaka Heights. Made for an exclusive few, Osaka Heights gives you the advantage of sharing a space with like-minded individuals.",
                "location": "Kirulapone, Colombo 06, Colombo, Sri Lanka",
                "images": [
                    "https://flex-home.botble.com/storage/projects/21.jpg",
                    "https://flex-home.botble.com/storage/projects/24.jpg",
                    "https://flex-home.botble.com/storage/projects/23.jpg",
                    "https://flex-home.botble.com/storage/projects/25.jpg",
                    "https://flex-home.botble.com/storage/projects/26.jpg",
                    "https://flex-home.botble.com/storage/projects/22.jpg"
                ],
                "status": {
                    "value": "selling",
                    "label": "Selling"
                },
                "is_featured": true,
                "number_block": 1,
                "number_floor": 15,
                "number_flat": 450,
                "date_finish": "2019-08-09",
                "date_sell": "2019-08-10",
                "price_from": null,
                "price_from_formatted": null,
                "price_to": null,
                "price_to_formatted": null,
                "currency_id": 1,
                "currency": {
                    "id": 1,
                    "title": "USD",
                    "symbol": "$",
                    "is_prefix_symbol": true,
                    "decimals": 0,
                    "exchange_rate": 1,
                    "is_default": true
                },
                "city_id": 3,
                "state_id": 1,
                "country_id": 1,
                "city": {
                    "id": 3,
                    "name": "Bakersfield"
                },
                "state": {
                    "id": 1,
                    "name": "California"
                },
                "country": {
                    "id": 1,
                    "name": "United States"
                },
                "latitude": "43.013638",
                "longitude": "-75.848066",
                "zip_code": null,
                "unique_id": null,
                "created_at": "2019-11-18T01:28:45.000000Z",
                "updated_at": "2025-07-12T01:23:49.000000Z",
                "url": "https://flex-home.botble.com/projects/osaka-heights",
                "slug": "osaka-heights"
            },
            {
                "id": 1,
                "name": "Walnut Park Apartments",
                "description": "Walnut Park is conveniently located on North Lamar Boulevard across from the 293-acre Walnut Creek Metropolitan Park and just south of Yager Lane near numerous shops and restaurants. Only 11 miles from downtown Austin, the heavily-wooded site borders Walnut Creek and offers residents inspiring views in an unparalleled, secluded community",
                "location": "Austin, Texas 78753, USA",
                "images": [
                    "https://flex-home.botble.com/storage/projects/1.jpg",
                    "https://flex-home.botble.com/storage/projects/5.jpg",
                    "https://flex-home.botble.com/storage/projects/3.jpg",
                    "https://flex-home.botble.com/storage/projects/2.jpg"
                ],
                "status": {
                    "value": "selling",
                    "label": "Selling"
                },
                "is_featured": true,
                "number_block": 4,
                "number_floor": 2,
                "number_flat": 50,
                "date_finish": "2019-11-10",
                "date_sell": "2019-03-11",
                "price_from": null,
                "price_from_formatted": null,
                "price_to": null,
                "price_to_formatted": null,
                "currency_id": 1,
                "currency": {
                    "id": 1,
                    "title": "USD",
                    "symbol": "$",
                    "is_prefix_symbol": true,
                    "decimals": 0,
                    "exchange_rate": 1,
                    "is_default": true
                },
                "city_id": 4,
                "state_id": 1,
                "country_id": 1,
                "city": {
                    "id": 4,
                    "name": "Anaheim"
                },
                "state": {
                    "id": 1,
                    "name": "California"
                },
                "country": {
                    "id": 1,
                    "name": "United States"
                },
                "latitude": "43.578848",
                "longitude": "-76.32197",
                "zip_code": null,
                "unique_id": null,
                "created_at": "2019-11-18T00:34:49.000000Z",
                "updated_at": "2025-07-12T01:23:49.000000Z",
                "url": "https://flex-home.botble.com/projects/walnut-park-apartments",
                "slug": "walnut-park-apartments"
            }
        ],
        "query": "architecto",
        "count": 6
    },
    "message": null
}
 

Get project filters

Example request:
curl --request GET \
    --get "https://flex-home.botble.com/api/v1/projects/filters?page=16&per_page=16&search=architecto&city_id=architecto&state_id=architecto&country_id=16&category_id=architecto&investor_id=architecto&min_price=architecto&max_price=architecto&is_featured=architecto&order=architecto&order_by=architecto" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "https://flex-home.botble.com/api/v1/projects/filters"
);

const params = {
    "page": "16",
    "per_page": "16",
    "search": "architecto",
    "city_id": "architecto",
    "state_id": "architecto",
    "country_id": "16",
    "category_id": "architecto",
    "investor_id": "architecto",
    "min_price": "architecto",
    "max_price": "architecto",
    "is_featured": "architecto",
    "order": "architecto",
    "order_by": "architecto",
};
Object.keys(params)
    .forEach(key => url.searchParams.append(key, params[key]));

const headers = {
    "Content-Type": "application/json",
    "Accept": "application/json",
};

fetch(url, {
    method: "GET",
    headers,
}).then(response => response.json());

Example response (200):

Show headers
cache-control: no-cache, private
content-type: application/json
access-control-allow-origin: *
 

{
    "data": [],
    "links": {
        "first": "https://flex-home.botble.com/api/v1/projects/filters?page=1",
        "last": "https://flex-home.botble.com/api/v1/projects/filters?page=1",
        "prev": "https://flex-home.botble.com/api/v1/projects/filters?page=15",
        "next": null
    },
    "meta": {
        "current_page": 16,
        "from": null,
        "last_page": 1,
        "links": [
            {
                "url": "https://flex-home.botble.com/api/v1/projects/filters?page=15",
                "label": "&laquo; Previous",
                "page": 15,
                "active": false
            },
            {
                "url": "https://flex-home.botble.com/api/v1/projects/filters?page=1",
                "label": "1",
                "page": 1,
                "active": false
            },
            {
                "url": null,
                "label": "Next &raquo;",
                "page": null,
                "active": false
            }
        ],
        "path": "https://flex-home.botble.com/api/v1/projects/filters",
        "per_page": 16,
        "to": null,
        "total": 6
    },
    "error": false,
    "message": null
}
 

Request      

GET api/v1/projects/filters

Headers

Content-Type        

Example: application/json

Accept        

Example: application/json

Query Parameters

page   integer  optional    

Current page of the collection. Default: 1 Example: 16

per_page   integer  optional    

Maximum number of items to be returned in result set. Default: 10 Example: 16

search   string  optional    

Limit results to those matching a string. Example: architecto

city_id   string  optional    

Filter by city ID. Example: architecto

state_id   string  optional    

Filter by state ID. Example: architecto

country_id   integer  optional    

Filter by country ID. Example: 16

category_id   string  optional    

Filter by category ID. Example: architecto

investor_id   string  optional    

Filter by investor ID. Example: architecto

min_price   string  optional    

Filter by minimum price. Example: architecto

max_price   string  optional    

Filter by maximum price. Example: architecto

is_featured   string  optional    

Filter by featured projects (1 or 0). Example: architecto

order   string  optional    

Order sort attribute ascending or descending. Default: desc. One of: asc, desc Example: architecto

order_by   string  optional    

Sort collection by object attribute. Default: created_at. One of: created_at, updated_at, name, price_from Example: architecto

Get project by slug

Example request:
curl --request GET \
    --get "https://flex-home.botble.com/api/v1/projects/architecto" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "https://flex-home.botble.com/api/v1/projects/architecto"
);

const headers = {
    "Content-Type": "application/json",
    "Accept": "application/json",
};

fetch(url, {
    method: "GET",
    headers,
}).then(response => response.json());

Example response (404):

Show headers
cache-control: no-cache, private
content-type: application/json
access-control-allow-origin: *
 

{
    "error": true,
    "data": null,
    "message": "Project not found"
}
 

Request      

GET api/v1/projects/{slug}

Headers

Content-Type        

Example: application/json

Accept        

Example: application/json

URL Parameters

slug   string     

The slug of the project. Example: architecto

Get project by ID

Example request:
curl --request GET \
    --get "https://flex-home.botble.com/api/v1/projects/id/16" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "https://flex-home.botble.com/api/v1/projects/id/16"
);

const headers = {
    "Content-Type": "application/json",
    "Accept": "application/json",
};

fetch(url, {
    method: "GET",
    headers,
}).then(response => response.json());

Example response (404):

Show headers
cache-control: no-cache, private
content-type: application/json
access-control-allow-origin: *
 

{
    "error": true,
    "data": null,
    "message": "Project not found"
}
 

Request      

GET api/v1/projects/id/{id}

Headers

Content-Type        

Example: application/json

Accept        

Example: application/json

URL Parameters

id   integer     

The ID of the project. Example: 16

Get properties of a project

Example request:
curl --request GET \
    --get "https://flex-home.botble.com/api/v1/projects/id/16/properties?page=16&per_page=16" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "https://flex-home.botble.com/api/v1/projects/id/16/properties"
);

const params = {
    "page": "16",
    "per_page": "16",
};
Object.keys(params)
    .forEach(key => url.searchParams.append(key, params[key]));

const headers = {
    "Content-Type": "application/json",
    "Accept": "application/json",
};

fetch(url, {
    method: "GET",
    headers,
}).then(response => response.json());

Example response (404):

Show headers
cache-control: no-cache, private
content-type: application/json
access-control-allow-origin: *
 

{
    "error": true,
    "data": null,
    "message": "Project not found"
}
 

Request      

GET api/v1/projects/id/{id}/properties

Headers

Content-Type        

Example: application/json

Accept        

Example: application/json

URL Parameters

id   integer     

The ID of the project. Example: 16

Query Parameters

page   integer  optional    

Current page of the collection. Default: 1 Example: 16

per_page   integer  optional    

Maximum number of items to be returned in result set. Default: 10 Example: 16

Get category by ID

Example request:
curl --request GET \
    --get "https://flex-home.botble.com/api/v1/categories/id/16" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "https://flex-home.botble.com/api/v1/categories/id/16"
);

const headers = {
    "Content-Type": "application/json",
    "Accept": "application/json",
};

fetch(url, {
    method: "GET",
    headers,
}).then(response => response.json());

Example response (404):

Show headers
cache-control: no-cache, private
content-type: application/json
access-control-allow-origin: *
 

{
    "error": true,
    "data": null,
    "message": "Category not found"
}
 

Request      

GET api/v1/categories/id/{id}

Headers

Content-Type        

Example: application/json

Accept        

Example: application/json

URL Parameters

id   integer     

The ID of the category. Example: 16

Get properties of a category

Example request:
curl --request GET \
    --get "https://flex-home.botble.com/api/v1/categories/id/16/properties?page=16&per_page=16" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "https://flex-home.botble.com/api/v1/categories/id/16/properties"
);

const params = {
    "page": "16",
    "per_page": "16",
};
Object.keys(params)
    .forEach(key => url.searchParams.append(key, params[key]));

const headers = {
    "Content-Type": "application/json",
    "Accept": "application/json",
};

fetch(url, {
    method: "GET",
    headers,
}).then(response => response.json());

Example response (404):

Show headers
cache-control: no-cache, private
content-type: application/json
access-control-allow-origin: *
 

{
    "error": true,
    "data": null,
    "message": "Category not found"
}
 

Request      

GET api/v1/categories/id/{id}/properties

Headers

Content-Type        

Example: application/json

Accept        

Example: application/json

URL Parameters

id   integer     

The ID of the category. Example: 16

Query Parameters

page   integer  optional    

Current page of the collection. Default: 1 Example: 16

per_page   integer  optional    

Maximum number of items to be returned in result set. Default: 10 Example: 16

List features

Example request:
curl --request GET \
    --get "https://flex-home.botble.com/api/v1/features?page=16&per_page=16&search=architecto&order=architecto&order_by=architecto" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "https://flex-home.botble.com/api/v1/features"
);

const params = {
    "page": "16",
    "per_page": "16",
    "search": "architecto",
    "order": "architecto",
    "order_by": "architecto",
};
Object.keys(params)
    .forEach(key => url.searchParams.append(key, params[key]));

const headers = {
    "Content-Type": "application/json",
    "Accept": "application/json",
};

fetch(url, {
    method: "GET",
    headers,
}).then(response => response.json());

Example response (200):

Show headers
cache-control: no-cache, private
content-type: application/json
access-control-allow-origin: *
 

{
    "data": [],
    "links": {
        "first": "https://flex-home.botble.com/api/v1/features?page=1",
        "last": "https://flex-home.botble.com/api/v1/features?page=1",
        "prev": "https://flex-home.botble.com/api/v1/features?page=15",
        "next": null
    },
    "meta": {
        "current_page": 16,
        "from": null,
        "last_page": 1,
        "links": [
            {
                "url": "https://flex-home.botble.com/api/v1/features?page=15",
                "label": "&laquo; Previous",
                "page": 15,
                "active": false
            },
            {
                "url": "https://flex-home.botble.com/api/v1/features?page=1",
                "label": "1",
                "page": 1,
                "active": false
            },
            {
                "url": null,
                "label": "Next &raquo;",
                "page": null,
                "active": false
            }
        ],
        "path": "https://flex-home.botble.com/api/v1/features",
        "per_page": 16,
        "to": null,
        "total": 12
    },
    "error": false,
    "message": null
}
 

Request      

GET api/v1/features

Headers

Content-Type        

Example: application/json

Accept        

Example: application/json

Query Parameters

page   integer  optional    

Current page of the collection. Default: 1 Example: 16

per_page   integer  optional    

Maximum number of items to be returned in result set. Default: 10 Example: 16

search   string  optional    

Limit results to those matching a string. Example: architecto

order   string  optional    

Order sort attribute ascending or descending. Default: asc. One of: asc, desc Example: architecto

order_by   string  optional    

Sort collection by object attribute. Default: name. One of: created_at, updated_at, name Example: architecto

Get all features (without pagination)

Example request:
curl --request GET \
    --get "https://flex-home.botble.com/api/v1/features/all?search=architecto&order=architecto&order_by=architecto" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "https://flex-home.botble.com/api/v1/features/all"
);

const params = {
    "search": "architecto",
    "order": "architecto",
    "order_by": "architecto",
};
Object.keys(params)
    .forEach(key => url.searchParams.append(key, params[key]));

const headers = {
    "Content-Type": "application/json",
    "Accept": "application/json",
};

fetch(url, {
    method: "GET",
    headers,
}).then(response => response.json());

Example response (200):

Show headers
cache-control: no-cache, private
content-type: application/json
access-control-allow-origin: *
 

{
    "data": [
        {
            "id": 1,
            "name": "Wifi",
            "icon": null,
            "status": "published",
            "created_at": null,
            "updated_at": null
        },
        {
            "id": 2,
            "name": "Parking",
            "icon": null,
            "status": "published",
            "created_at": null,
            "updated_at": null
        },
        {
            "id": 3,
            "name": "Swimming pool",
            "icon": null,
            "status": "published",
            "created_at": null,
            "updated_at": null
        },
        {
            "id": 4,
            "name": "Balcony",
            "icon": null,
            "status": "published",
            "created_at": null,
            "updated_at": null
        },
        {
            "id": 5,
            "name": "Garden",
            "icon": null,
            "status": "published",
            "created_at": null,
            "updated_at": null
        },
        {
            "id": 6,
            "name": "Security",
            "icon": null,
            "status": "published",
            "created_at": null,
            "updated_at": null
        },
        {
            "id": 7,
            "name": "Fitness center",
            "icon": null,
            "status": "published",
            "created_at": null,
            "updated_at": null
        },
        {
            "id": 8,
            "name": "Air Conditioning",
            "icon": null,
            "status": "published",
            "created_at": null,
            "updated_at": null
        },
        {
            "id": 9,
            "name": "Central Heating  ",
            "icon": null,
            "status": "published",
            "created_at": null,
            "updated_at": null
        },
        {
            "id": 10,
            "name": "Laundry Room",
            "icon": null,
            "status": "published",
            "created_at": null,
            "updated_at": null
        },
        {
            "id": 11,
            "name": "Pets Allow",
            "icon": null,
            "status": "published",
            "created_at": null,
            "updated_at": null
        },
        {
            "id": 12,
            "name": "Spa & Massage",
            "icon": null,
            "status": "published",
            "created_at": null,
            "updated_at": null
        }
    ],
    "error": false,
    "message": null
}
 

Request      

GET api/v1/features/all

Headers

Content-Type        

Example: application/json

Accept        

Example: application/json

Query Parameters

search   string  optional    

Limit results to those matching a string. Example: architecto

order   string  optional    

Order sort attribute ascending or descending. Default: asc. One of: asc, desc Example: architecto

order_by   string  optional    

Sort collection by object attribute. Default: name. One of: created_at, updated_at, name Example: architecto

Get feature by ID

Example request:
curl --request GET \
    --get "https://flex-home.botble.com/api/v1/features/16" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "https://flex-home.botble.com/api/v1/features/16"
);

const headers = {
    "Content-Type": "application/json",
    "Accept": "application/json",
};

fetch(url, {
    method: "GET",
    headers,
}).then(response => response.json());

Example response (404):

Show headers
cache-control: no-cache, private
content-type: application/json
access-control-allow-origin: *
 

{
    "error": true,
    "data": null,
    "message": "Feature not found"
}
 

Request      

GET api/v1/features/{id}

Headers

Content-Type        

Example: application/json

Accept        

Example: application/json

URL Parameters

id   integer     

The ID of the feature. Example: 16

List facilities

Example request:
curl --request GET \
    --get "https://flex-home.botble.com/api/v1/facilities?page=16&per_page=16&search=architecto&order=architecto&order_by=architecto" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "https://flex-home.botble.com/api/v1/facilities"
);

const params = {
    "page": "16",
    "per_page": "16",
    "search": "architecto",
    "order": "architecto",
    "order_by": "architecto",
};
Object.keys(params)
    .forEach(key => url.searchParams.append(key, params[key]));

const headers = {
    "Content-Type": "application/json",
    "Accept": "application/json",
};

fetch(url, {
    method: "GET",
    headers,
}).then(response => response.json());

Example response (200):

Show headers
cache-control: no-cache, private
content-type: application/json
access-control-allow-origin: *
 

{
    "data": [],
    "links": {
        "first": "https://flex-home.botble.com/api/v1/facilities?page=1",
        "last": "https://flex-home.botble.com/api/v1/facilities?page=1",
        "prev": "https://flex-home.botble.com/api/v1/facilities?page=15",
        "next": null
    },
    "meta": {
        "current_page": 16,
        "from": null,
        "last_page": 1,
        "links": [
            {
                "url": "https://flex-home.botble.com/api/v1/facilities?page=15",
                "label": "&laquo; Previous",
                "page": 15,
                "active": false
            },
            {
                "url": "https://flex-home.botble.com/api/v1/facilities?page=1",
                "label": "1",
                "page": 1,
                "active": false
            },
            {
                "url": null,
                "label": "Next &raquo;",
                "page": null,
                "active": false
            }
        ],
        "path": "https://flex-home.botble.com/api/v1/facilities",
        "per_page": 16,
        "to": null,
        "total": 11
    },
    "error": false,
    "message": null
}
 

Request      

GET api/v1/facilities

Headers

Content-Type        

Example: application/json

Accept        

Example: application/json

Query Parameters

page   integer  optional    

Current page of the collection. Default: 1 Example: 16

per_page   integer  optional    

Maximum number of items to be returned in result set. Default: 10 Example: 16

search   string  optional    

Limit results to those matching a string. Example: architecto

order   string  optional    

Order sort attribute ascending or descending. Default: asc. One of: asc, desc Example: architecto

order_by   string  optional    

Sort collection by object attribute. Default: name. One of: created_at, updated_at, name Example: architecto

Get all facilities (without pagination)

Example request:
curl --request GET \
    --get "https://flex-home.botble.com/api/v1/facilities/all?search=architecto&order=architecto&order_by=architecto" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "https://flex-home.botble.com/api/v1/facilities/all"
);

const params = {
    "search": "architecto",
    "order": "architecto",
    "order_by": "architecto",
};
Object.keys(params)
    .forEach(key => url.searchParams.append(key, params[key]));

const headers = {
    "Content-Type": "application/json",
    "Accept": "application/json",
};

fetch(url, {
    method: "GET",
    headers,
}).then(response => response.json());

Example response (200):

Show headers
cache-control: no-cache, private
content-type: application/json
access-control-allow-origin: *
 

{
    "data": [
        {
            "id": 1,
            "name": "Hospital",
            "icon": "far fa-hospital",
            "status": {
                "value": "published",
                "label": "Published"
            },
            "created_at": "2025-09-30T15:56:18.000000Z",
            "updated_at": "2025-09-30T15:56:18.000000Z"
        },
        {
            "id": 2,
            "name": "Super Market",
            "icon": "fas fa-cart-plus",
            "status": {
                "value": "published",
                "label": "Published"
            },
            "created_at": "2025-09-30T15:56:18.000000Z",
            "updated_at": "2025-09-30T15:56:18.000000Z"
        },
        {
            "id": 3,
            "name": "School",
            "icon": "fas fa-school",
            "status": {
                "value": "published",
                "label": "Published"
            },
            "created_at": "2025-09-30T15:56:18.000000Z",
            "updated_at": "2025-09-30T15:56:18.000000Z"
        },
        {
            "id": 4,
            "name": "Entertainment",
            "icon": "fas fa-hotel",
            "status": {
                "value": "published",
                "label": "Published"
            },
            "created_at": "2025-09-30T15:56:18.000000Z",
            "updated_at": "2025-09-30T15:56:18.000000Z"
        },
        {
            "id": 5,
            "name": "Pharmacy",
            "icon": "fas fa-prescription-bottle-alt",
            "status": {
                "value": "published",
                "label": "Published"
            },
            "created_at": "2025-09-30T15:56:18.000000Z",
            "updated_at": "2025-09-30T15:56:18.000000Z"
        },
        {
            "id": 6,
            "name": "Airport",
            "icon": "fas fa-plane-departure",
            "status": {
                "value": "published",
                "label": "Published"
            },
            "created_at": "2025-09-30T15:56:18.000000Z",
            "updated_at": "2025-09-30T15:56:18.000000Z"
        },
        {
            "id": 7,
            "name": "Railways",
            "icon": "fas fa-subway",
            "status": {
                "value": "published",
                "label": "Published"
            },
            "created_at": "2025-09-30T15:56:18.000000Z",
            "updated_at": "2025-09-30T15:56:18.000000Z"
        },
        {
            "id": 8,
            "name": "Bus Stop",
            "icon": "fas fa-bus",
            "status": {
                "value": "published",
                "label": "Published"
            },
            "created_at": "2025-09-30T15:56:18.000000Z",
            "updated_at": "2025-09-30T15:56:18.000000Z"
        },
        {
            "id": 9,
            "name": "Beach",
            "icon": "fas fa-umbrella-beach",
            "status": {
                "value": "published",
                "label": "Published"
            },
            "created_at": "2025-09-30T15:56:18.000000Z",
            "updated_at": "2025-09-30T15:56:18.000000Z"
        },
        {
            "id": 10,
            "name": "Mall",
            "icon": "fas fa-cart-plus",
            "status": {
                "value": "published",
                "label": "Published"
            },
            "created_at": "2025-09-30T15:56:18.000000Z",
            "updated_at": "2025-09-30T15:56:18.000000Z"
        },
        {
            "id": 11,
            "name": "Bank",
            "icon": "fas fa-university",
            "status": {
                "value": "published",
                "label": "Published"
            },
            "created_at": "2025-09-30T15:56:18.000000Z",
            "updated_at": "2025-09-30T15:56:18.000000Z"
        }
    ],
    "error": false,
    "message": null
}
 

Request      

GET api/v1/facilities/all

Headers

Content-Type        

Example: application/json

Accept        

Example: application/json

Query Parameters

search   string  optional    

Limit results to those matching a string. Example: architecto

order   string  optional    

Order sort attribute ascending or descending. Default: asc. One of: asc, desc Example: architecto

order_by   string  optional    

Sort collection by object attribute. Default: name. One of: created_at, updated_at, name Example: architecto

Get facility by ID

Example request:
curl --request GET \
    --get "https://flex-home.botble.com/api/v1/facilities/16" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "https://flex-home.botble.com/api/v1/facilities/16"
);

const headers = {
    "Content-Type": "application/json",
    "Accept": "application/json",
};

fetch(url, {
    method: "GET",
    headers,
}).then(response => response.json());

Example response (404):

Show headers
cache-control: no-cache, private
content-type: application/json
access-control-allow-origin: *
 

{
    "error": true,
    "data": null,
    "message": "Facility not found"
}
 

Request      

GET api/v1/facilities/{id}

Headers

Content-Type        

Example: application/json

Accept        

Example: application/json

URL Parameters

id   integer     

The ID of the facility. Example: 16

List agents/accounts

Example request:
curl --request GET \
    --get "https://flex-home.botble.com/api/v1/agents?page=16&per_page=16&search=architecto&is_featured=architecto&order=architecto&order_by=architecto" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "https://flex-home.botble.com/api/v1/agents"
);

const params = {
    "page": "16",
    "per_page": "16",
    "search": "architecto",
    "is_featured": "architecto",
    "order": "architecto",
    "order_by": "architecto",
};
Object.keys(params)
    .forEach(key => url.searchParams.append(key, params[key]));

const headers = {
    "Content-Type": "application/json",
    "Accept": "application/json",
};

fetch(url, {
    method: "GET",
    headers,
}).then(response => response.json());

Example response (200):

Show headers
cache-control: no-cache, private
content-type: application/json
access-control-allow-origin: *
 

{
    "data": [],
    "links": {
        "first": "https://flex-home.botble.com/api/v1/agents?page=1",
        "last": "https://flex-home.botble.com/api/v1/agents?page=1",
        "prev": "https://flex-home.botble.com/api/v1/agents?page=15",
        "next": null
    },
    "meta": {
        "current_page": 16,
        "from": null,
        "last_page": 1,
        "links": [
            {
                "url": "https://flex-home.botble.com/api/v1/agents?page=15",
                "label": "&laquo; Previous",
                "page": 15,
                "active": false
            },
            {
                "url": "https://flex-home.botble.com/api/v1/agents?page=1",
                "label": "1",
                "page": 1,
                "active": false
            },
            {
                "url": null,
                "label": "Next &raquo;",
                "page": null,
                "active": false
            }
        ],
        "path": "https://flex-home.botble.com/api/v1/agents",
        "per_page": 16,
        "to": null,
        "total": 6
    },
    "error": false,
    "message": null
}
 

Request      

GET api/v1/agents

Headers

Content-Type        

Example: application/json

Accept        

Example: application/json

Query Parameters

page   integer  optional    

Current page of the collection. Default: 1 Example: 16

per_page   integer  optional    

Maximum number of items to be returned in result set. Default: 10 Example: 16

search   string  optional    

Limit results to those matching a string. Example: architecto

is_featured   string  optional    

Filter by featured agents (1 or 0). Example: architecto

order   string  optional    

Order sort attribute ascending or descending. Default: desc. One of: asc, desc Example: architecto

order_by   string  optional    

Sort collection by object attribute. Default: created_at. One of: created_at, updated_at, first_name, last_name Example: architecto

Get account by ID

Example request:
curl --request GET \
    --get "https://flex-home.botble.com/api/v1/agents/16" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "https://flex-home.botble.com/api/v1/agents/16"
);

const headers = {
    "Content-Type": "application/json",
    "Accept": "application/json",
};

fetch(url, {
    method: "GET",
    headers,
}).then(response => response.json());

Example response (404):

Show headers
cache-control: no-cache, private
content-type: application/json
access-control-allow-origin: *
 

{
    "error": true,
    "data": null,
    "message": "Account not found"
}
 

Request      

GET api/v1/agents/{id}

Headers

Content-Type        

Example: application/json

Accept        

Example: application/json

URL Parameters

id   integer     

The ID of the account. Example: 16

Get properties of an account

Example request:
curl --request GET \
    --get "https://flex-home.botble.com/api/v1/agents/16/properties?page=16&per_page=16" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "https://flex-home.botble.com/api/v1/agents/16/properties"
);

const params = {
    "page": "16",
    "per_page": "16",
};
Object.keys(params)
    .forEach(key => url.searchParams.append(key, params[key]));

const headers = {
    "Content-Type": "application/json",
    "Accept": "application/json",
};

fetch(url, {
    method: "GET",
    headers,
}).then(response => response.json());

Example response (404):

Show headers
cache-control: no-cache, private
content-type: application/json
access-control-allow-origin: *
 

{
    "error": true,
    "data": null,
    "message": "Account not found"
}
 

Request      

GET api/v1/agents/{id}/properties

Headers

Content-Type        

Example: application/json

Accept        

Example: application/json

URL Parameters

id   integer     

The ID of the account. Example: 16

Query Parameters

page   integer  optional    

Current page of the collection. Default: 1 Example: 16

per_page   integer  optional    

Maximum number of items to be returned in result set. Default: 10 Example: 16

Get projects of an account

Example request:
curl --request GET \
    --get "https://flex-home.botble.com/api/v1/agents/16/projects?page=16&per_page=16" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "https://flex-home.botble.com/api/v1/agents/16/projects"
);

const params = {
    "page": "16",
    "per_page": "16",
};
Object.keys(params)
    .forEach(key => url.searchParams.append(key, params[key]));

const headers = {
    "Content-Type": "application/json",
    "Accept": "application/json",
};

fetch(url, {
    method: "GET",
    headers,
}).then(response => response.json());

Example response (404):

Show headers
cache-control: no-cache, private
content-type: application/json
access-control-allow-origin: *
 

{
    "error": true,
    "data": null,
    "message": "Account not found"
}
 

Request      

GET api/v1/agents/{id}/projects

Headers

Content-Type        

Example: application/json

Accept        

Example: application/json

URL Parameters

id   integer     

The ID of the account. Example: 16

Query Parameters

page   integer  optional    

Current page of the collection. Default: 1 Example: 16

per_page   integer  optional    

Maximum number of items to be returned in result set. Default: 10 Example: 16

List reviews for a property

Example request:
curl --request GET \
    --get "https://flex-home.botble.com/api/v1/properties/16/reviews?page=16&per_page=16&order=architecto&order_by=architecto" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "https://flex-home.botble.com/api/v1/properties/16/reviews"
);

const params = {
    "page": "16",
    "per_page": "16",
    "order": "architecto",
    "order_by": "architecto",
};
Object.keys(params)
    .forEach(key => url.searchParams.append(key, params[key]));

const headers = {
    "Content-Type": "application/json",
    "Accept": "application/json",
};

fetch(url, {
    method: "GET",
    headers,
}).then(response => response.json());

Example response (404):

Show headers
cache-control: no-cache, private
content-type: application/json
access-control-allow-origin: *
 

{
    "error": true,
    "data": null,
    "message": "Property not found"
}
 

Request      

GET api/v1/properties/{property_id}/reviews

Headers

Content-Type        

Example: application/json

Accept        

Example: application/json

URL Parameters

property_id   integer     

The ID of the property. Example: 16

Query Parameters

page   integer  optional    

Current page of the collection. Default: 1 Example: 16

per_page   integer  optional    

Maximum number of items to be returned in result set. Default: 10 Example: 16

order   string  optional    

Order sort attribute ascending or descending. Default: desc. One of: asc, desc Example: architecto

order_by   string  optional    

Sort collection by object attribute. Default: created_at. One of: created_at, updated_at, star Example: architecto

Get review by ID

Example request:
curl --request GET \
    --get "https://flex-home.botble.com/api/v1/reviews/16" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "https://flex-home.botble.com/api/v1/reviews/16"
);

const headers = {
    "Content-Type": "application/json",
    "Accept": "application/json",
};

fetch(url, {
    method: "GET",
    headers,
}).then(response => response.json());

Example response (404):

Show headers
cache-control: no-cache, private
content-type: application/json
access-control-allow-origin: *
 

{
    "error": true,
    "data": null,
    "message": "Review not found"
}
 

Request      

GET api/v1/reviews/{id}

Headers

Content-Type        

Example: application/json

Accept        

Example: application/json

URL Parameters

id   integer     

The ID of the review. Example: 16

Send consultation request

Example request:
curl --request POST \
    "https://flex-home.botble.com/api/v1/consults" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --data "{
    \"name\": \"John Doe\",
    \"email\": \"[email protected]\",
    \"phone\": \"+1234567890\",
    \"content\": \"I\'m interested in this property.\",
    \"type\": \"property\",
    \"data_id\": 1,
    \"consult_custom_fields\": [
        \"architecto\"
    ]
}"
const url = new URL(
    "https://flex-home.botble.com/api/v1/consults"
);

const headers = {
    "Content-Type": "application/json",
    "Accept": "application/json",
};

let body = {
    "name": "John Doe",
    "email": "[email protected]",
    "phone": "+1234567890",
    "content": "I'm interested in this property.",
    "type": "property",
    "data_id": 1,
    "consult_custom_fields": [
        "architecto"
    ]
};

fetch(url, {
    method: "POST",
    headers,
    body: JSON.stringify(body),
}).then(response => response.json());

Request      

POST api/v1/consults

Headers

Content-Type        

Example: application/json

Accept        

Example: application/json

Body Parameters

name   string     

The name of the person. Example: John Doe

email   string     

The email address. Example: [email protected]

phone   string  optional    

The phone number. Example: +1234567890

content   string     

The consultation message. Example: I'm interested in this property.

type   string     

The type of consultation (property or project). Example: property

data_id   integer     

The ID of the property or project. Example: 1

consult_custom_fields   string[]  optional    

Custom field values.

Get consultation custom fields

Example request:
curl --request GET \
    --get "https://flex-home.botble.com/api/v1/consults/custom-fields" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "https://flex-home.botble.com/api/v1/consults/custom-fields"
);

const headers = {
    "Content-Type": "application/json",
    "Accept": "application/json",
};

fetch(url, {
    method: "GET",
    headers,
}).then(response => response.json());

Example response (200):

Show headers
cache-control: no-cache, private
content-type: application/json
access-control-allow-origin: *
 

{
    "data": [],
    "error": false,
    "message": null
}
 

Request      

GET api/v1/consults/custom-fields

Headers

Content-Type        

Example: application/json

Accept        

Example: application/json

Get account profile

requires authentication

Example request:
curl --request GET \
    --get "https://flex-home.botble.com/api/v1/account/profile" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "https://flex-home.botble.com/api/v1/account/profile"
);

const headers = {
    "Content-Type": "application/json",
    "Accept": "application/json",
};

fetch(url, {
    method: "GET",
    headers,
}).then(response => response.json());

Example response (401):

Show headers
cache-control: no-cache, private
content-type: application/json
access-control-allow-origin: *
 

{
    "error": true,
    "data": null,
    "message": "Unauthenticated."
}
 

Request      

GET api/v1/account/profile

Headers

Content-Type        

Example: application/json

Accept        

Example: application/json

Create a review for a property

requires authentication

Example request:
curl --request POST \
    "https://flex-home.botble.com/api/v1/properties/16/reviews" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --data "{
    \"reviewable_type\": \"Botble\\\\RealEstate\\\\Models\\\\Property\",
    \"star\": 5,
    \"content\": \"This is an excellent property with great amenities.\",
    \"comment\": \"Great property!\"
}"
const url = new URL(
    "https://flex-home.botble.com/api/v1/properties/16/reviews"
);

const headers = {
    "Content-Type": "application/json",
    "Accept": "application/json",
};

let body = {
    "reviewable_type": "Botble\\RealEstate\\Models\\Property",
    "star": 5,
    "content": "This is an excellent property with great amenities.",
    "comment": "Great property!"
};

fetch(url, {
    method: "POST",
    headers,
    body: JSON.stringify(body),
}).then(response => response.json());

Request      

POST api/v1/properties/{property_id}/reviews

Headers

Content-Type        

Example: application/json

Accept        

Example: application/json

URL Parameters

property_id   integer     

The ID of the property. Example: 16

Body Parameters

reviewable_type   string  optional    

Type of reviewable entity (Property or Project). Example: Botble\RealEstate\Models\Property

Must be one of:
  • Botble\RealEstate\Models\Property
  • Botble\RealEstate\Models\Project
star   integer     

The rating (1-5). Example: 5

content   string     

Content of the review. Must be at least 4 characters. Must not be greater than 500 characters. Example: This is an excellent property with great amenities.

comment   string     

The review comment. Example: Great property!

Update a review

requires authentication

Example request:
curl --request PUT \
    "https://flex-home.botble.com/api/v1/reviews/16" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --data "{
    \"reviewable_type\": \"Botble\\\\RealEstate\\\\Models\\\\Property\",
    \"star\": 5,
    \"content\": \"This is an excellent property with great amenities.\",
    \"comment\": \"Updated review!\"
}"
const url = new URL(
    "https://flex-home.botble.com/api/v1/reviews/16"
);

const headers = {
    "Content-Type": "application/json",
    "Accept": "application/json",
};

let body = {
    "reviewable_type": "Botble\\RealEstate\\Models\\Property",
    "star": 5,
    "content": "This is an excellent property with great amenities.",
    "comment": "Updated review!"
};

fetch(url, {
    method: "PUT",
    headers,
    body: JSON.stringify(body),
}).then(response => response.json());

Request      

PUT api/v1/reviews/{id}

Headers

Content-Type        

Example: application/json

Accept        

Example: application/json

URL Parameters

id   integer     

The ID of the review. Example: 16

Body Parameters

reviewable_type   string  optional    

Type of reviewable entity (Property or Project). Example: Botble\RealEstate\Models\Property

Must be one of:
  • Botble\RealEstate\Models\Property
  • Botble\RealEstate\Models\Project
star   integer     

The rating (1-5). Example: 5

content   string     

Content of the review. Must be at least 4 characters. Must not be greater than 500 characters. Example: This is an excellent property with great amenities.

comment   string     

The review comment. Example: Updated review!

Delete a review

requires authentication

Example request:
curl --request DELETE \
    "https://flex-home.botble.com/api/v1/reviews/16" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "https://flex-home.botble.com/api/v1/reviews/16"
);

const headers = {
    "Content-Type": "application/json",
    "Accept": "application/json",
};

fetch(url, {
    method: "DELETE",
    headers,
}).then(response => response.json());

Request      

DELETE api/v1/reviews/{id}

Headers

Content-Type        

Example: application/json

Accept        

Example: application/json

URL Parameters

id   integer     

The ID of the review. Example: 16

Social Login

Apple login

Example request:
curl --request POST \
    "https://flex-home.botble.com/api/v1/auth/apple" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --data "{
    \"identityToken\": \"architecto\",
    \"guard\": \"architecto\"
}"
const url = new URL(
    "https://flex-home.botble.com/api/v1/auth/apple"
);

const headers = {
    "Content-Type": "application/json",
    "Accept": "application/json",
};

let body = {
    "identityToken": "architecto",
    "guard": "architecto"
};

fetch(url, {
    method: "POST",
    headers,
    body: JSON.stringify(body),
}).then(response => response.json());

Example response (200):


{
    "error": false,
    "data": {
        "token": "1|abc123def456...",
        "user": {
            "id": 1,
            "name": "John Doe",
            "email": "[email protected]"
        }
    },
    "message": "Login successful"
}
 

Example response (400):


{
    "error": true,
    "message": "Invalid Apple token"
}
 

Example response (400):


{
    "error": true,
    "message": "Cannot login, no email or Apple ID provided!"
}
 

Request      

POST api/v1/auth/apple

Headers

Content-Type        

Example: application/json

Accept        

Example: application/json

Body Parameters

identityToken   string     

The Apple identity token received from Apple Sign-In. Example: architecto

guard   string  optional    

optional The guard to use for authentication (default: web). Example: architecto

Google login

Example request:
curl --request POST \
    "https://flex-home.botble.com/api/v1/auth/google" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --data "{
    \"identityToken\": \"architecto\",
    \"guard\": \"architecto\"
}"
const url = new URL(
    "https://flex-home.botble.com/api/v1/auth/google"
);

const headers = {
    "Content-Type": "application/json",
    "Accept": "application/json",
};

let body = {
    "identityToken": "architecto",
    "guard": "architecto"
};

fetch(url, {
    method: "POST",
    headers,
    body: JSON.stringify(body),
}).then(response => response.json());

Example response (200):


{
    "error": false,
    "data": {
        "token": "1|abc123def456...",
        "user": {
            "id": 1,
            "name": "John Doe",
            "email": "[email protected]"
        }
    },
    "message": "Login successful"
}
 

Example response (400):


{
    "error": true,
    "message": "Invalid Google token"
}
 

Example response (400):


{
    "error": true,
    "message": "Google authentication is not properly configured"
}
 

Request      

POST api/v1/auth/google

Headers

Content-Type        

Example: application/json

Accept        

Example: application/json

Body Parameters

identityToken   string     

The Google identity token received from Google Sign-In. Example: architecto

guard   string  optional    

optional The guard to use for authentication (default: web). Example: architecto

Facebook login

Example request:
curl --request POST \
    "https://flex-home.botble.com/api/v1/auth/facebook" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --data "{
    \"accessToken\": \"architecto\",
    \"guard\": \"architecto\"
}"
const url = new URL(
    "https://flex-home.botble.com/api/v1/auth/facebook"
);

const headers = {
    "Content-Type": "application/json",
    "Accept": "application/json",
};

let body = {
    "accessToken": "architecto",
    "guard": "architecto"
};

fetch(url, {
    method: "POST",
    headers,
    body: JSON.stringify(body),
}).then(response => response.json());

Example response (200):


{
    "error": false,
    "data": {
        "token": "1|abc123def456...",
        "user": {
            "id": 1,
            "name": "John Doe",
            "email": "[email protected]"
        }
    },
    "message": "Login successful"
}
 

Example response (400):


{
    "error": true,
    "message": "Invalid Facebook token"
}
 

Example response (400):


{
    "error": true,
    "message": "Facebook authentication is not properly configured"
}
 

Request      

POST api/v1/auth/facebook

Headers

Content-Type        

Example: application/json

Accept        

Example: application/json

Body Parameters

accessToken   string     

The Facebook access token received from Facebook Login. Example: architecto

guard   string  optional    

optional The guard to use for authentication (default: web). Example: architecto

X (Twitter) login

Example request:
curl --request POST \
    "https://flex-home.botble.com/api/v1/auth/x" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --data "{
    \"accessToken\": \"architecto\",
    \"guard\": \"architecto\"
}"
const url = new URL(
    "https://flex-home.botble.com/api/v1/auth/x"
);

const headers = {
    "Content-Type": "application/json",
    "Accept": "application/json",
};

let body = {
    "accessToken": "architecto",
    "guard": "architecto"
};

fetch(url, {
    method: "POST",
    headers,
    body: JSON.stringify(body),
}).then(response => response.json());

Example response (200):


{
    "error": false,
    "data": {
        "token": "1|abc123def456...",
        "user": {
            "id": 1,
            "name": "John Doe",
            "email": "[email protected]"
        }
    },
    "message": "Login successful"
}
 

Example response (400):


{
    "error": true,
    "message": "Invalid X (Twitter) token"
}
 

Example response (400):


{
    "error": true,
    "message": "X (Twitter) authentication is not properly configured"
}
 

Request      

POST api/v1/auth/x

Headers

Content-Type        

Example: application/json

Accept        

Example: application/json

Body Parameters

accessToken   string     

The X (Twitter) access token received from X OAuth. Example: architecto

guard   string  optional    

optional The guard to use for authentication (default: web). Example: architecto