REST API reference

Bayut API

13 endpoints for Bayut. Each one is a POST with a JSON body, called with your API key.

Base URL
https://cotlet.dev/api/v1/bayut
Connects with
Your own Bayut Profolio agent account; you enter the sign-in code yourself
Integration page
Bayut
Bayut Endpoints
Endpoint Access Description
list_listings read Your listings from Manage Listings with status, quality score and badges, for Bayut or dubizzle.
get_listing read One listing: details, photos, floor plan, quality score and Checked and TruCheck badges.
get_listing_insights read Impressions, clicks and leads per listing, with a filter for low performing listings.
list_leads read Leads from Reports, Leads by channel, with the listing each one asked about.
get_lead read One lead with the contact details Profolio shows for its channel and the listing asked about.
export_leads read The Excel file Profolio exports from Reports, Leads, as a download link.
get_traffic_report read Top locations by impressions and overall listing performance across Bayut and dubizzle.
get_credits read Your Bayut Credits balance as Manage Listings shows it.
get_market_insights read Most searched communities and buildings, average rent and sale prices and the areas with the highest ROI.
get_transactions read Last sold transactions in Dubai from the Dubai Land Department, as in Transaction Insights.
assign_floor_plan write Link a floor plan from your uploads to a listing, as the floor plan icon does in Profolio.
request_trucheck write Submit up to 5 photos of a Checked property to request TruCheck validation.
apply_boost write Apply a Bayut boost (Signature, Hot, Property of the Week) or a dubizzle boost (Refresh, Featured) to a listing.

POST https://cotlet.dev/api/v1/bayut/list_listings

Lists your listings as Manage Listings shows them, for Bayut or for dubizzle. Each item carries the quality score colour, the Checked and TruCheck badges and whether a floor plan is waiting to be assigned. Pages hold up to 100 listings; pass next_cursor back as cursor for the next page.

Parameters

Parameters: list_listings
NameTypeDescription
platform enum bayut or dubizzle. Default: bayut.
limit integer 1 to 100. Default: 25.
cursor string Next page cursor from the previous call.

Request

cURL
curl -X POST https://cotlet.dev/api/v1/bayut/list_listings \
  -H "Authorization: Bearer $COTLET_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"platform":"bayut","limit":100}'
Python
result = client.call("bayut", "list_listings", {"platform":"bayut","limit":100})
Node.js
const result = await cotlet.call('bayut', 'list_listings', {"platform":"bayut","limit":100});
CLI
cotlet call bayut list_listings --data '{"platform":"bayut","limit":100}'

Example response

{
  "listings": [
    {
      "listing_id": "DM-2214",
      "platform": "bayut",
      "title": "2BR in Dubai Marina, marina view",
      "quality_score": "orange",
      "badges": [
        "checked"
      ],
      "floor_plan_waiting": true
    },
    {
      "listing_id": "DM-2290",
      "platform": "bayut",
      "title": "Studio in JLT, furnished",
      "quality_score": "green",
      "badges": [
        "checked"
      ],
      "floor_plan_waiting": false
    }
  ],
  "next_cursor": null
}

POST https://cotlet.dev/api/v1/bayut/get_listing

Returns one listing with its price, purpose, photos, assigned floor plan, quality score and the badges it has today. Use it to check whether a TruCheck request went through. Read only.

Parameters

Parameters: get_listing
NameTypeDescription
listing_id required string Listing ID or your reference number, from list_listings.

Request

cURL
curl -X POST https://cotlet.dev/api/v1/bayut/get_listing \
  -H "Authorization: Bearer $COTLET_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"listing_id":"listing_8c41d2"}'
Python
result = client.call("bayut", "get_listing", {"listing_id":"listing_8c41d2"})
Node.js
const result = await cotlet.call('bayut', 'get_listing', {"listing_id":"listing_8c41d2"});
CLI
cotlet call bayut get_listing --data '{"listing_id":"listing_8c41d2"}'

Example response

{
  "listing_id": "DM-2290",
  "platform": "bayut",
  "title": "Studio in JLT, furnished",
  "purpose": "rent",
  "price_aed": 62000,
  "photos": 14,
  "floor_plan": "assigned",
  "quality_score": "green",
  "badges": [
    "checked"
  ]
}

POST https://cotlet.dev/api/v1/bayut/get_listing_insights

