Search properties
curl --request GET \
--url https://api.majarrah.io/v1/properties \
--header 'Authorization: Bearer <token>'import requests
url = "https://api.majarrah.io/v1/properties"
headers = {"Authorization": "Bearer <token>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
fetch('https://api.majarrah.io/v1/properties', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.majarrah.io/v1/properties",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://api.majarrah.io/v1/properties"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("Authorization", "Bearer <token>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://api.majarrah.io/v1/properties")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.majarrah.io/v1/properties")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["Authorization"] = 'Bearer <token>'
response = http.request(request)
puts response.read_body{
"properties": [
{
"id": "<string>",
"title_en": "<string>",
"title_ar": "<string>",
"property_type": "<string>",
"price_sar": 123,
"area_sqm": 123,
"bedrooms": 123,
"bathrooms": 123,
"city_en": "<string>",
"district_en": "<string>",
"image_urls": [
{}
],
"ai_bullets_en": [
{}
],
"listed_at": {}
}
],
"count": 123,
"offset": 123
}Properties
Search properties
Full-text and filter search over Majarrah’s published property catalog.
GET
/
v1
/
properties
Search properties
curl --request GET \
--url https://api.majarrah.io/v1/properties \
--header 'Authorization: Bearer <token>'import requests
url = "https://api.majarrah.io/v1/properties"
headers = {"Authorization": "Bearer <token>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
fetch('https://api.majarrah.io/v1/properties', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.majarrah.io/v1/properties",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://api.majarrah.io/v1/properties"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("Authorization", "Bearer <token>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://api.majarrah.io/v1/properties")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.majarrah.io/v1/properties")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["Authorization"] = 'Bearer <token>'
response = http.request(request)
puts response.read_body{
"properties": [
{
"id": "<string>",
"title_en": "<string>",
"title_ar": "<string>",
"property_type": "<string>",
"price_sar": 123,
"area_sqm": 123,
"bedrooms": 123,
"bathrooms": 123,
"city_en": "<string>",
"district_en": "<string>",
"image_urls": [
{}
],
"ai_bullets_en": [
{}
],
"listed_at": {}
}
],
"count": 123,
"offset": 123
}Returns published, moderation-approved listings that match the given filters. Public — no authentication required.
Query parameters
string
Free-text query on title, description, city, and district.
string
City name in Arabic or English. Case-insensitive.
string
District name in Arabic or English.
number
Minimum price in SAR (inclusive).
number
Maximum price in SAR (inclusive).
integer
Minimum bedrooms.
integer
Maximum bedrooms.
number
Minimum area in square meters.
number
Maximum area in square meters.
integer
default:"20"
Results per page (1-50).
integer
default:"0"
Starting offset for pagination.
Response
array
integer
Number of results returned (up to
limit).integer
Echoed offset for pagination.
Example
curl "https://api.majarrah.io/v1/properties?city=Riyadh&max_price_sar=1000000&limit=5"
{
"properties": [
{
"id": "e39a8b2b-...",
"title_en": "3-bedroom villa in Al Yasmin",
"price_sar": 580000,
"area_sqm": 265,
"bedrooms": 3,
"bathrooms": 3,
"city_en": "Riyadh",
"district_en": "Al Yasmin",
"ai_bullets_en": ["Priced below district median", "Warranties included"]
}
],
"count": 1,
"offset": 0
}
Was this page helpful?