Returns impressions, clicks and leads for each listing, as Listing Insights shows them for Bayut. Low performing means a lower click-through rate than similar listings on Bayut. Filters combine, and the listing ID filter accepts your reference number.

Parameters

Parameters: get_listing_insights
NameTypeDescription
low_performing_only boolean Only listings with a lower click-through rate than similar listings.
location string Community or building name.
status string Listing status as shown in Profolio.
purpose enum sale or rent. Default: both.
category string Property category as shown in Profolio.
reference string Your reference number or listing ID.
user string Only listings of this user.
cursor string Next page cursor from the previous call.

Request

cURL
curl -X POST https://cotlet.dev/api/v1/bayut/get_listing_insights \
  -H "Authorization: Bearer $COTLET_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"low_performing_only":true,"purpose":"rent","location":"Jumeirah Lake Towers"}'
Python
result = client.call("bayut", "get_listing_insights", {"low_performing_only":True,"purpose":"rent","location":"Jumeirah Lake Towers"})
Node.js
const result = await cotlet.call('bayut', 'get_listing_insights', {"low_performing_only":true,"purpose":"rent","location":"Jumeirah Lake Towers"});
CLI
cotlet call bayut get_listing_insights --data '{"low_performing_only":true,"purpose":"rent","location":"Jumeirah Lake Towers"}'

Example response

{
  "listings": [
    {
      "listing_id": "DM-2214",
      "location": "Dubai Marina",
      "purpose": "sale",
      "impressions": 1840,
      "clicks": 21,
      "leads": 1,
      "low_performing": true
    },
    {
      "listing_id": "DM-2290",
      "location": "JLT",
      "purpose": "rent",
      "impressions": 960,
      "clicks": 40,
      "leads": 3,
      "low_performing": false
    }
  ],
  "next_cursor": null
}

List leads

read

POST https://cotlet.dev/api/v1/bayut/list_leads

Lists leads from all five channels Profolio reports: email, sms, phone, whatsapp and chat. Each lead names the listing of interest and the time it arrived. Pass lead_id to get_lead for the contact details. Pages hold up to 100 leads.

Parameters

Parameters: list_leads
NameTypeDescription
channel enum email, sms, phone, whatsapp or chat. Default: all.
since datetime Only leads received after this time.
listing_id string Only leads for this listing.
limit integer 1 to 100. Default: 50.
cursor string Next page cursor from the previous call.

Request

cURL
curl -X POST https://cotlet.dev/api/v1/bayut/list_leads \
  -H "Authorization: Bearer $COTLET_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"since":"2026-10-11T04:00:00Z","limit":100}'
Python
result = client.call("bayut", "list_leads", {"since":"2026-10-11T04:00:00Z","limit":100})
Node.js
const result = await cotlet.call('bayut', 'list_leads', {"since":"2026-10-11T04:00:00Z","limit":100});
CLI
cotlet call bayut list_leads --data '{"since":"2026-10-11T04:00:00Z","limit":100}'

Example response

{
  "leads": [
    {
      "lead_id": "ld_40a1",
      "channel": "whatsapp",
      "listing_id": "DM-2214",
      "received_at": "2026-10-10T14:22:00Z"
    },
    {
      "lead_id": "ld_40a7",
      "channel": "whatsapp",
      "listing_id": "DM-2290",
      "received_at": "2026-10-10T18:05:00Z"
    }
  ],
  "next_cursor": null
}

Get lead

read

POST https://cotlet.dev/api/v1/bayut/get_lead

Returns one lead. What it holds depends on the channel: the email address for email leads, the enquiry text for SMS leads, the phone number and the call recording for phone leads, and the message. Read only.

Parameters

Parameters: get_lead
NameTypeDescription
lead_id required string Lead ID from list_leads.

Request

cURL
curl -X POST https://cotlet.dev/api/v1/bayut/get_lead \
  -H "Authorization: Bearer $COTLET_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"lead_id":"lead_8c41d2"}'
Python
result = client.call("bayut", "get_lead", {"lead_id":"lead_8c41d2"})
Node.js
const result = await cotlet.call('bayut', 'get_lead', {"lead_id":"lead_8c41d2"});
CLI
cotlet call bayut get_lead --data '{"lead_id":"lead_8c41d2"}'

Example response

{
  "lead_id": "ld_40a1",
  "channel": "whatsapp",
  "listing_id": "DM-2214",
  "name": "Sample Buyer",
  "phone": "+971500000000",
  "message": "Is the unit still available for viewing this week?",
  "received_at": "2026-10-10T14:22:00Z"
}

POST https://cotlet.dev/api/v1/bayut/export_leads

Runs the export option at the top right of Reports, Leads and returns the Excel file as a download link. Pass a channel to export one channel only. Read only: nothing in Profolio changes.

Parameters

Parameters: export_leads
NameTypeDescription
channel enum email, sms, phone, whatsapp or chat. Default: all.

Request

cURL
curl -X POST https://cotlet.dev/api/v1/bayut/export_leads \
  -H "Authorization: Bearer $COTLET_API_KEY"
Python
result = client.call("bayut", "export_leads")
Node.js
const result = await cotlet.call('bayut', 'export_leads');
CLI
cotlet call bayut export_leads

Example response

{
  "channel": "whatsapp",
  "file": "bayut-leads.xlsx",
  "download_url": "https://files.cotlet.example/exports/bayut-leads.xlsx",
  "rows": 2
}

POST https://cotlet.dev/api/v1/bayut/get_traffic_report

Returns the Traffic report from Reports: the top locations by impressions and the overall performance of your listings, for Bayut and dubizzle. Read only.

Parameters

No parameters.

Request

cURL
curl -X POST https://cotlet.dev/api/v1/bayut/get_traffic_report \
  -H "Authorization: Bearer $COTLET_API_KEY"
Python
result = client.call("bayut", "get_traffic_report")
Node.js
const result = await cotlet.call('bayut', 'get_traffic_report');
CLI
cotlet call bayut get_traffic_report

Example response

{
  "top_locations": [
    {
      "location": "Dubai Marina",
      "impressions": 5210
    },
    {
      "location": "JLT",
      "impressions": 3180
    }
  ],
  "overall": {
    "impressions": 8390,
    "clicks": 144,
    "leads": 11
  }
}

POST https://cotlet.dev/api/v1/bayut/get_credits

Returns the Bayut Credits balance shown in Manage Listings. Read only.

Parameters

No parameters.

Request

cURL
curl -X POST https://cotlet.dev/api/v1/bayut/get_credits \
  -H "Authorization: Bearer $COTLET_API_KEY"
Python
result = client.call("bayut", "get_credits")
Node.js
const result = await cotlet.call('bayut', 'get_credits');
CLI
cotlet call bayut get_credits

Example response

{
  "bayut_credits": 120
}

POST https://cotlet.dev/api/v1/bayut/get_market_insights

Returns Market Insights for Dubai or Abu Dhabi: the most searched communities, sub-communities and buildings, the average rent and sale prices, and the areas with the highest ROI. Read only.

Parameters

Parameters: get_market_insights
NameTypeDescription
city required enum dubai or abu_dhabi.

Request

cURL
curl -X POST https://cotlet.dev/api/v1/bayut/get_market_insights \
  -H "Authorization: Bearer $COTLET_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"city":"dubai"}'
Python
result = client.call("bayut", "get_market_insights", {"city":"dubai"})
Node.js
const result = await cotlet.call('bayut', 'get_market_insights', {"city":"dubai"});
CLI
cotlet call bayut get_market_insights --data '{"city":"dubai"}'

Example response

{
  "city": "dubai",
  "most_searched": [
    {
      "community": "Dubai Marina",
      "type": "community"
    },
    {
      "community": "Business Bay",
      "type": "community"
    }
  ],
  "average_prices_aed": {
    "rent": 118000,
    "sale": 1950000
  },
  "highest_roi": [
    {
      "community": "Jumeirah Village Circle",
      "roi_percent": 7.4
    }
  ]
}

POST https://cotlet.dev/api/v1/bayut/get_transactions

Returns last sold transaction data from the Dubai Land Department, as BayutPro shows it in Transactions. Only agencies registered in Dubai have this section. Filter by location, transaction type, time period, property type and bedrooms. Read only.

Parameters

Parameters: get_transactions
NameTypeDescription
location string Community or building name.
transaction_type string As the Transactions filter offers it.
period string Time period as the Transactions filter offers it.
property_type string e.g. apartment, villa.
bedrooms integer Number of bedrooms.
cursor string Next page cursor from the previous call.

Request

cURL
curl -X POST https://cotlet.dev/api/v1/bayut/get_transactions \
  -H "Authorization: Bearer $COTLET_API_KEY"
Python
result = client.call("bayut", "get_transactions")
Node.js
const result = await cotlet.call('bayut', 'get_transactions');
CLI
cotlet call bayut get_transactions

Example response

{
  "transactions": [
    {
      "location": "Dubai Marina",
      "property_type": "apartment",
      "bedrooms": 2,
      "price_aed": 2150000,
      "date": "2026-09-28"
    }
  ],
  "next_cursor": null
}

Assign floor plan

write Confirm

POST https://cotlet.dev/api/v1/bayut/assign_floor_plan

Assigns a floor plan from the uploads section to one listing, the same step as clicking the floor plan icon in Profolio. The icon turns green once the plan is linked, and Bayut requires a floor plan for a perfect quality score. The floor plan becomes visible on the live listing. By default you confirm each call; you can switch that off for this tool.

Parameters

Parameters: assign_floor_plan
NameTypeDescription
listing_id required string Listing ID or your reference number, from list_listings.
floor_plan_id required string Floor plan from the uploads section of Profolio.

Request

cURL
curl -X POST https://cotlet.dev/api/v1/bayut/assign_floor_plan \
  -H "Authorization: Bearer $COTLET_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"listing_id":"DM-2214","floor_plan_id":"fp_3302"}'
Python
result = client.call("bayut", "assign_floor_plan", {"listing_id":"DM-2214","floor_plan_id":"fp_3302"})
Node.js
const result = await cotlet.call('bayut', 'assign_floor_plan', {"listing_id":"DM-2214","floor_plan_id":"fp_3302"});
CLI
cotlet call bayut assign_floor_plan --data '{"listing_id":"DM-2214","floor_plan_id":"fp_3302"}'

Example response

{
  "listing_id": "DM-2214",
  "floor_plan_id": "fp_3302",
  "status": "assigned"
}

Request TruCheck

write Confirm

POST https://cotlet.dev/api/v1/bayut/request_trucheck

Uploads up to 5 photos of a Checked property and submits them to request TruCheck validation, as the multiple photo upload in BayutPro does. Bayut recommends clear photos that show the unit number and an inside view. Bayut's moderation team reviews the submission, so the call returns "submitted"; check the badge later with get_listing. By default you confirm each call; you can switch that off for this tool.

Parameters

Parameters: request_trucheck
NameTypeDescription
listing_id required string Listing ID or your reference number, from list_listings.
photo_urls required string[] Up to 5 photo URLs.

Request

cURL
curl -X POST https://cotlet.dev/api/v1/bayut/request_trucheck \
  -H "Authorization: Bearer $COTLET_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"listing_id":"listing_8c41d2","photo_urls":["https://example.com"]}'
Python
result = client.call("bayut", "request_trucheck", {"listing_id":"listing_8c41d2","photo_urls":["https://example.com"]})
Node.js
const result = await cotlet.call('bayut', 'request_trucheck', {"listing_id":"listing_8c41d2","photo_urls":["https://example.com"]});
CLI
cotlet call bayut request_trucheck --data '{"listing_id":"listing_8c41d2","photo_urls":["https://example.com"]}'

Example response

{
  "listing_id": "DM-2290",
  "photos": 2,
  "status": "submitted"
}

Apply boost

write Confirm

POST https://cotlet.dev/api/v1/bayut/apply_boost

Applies one boost product to one listing, as the boost products in Profolio do. Bayut offers Signature, Hot and Property of the Week; dubizzle offers Refresh and Featured. Check get_credits first. By default you confirm each call; you can switch that off for this tool.

Parameters

Parameters: apply_boost
NameTypeDescription
listing_id required string Listing ID or your reference number, from list_listings.
product required enum signature, hot or property_of_the_week on Bayut; refresh or featured on dubizzle.

Request

cURL
curl -X POST https://cotlet.dev/api/v1/bayut/apply_boost \
  -H "Authorization: Bearer $COTLET_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"listing_id":"listing_8c41d2","product":"signature"}'
Python
result = client.call("bayut", "apply_boost", {"listing_id":"listing_8c41d2","product":"signature"})
Node.js
const result = await cotlet.call('bayut', 'apply_boost', {"listing_id":"listing_8c41d2","product":"signature"});
CLI
cotlet call bayut apply_boost --data '{"listing_id":"listing_8c41d2","product":"signature"}'

Example response

{
  "listing_id": "DM-2214",
  "platform": "bayut",
  "product": "hot",
  "status": "applied"
}