Download OpenAPI specification:
Property Finder Enterprise API Gateway.
Property Finder provides a collection of APIs that enable you to integrate with our various products and services. Our APIs use JSON for request and response bodies and employ standard HTTP response codes. You can consume the APIs directly using any HTTP or REST library.
For any additional support or questions related to the integration, please contact us at integration.support@propertyfinder.ae.
This API is intended strictly for server-to-server communication.
The following sections cover below mentioned topics:
When working with the API, you need to pass an access token in the Authorization header of all your requests.
This will be in the form of a Bearer token, for example: Bearer <ACCESS_TOKEN>
To obtain the token, you will need OAuth 2.0 credentials. Your OAuth 2.0 credentials consist of an API Key and an API Secret (corresponding to OAuth 2.0 client ID and client secret).
To get your OAuth 2.0 credentials, open the PF Expert application, and log in. Once you are logged in, navigate to the API Credentials
section under the Developer Resources tab in the left sidebar. From here, you can generate a new API key and API secret. Be sure to use the type as API Integration.
You can exchange these for an access token by calling the Issue JWT Token Endpoint. You can pass the API key and API secret in the request body.
API Key : Your unique client identifier on PF Expert.API Secret : Your client secret, used for authentication when requesting an access token.
curl --location 'https://atlas.propertyfinder.com/v1/auth/token' \
--header 'Content-Type: application/json' \
--header 'Accept: application/json' \
--data
'
{
"apiKey":"<API_KEY>",
"apiSecret":"<API_SECRET>"
}
'
The token server will return a Bearer accessToken in JSON Web Token (JWT) format which you should use in the Authorization header of your API requests.
{
"accessToken": "<ACCESS_TOKEN>",
"expiresIn": 1800,
"tokenType": "Bearer"
}
curl --location 'https://atlas.propertyfinder.com/v1/users?page=1&perPage=15' \
--header 'Accept: application/json' \
--header 'Authorization: Bearer <ACCESS_TOKEN>'
Your access token will be valid for the duration (in seconds) indicated by the expiresIn field in the response. When it expires, you'll need to request a new one.
Currently, an issued access token will expire in 30 minutes. Once a token expires, you must request a new one. No refresh token flow is supported in this integration.
If you attempt to access a protected resource without valid authorization you will receive a 401 Unauthorized or 403 Forbidden HTTP error.
HTTP/1.1 401 Unauthorized
Content-Type: application/json
{
"detail": "access denied (decision id: 5593a6df-2c67-4891-bd0a-83f3edfe9b14)",
"title": "Unauthorized",
"type": "AUTHENTICATION"
}
Enterprise API keys are generated in PF Expert > Developer Resources and provide authenticated access to the PF API. API keys support scope-based authorization and enforced expiration to control access and manage key lifecycle.
The following scopes are enabled by default and cannot be disabled:
compliances:readlisting_verification:full_accesslocations:readprojects:readwebhooks:full_accessThe following scopes can be enabled or disabled based on integration requirements:
users:read, users:full_accesslistings:read, listings:full_accessleads:readcredits:readstatistics:readroles:read• Each API endpoint requires a minimum scope. • Required scopes are documented at both:
The minimum scope access required to access each endpoint is listed below. Scope requirements are also documented at the individual endpoint level.
| Name | Method | Endpoint | Scope Required |
|---|---|---|---|
| Issue JWT Token | POST | /v1/auth/token |
No scope required |
| Create User | POST | /v1/users |
users:full_access |
| Search Users | GET | /v1/users |
users:read |
| Update Private Profile | PATCH | /v1/users/{id} |
users:full_access |
| Update Public Profile | PATCH | /v1/public-profiles/{id} |
users:full_access |
| Submit Verification Request | POST | /v1/public-profiles/{id}/submit-verification |
users:full_access |
| Fetch Roles | GET | /v1/roles |
roles:read |
| Creates a New Listing | POST | /v1/listings |
listings:full_access |
| Search Listings | GET | /v1/listings |
listings:read |
| Updates an Existing Listing | PUT | /v1/listings/{id} |
listings:full_access |
| Deletes a Listing | DELETE | /v1/listings/{id} |
listings:full_access |
| Publish Listing | POST | /v1/listings/{id}/publish |
listings:full_access |
| Unpublish Listing | POST | /v1/listings/{id}/unpublish |
listings:full_access |
| Get Listing Publish Price | GET | /v1/listings/{id}/publish/prices |
listings:read |
| Upgrade Listing | POST | /v1/listings/{id}/upgrades |
listings:full_access |
| Available Upgrades | GET | /v1/listings/{id}/upgrades |
listings:read |
| Enable RNPM | POST | /v1/listings/{id}/rnpm/enable |
listings:full_access |
| Revoke RNPM | POST | /v1/listings/{id}/rnpm/revoke |
listings:full_access |
| Fetch Leads | GET | /v1/leads |
leads:read |
| Get Credit Balance | GET | /v1/credits/balance |
credits:read |
| Get Transaction History | GET | /v1/credits/transactions |
credits:read |
| Get Permit by Number & License | GET | /v1/compliances/{permitNumber}/{licenseNumber} |
compliances:read |
| Listing Verification Submissions | GET | /v1/listing-verifications |
listing_verification:full_access |
| Submit Listing Verification | POST | /v1/listing-verifications |
listing_verification:full_access |
| Resubmit Listing Submission | POST | /v1/listing-verifications/{submissionId}/resubmit |
listing_verification:full_access |
| Listing Eligibility Check | POST | /v1/listing-verifications/eligibility-check |
listing_verification:full_access |
| Locations List | GET | /v1/locations |
locations:read |
| Get Project Details | GET | /v1/projects/{id} |
projects:read |
| Get Public Profile Statistics | GET | /v1/stats/public-profiles |
statistics:read |
| List Events | GET | /v1/webhooks |
webhooks:full_access |
| Subscribe to Event | POST | /v1/webhooks |
webhooks:full_access |
| Delete Event Subscription | DELETE | /v1/webhooks/{eventId} |
webhooks:full_access |
When subscribing to webhook events, additional scope requirements apply based on the event type:
Required Scope by Event Type:
| Event Category | Event Types | Required Scope |
|---|---|---|
| Listings events | listing.published, listing.unpublished, listing.action |
listings:read |
| Leads events | lead.created, lead.updated, lead.assigned |
leads:read |
| Users events | user.created, user.updated, user.deleted, user.activated, user.deactivated |
users:read |
| Public Profile events | publicProfile.verification.approved, publicProfile.verification.rejected |
users:read |
If you attempt to access an endpoint or event type without the required scope, you will receive a 403 Forbidden HTTP error:
HTTP/1.1 403 Forbidden
Content-Type: application/json
{
"detail": "action not allowed (decision id: 212c6af7-a651-462e-8250-2139c1c83ee3)",
"title": "Forbidden",
"type": "AUTHORIZATION"
}
To ensure fair use and maintain high availability of our APIs, we enforce rate limiting on all requests made to our endpoints.
Unless otherwise specified, all clients are subject to the following default limits:
| Request Type | Limit | Example Operations |
|---|---|---|
| Issue JWT Token endpoint | 60 requests per minute | Issue JWT token |
| All other endpoints | 650 requests per minute | Create user, Search Listings, etc. |
Note: The rate limits are applied per IP address and per client. Other factors may also be considered.
If you exceed your allotted rate limit: You will receive a 429 Too Many Requests HTTP response. The request can then be safely retried after some time. Example:
HTTP/1.1 429 Too Many Requests
When uploading images for listings or other resources, please ensure your images meet the following technical requirements to ensure optimal display quality and prevent processing issues.
The following image formats are supported:
image/jpeg)image/png)image/webp)Images outside this range may fail to upload or process correctly.
Supported color spaces:
Not supported:
Important: CMYK color space is NOT supported. Images using CMYK may appear oversaturated or display incorrect colors when shown on the Property Finder website. Please convert CMYK images to sRGB before uploading to ensure accurate color representation.
Recommended aspect ratio:
Maximum resolution:
Images with higher resolutions will be automatically resized to fit within these dimensions while maintaining aspect ratio.
If you upload custom watermarks, please ensure they meet the following specifications:
Every listing must be associated with a Public Profile representing the identity of a PF Expert user responsible for the listing, as displayed publicly on the Property Finder website. Public profiles are associated with PF Expert users, and can be retrieved using the [GET] /v1/users endpoint.
Every listing must be associated with a valid Location from Property Finder's location tree.
Every listing must include at least one image that meets our Image Requirements.
The list of accepted amenities depends on both the Property Type and Category of the listing.
The listing creation process is split into two steps:
Obtain Public Profile Id
Call [GET] /v1/users to retrieve available users and their public profiles. select the appropriate publicProfile.id.
{
"publicProfile": {
"id": 216582,
...
}
...
}
Obtain Location ID
Call [GET] /v1/locations?search=Marina to retrieve the valid location and obtain the correct id.
{
"data": [
{
"coordinates": {
"lat": 25.078367,
"lng": 55.14041
},
"id": 50,
"name": "Dubai Marina",
...
}
]
}
Create Listing (Draft Mode)
Call ([POST] /v1/listings) to create a new listing in draft state, providing the required data including publicProfileId and locationId. The response will return the newly created listingId.
(Optional) Get Publishing Price
Call [GET] /v1/listings/{id}/publish/prices to retrieve the price to publish the listing.
Publish Listing
Call [POST] /v1/listings/{id}/publish to publish the listing and make it publicly available on the Property Finder website.
Listing Publish Flow
Note: Listing publishing is an asynchronous process.
A200 OKresponse only confirms that the request was received, not that the listing was successfully published.
Recommended Flow:
POST request to publish the listing by calling the Publish Listing Endpoint.200 OK response (request accepted).Common Pitfall:
200 OK response. missing listings issues.The following table shows how field names differ between the UI and the API for Dubai and ADREC (Abu Dhabi) contexts:
| PF Expert Label | API Field Name | Context |
|---|---|---|
| Real Estate Company License Number | issuingClientLicenseNumber |
Dubai |
| RERA Permit Number | listingAdvertisementNumber |
Dubai |
| Broker License Number | issuingClientLicenseNumber |
ADREC (Abu Dhabi) |
| ADREC Permit Number | listingAdvertisementNumber |
ADREC (Abu Dhabi) |
To ensure compliance with the Dubai Land Department's (DLD) regulations, particularly under the DLD Strict Adherence initiative, it's imperative that all property listings on Property Finder accurately reflect the details registered with the DLD. This includes critical information such as price, property type, and location.
To facilitate this, our Enterprise API provides a structured workflow that mandates the retrieval of official permit details before creating or updating any listing.
permitTypepermitNumberlicenseNumber (company license number)From the compliance response, extract data[].property.listingType.
This value defines the official property classification and must be mapped to a valid type when creating a listing.
| DLD Listing Type | Allowed Listing Type Values |
|---|---|
| Unit | Apartment, Duplex, Full Floor, Half Floor, Penthouse, Hotel Apartment |
| Villa | Villa, Townhouse, Bungalow |
| Building | Compound, Whole Building, Bulk Units, Labor Camp, Office space, Retail, Shop, Showroom, Warehouse, Factory, Business Center, Coworking spaces, Staff Accommodation |
| Land | Land, Farm, Villa, Townhouse, Bungalow, Whole Building |
If DLD listingType = "Unit", valid listing type values include: "Apartment", "Duplex", "Penthouse", etc.
From the [GET] /v1/compliances/{permitNumber}/{licenseNumber} response, extract data[].property.saleType.
This value indicates the market type of the property (primary or secondary market) and should be used to determine the listing's projectStatus field.
projectStatus can be selected| DLD saleType | projectStatus values |
|---|---|
| Primary | off_plan_primary, completed_primary |
| Secondary | off_plan, completed |
| "" (empty) | Any (off_plan, off_plan_primary, completed, completed_primary) |
If DLD saleType = "Primary" and property is under construction, set projectStatus to off_plan_primary.
If DLD saleType = "Secondary" and property is ready, set projectStatus to completed.
If DLD saleType = "" (empty), you may select any appropriate projectStatus based on the property's actual state.
GET /v1/compliances/ endpoint to retrieve the latest permit details and then update your listing accordingly. In Abu Dhabi, compliance is handled under the Abu Dhabi Real Estate Center (ADREC).
ADREC enforces the presence and validity of the ADREC permit before listings can go live.
This indicates the offering type and must align with ADREC Permit Type
| ADREC Permit Type | listing category |
listing price.type |
|---|---|---|
| Sale | sale |
sale |
| Rent | rent |
Rental type (e.g., rent, yearly, monthly, weekly, daily) |
If ADREC Permit Type = "Sale", the listing offering type must be sale.
category from the ADREC permit Permit Type, and keep them in sync when creating or updating the listing| Category | Allowed Property Types | Allowed Amenities |
|---|---|---|
| commercial | farm, land | No amenities allowed |
| commercial | bulk-rent-unit, bulk-sale-unit, business-center, co-working-space, factory, full-floor, half-floor, labor-camp, office-space, retail, shop, show-room, staff-accommodation, villa, warehouse, whole-building | shared-gym, covered-parking, networked, shared-pool, dining-in-building, conference-room, lobby-in-building, vastu-compliant |
| residential | land | No amenities allowed |
| residential | apartment, bulk-rent-unit, bulk-sale-unit, bungalow, compound, duplex, full-floor, half-floor, hotel-apartment, penthouse, townhouse, villa, whole-building | central-ac, built-in-wardrobes, kitchen-appliances, security, concierge, maid-service, balcony, private-gym, shared-gym, private-jacuzzi, shared-spa, covered-parking, maids-room, study, childrens-play-area, pets-allowed, barbecue-area, shared-pool, childrens-pool, private-garden, private-pool, view-of-water, view-of-landmark, walk-in-closet, lobby-in-building, vastu-compliant |
| Category | Allowed Property Types | Allowed Amenities |
|---|---|---|
| commercial | farm, land | No amenities allowed |
| commercial | bulk-rent-unit, bulk-sale-unit, cafeteria, clinic, co-working-space, factory, full-floor, half-floor, hotel-apartment, villa, medical-facility, office-space, restaurant, retail, shop, show-room, staff-accommodation, villa, warehouse, whole-building | shared-gym, covered-parking, networked, dining-in-building, conference-room, lobby-in-building |
| residential | land | No amenities allowed |
| residential | apartment, bulk-rent-unit, bulk-sale-unit, bungalow, cabin, chalet, duplex, full-floor, half-floor, hotel-apartment, villa, palace, penthouse, roof, townhouse, twin-house, villa, whole-building | central-ac, built-in-wardrobes, kitchen-appliances, security, balcony, shared-gym, shared-spa, covered-parking, maids-room, study, shared-pool, childrens-pool, private-garden, private-pool, view-of-water, view-of-landmark, walk-in-closet, lobby-in-building |
| Category | Allowed Property Types | Allowed Amenities |
|---|---|---|
| commercial | land | No amenities allowed |
| commercial | bulk-rent-unit, bulk-sale-unit, hotel-apartment, labor-camp, medical-facility, office-space, retail, shop, show-room, staff-accommodation, warehouse, whole-building | central-ac, security, balcony, shared-gym, covered-parking, networked, shared-pool, private-garden, private-pool, view-of-water, dining-in-building, conference-room, lobby-in-building |
| residential | land | No amenities allowed |
| residential | apartment, bulk-rent-unit, bulk-sale-unit, bungalow, chalet, compound, duplex, hotel-apartment, penthouse, townhouse, villa, whole-building | central-ac, built-in-wardrobes, kitchen-appliances, security, concierge, maid-service, balcony, private-gym, shared-gym, private-jacuzzi, shared-spa, covered-parking, maids-room, study, childrens-play-area, pets-allowed, barbecue-area, shared-pool, childrens-pool, private-garden, private-pool, view-of-water, view-of-landmark, walk-in-closet, lobby-in-building |
| Category | Allowed Property Types | Allowed Amenities |
|---|---|---|
| commercial | factory, office-space, shop, show-room, warehouse, whole-building | central-ac, security, balcony, shared-gym, covered-parking, networked, view-of-water, view-of-landmark, dining-in-building, conference-room, lobby-in-building, electricity, waters, sanitation, no-services, fixed-phone, fibre-optics, flood-drainage |
| commercial | farm, land | electricity, waters, sanitation, no-services, fixed-phone, fibre-optics, flood-drainage |
| residential | apartment, chalet, compound, full-floor, rest-house, villa, whole-building | central-ac, built-in-wardrobes, kitchen-appliances, security, concierge, private-gym, shared-gym, private-jacuzzi, shared-spa, covered-parking, maids-room, barbecue-area, shared-pool, childrens-pool, private-garden, private-pool, view-of-water, walk-in-closet, lobby-in-building, electricity, waters, sanitation, no-services, fixed-phone, fibre-optics, flood-drainage |
| residential | farm, land | electricity, waters, sanitation, no-services, fixed-phone, fibre-optics, flood-drainage |
| Category | Allowed Property Types | Allowed Amenities |
|---|---|---|
| commercial | land | No amenities allowed |
| commercial | bulk-rent-unit, bulk-sale-unit, labor-camp, office-space, retail, shop, show-room, staff-accommodation, villa, warehouse, whole-building | central-ac, security, balcony, shared-gym, covered-parking, networked, shared-pool, private-garden, private-pool, view-of-water, dining-in-building, conference-room, lobby-in-building |
| residential | land | No amenities allowed |
| residential | apartment, bulk-rent-unit, bulk-sale-unit, compound, duplex, hotel-apartment, penthouse, townhouse, villa, whole-building | central-ac, built-in-wardrobes, kitchen-appliances, security, concierge, maid-service, balcony, private-gym, shared-gym, private-jacuzzi, shared-spa, covered-parking, maids-room, study, childrens-play-area, pets-allowed, barbecue-area, shared-pool, childrens-pool, private-garden, private-pool, view-of-water, view-of-landmark, walk-in-closet, lobby-in-building |
GET /v1/listingsPOST /v1/listingsPUT /v1/listings/{id}POST /v1/listings/{id}/rnpm/enablePOST /v1/listings/{id}/rnpm/revokeGET /v1/listings/{id}/upgradesGET /v1/listings/{id}/publish/pricesPOST /v1/listingsPUT /v1/listings/{id}GET /v1/listingsPOST /v1/listings!WARNING! removed the request property 'media/images/items/large'!WARNING! removed the request property 'media/images/items/medium'!WARNING! removed the request property 'media/images/items/original/height'!WARNING! removed the request property 'media/images/items/original/width'!WARNING! removed the request property 'media/images/items/thumbnail'!WARNING! removed the request property 'media/images/items/watermarked'PUT /v1/listings/{id}!WARNING! removed the request property 'media/images/items/large'!WARNING! removed the request property 'media/images/items/medium'!WARNING! removed the request property 'media/images/items/original/height'!WARNING! removed the request property 'media/images/items/original/width'!WARNING! removed the request property 'media/images/items/thumbnail'!WARNING! removed the request property 'media/images/items/watermarked'GET /v1/userscallTracking field in the User response is now deprecated and will always return nullPOST /v1/webhookslisting.action webhook eventpending, dispute_created, expiredRESOLVED, ACTION_TIMEOUT, DISPUTE_ACCEPTED, DISPUTE_REJECTED, DANGLING_PARENTlisting_unpublish, revalidate_permittype field must be listing.actionGET /v1/listings!WARNING! added the new '21' enum value to the 'results/items/bedrooms' response property for the response status '200'!WARNING! added the new '21' enum value to the 'results/items/compliance/regaResponse/bedrooms' response property for the response status '200'!WARNING! added the new '22' enum value to the 'results/items/bedrooms' response property for the response status '200'!WARNING! added the new '22' enum value to the 'results/items/compliance/regaResponse/bedrooms' response property for the response status '200'!WARNING! added the new '23' enum value to the 'results/items/bedrooms' response property for the response status '200'!WARNING! added the new '23' enum value to the 'results/items/compliance/regaResponse/bedrooms' response property for the response status '200'!WARNING! added the new '24' enum value to the 'results/items/bedrooms' response property for the response status '200'!WARNING! added the new '24' enum value to the 'results/items/compliance/regaResponse/bedrooms' response property for the response status '200'!WARNING! added the new '25' enum value to the 'results/items/bedrooms' response property for the response status '200'!WARNING! added the new '25' enum value to the 'results/items/compliance/regaResponse/bedrooms' response property for the response status '200'!WARNING! added the new '26' enum value to the 'results/items/bedrooms' response property for the response status '200'!WARNING! added the new '26' enum value to the 'results/items/compliance/regaResponse/bedrooms' response property for the response status '200'!WARNING! added the new '27' enum value to the 'results/items/bedrooms' response property for the response status '200'!WARNING! added the new '27' enum value to the 'results/items/compliance/regaResponse/bedrooms' response property for the response status '200'!WARNING! added the new '28' enum value to the 'results/items/bedrooms' response property for the response status '200'!WARNING! added the new '28' enum value to the 'results/items/compliance/regaResponse/bedrooms' response property for the response status '200'!WARNING! added the new '29' enum value to the 'results/items/bedrooms' response property for the response status '200'!WARNING! added the new '29' enum value to the 'results/items/compliance/regaResponse/bedrooms' response property for the response status '200'!WARNING! added the new '30' enum value to the 'results/items/bedrooms' response property for the response status '200'!WARNING! added the new '30' enum value to the 'results/items/compliance/regaResponse/bedrooms' response property for the response status '200'POST /v1/listings!WARNING! added the new '21' enum value to the 'bedrooms' response property for the response status '200'!WARNING! added the new '21' enum value to the 'compliance/regaResponse/bedrooms' response property for the response status '200'!WARNING! added the new '22' enum value to the 'bedrooms' response property for the response status '200'!WARNING! added the new '22' enum value to the 'compliance/regaResponse/bedrooms' response property for the response status '200'!WARNING! added the new '23' enum value to the 'bedrooms' response property for the response status '200'!WARNING! added the new '23' enum value to the 'compliance/regaResponse/bedrooms' response property for the response status '200'!WARNING! added the new '24' enum value to the 'bedrooms' response property for the response status '200'!WARNING! added the new '24' enum value to the 'compliance/regaResponse/bedrooms' response property for the response status '200'!WARNING! added the new '25' enum value to the 'bedrooms' response property for the response status '200'!WARNING! added the new '25' enum value to the 'compliance/regaResponse/bedrooms' response property for the response status '200'!WARNING! added the new '26' enum value to the 'bedrooms' response property for the response status '200'!WARNING! added the new '26' enum value to the 'compliance/regaResponse/bedrooms' response property for the response status '200'!WARNING! added the new '27' enum value to the 'bedrooms' response property for the response status '200'!WARNING! added the new '27' enum value to the 'compliance/regaResponse/bedrooms' response property for the response status '200'!WARNING! added the new '28' enum value to the 'bedrooms' response property for the response status '200'!WARNING! added the new '28' enum value to the 'compliance/regaResponse/bedrooms' response property for the response status '200'!WARNING! added the new '29' enum value to the 'bedrooms' response property for the response status '200'!WARNING! added the new '29' enum value to the 'compliance/regaResponse/bedrooms' response property for the response status '200'!WARNING! added the new '30' enum value to the 'bedrooms' response property for the response status '200'!WARNING! added the new '30' enum value to the 'compliance/regaResponse/bedrooms' response property for the response status '200'PUT /v1/listings/{id}!WARNING! added the new '21' enum value to the 'bedrooms' response property for the response status '200'!WARNING! added the new '21' enum value to the 'compliance/regaResponse/bedrooms' response property for the response status '200'!WARNING! added the new '22' enum value to the 'bedrooms' response property for the response status '200'!WARNING! added the new '22' enum value to the 'compliance/regaResponse/bedrooms' response property for the response status '200'!WARNING! added the new '23' enum value to the 'bedrooms' response property for the response status '200'!WARNING! added the new '23' enum value to the 'compliance/regaResponse/bedrooms' response property for the response status '200'!WARNING! added the new '24' enum value to the 'bedrooms' response property for the response status '200'!WARNING! added the new '24' enum value to the 'compliance/regaResponse/bedrooms' response property for the response status '200'!WARNING! added the new '25' enum value to the 'bedrooms' response property for the response status '200'!WARNING! added the new '25' enum value to the 'compliance/regaResponse/bedrooms' response property for the response status '200'!WARNING! added the new '26' enum value to the 'bedrooms' response property for the response status '200'!WARNING! added the new '26' enum value to the 'compliance/regaResponse/bedrooms' response property for the response status '200'!WARNING! added the new '27' enum value to the 'bedrooms' response property for the response status '200'!WARNING! added the new '27' enum value to the 'compliance/regaResponse/bedrooms' response property for the response status '200'!WARNING! added the new '28' enum value to the 'bedrooms' response property for the response status '200'!WARNING! added the new '28' enum value to the 'compliance/regaResponse/bedrooms' response property for the response status '200'!WARNING! added the new '29' enum value to the 'bedrooms' response property for the response status '200'!WARNING! added the new '29' enum value to the 'compliance/regaResponse/bedrooms' response property for the response status '200'!WARNING! added the new '30' enum value to the 'bedrooms' response property for the response status '200'!WARNING! added the new '30' enum value to the 'compliance/regaResponse/bedrooms' response property for the response status '200'GET /v1/listingsPOST /v1/listingsPUT /v1/listings/{id}GET /v1/leads!WARNING! for the 'query' request parameter 'perPage', the max was decreased from '100.00' to '50.00'GET /v1/users/GET /v1/leadsPOST /v1/webhooksPOST /v1/listings!WARNING! the request property 'media/images/items/original' became required!WARNING! the request property 'media/images/items/original/url' became requiredPUT /v1/listings/{id}!WARNING! the request property 'media/images/items/original' became required!WARNING! the request property 'media/images/items/original/url' became requiredPOST /v1/webhooksPATCH /v1/users/{id}GET /v1/leadsGET /v1/listings/{id}/publish/pricesPOST /v1/public-profiles/{id}/submit-verificationGET /v1/stats/public-profilesGET /v1/listingsfilter[advertisementNumber] in query - This allows filtering of listings by advertisement number (DTCM/RERA)Issue JWT token based on API key and secret
Required scope: No scope required
| apiKey required | string = 40 characters |
| apiSecret required | string = 32 characters |
{- "apiKey": "abcde.abcdefghijklmnopqrstuvwxyz01234567",
- "apiSecret": "abcdefghijklmnopqrstuvwxyz012345"
}{- "accessToken": "eyJhbGciOiJIUz......Qssw5c",
- "tokenType": "Bearer",
- "expiresIn": 1800
}Creates a new user in the system. The user will be created with an associated public profile.
Required scope: users:full_access
| email required | string <email> Email address of the user. Used mainly for authentication. |
| firstName required | string >= 2 characters |
| lastName required | string >= 2 characters |
| mobile required | string Mobile phone number of the user. Used mainly for authentication(e.g. 2FA). |
| roleId required | integer Access control role id (e.g. 6 for Decision maker). Refer to Fetch Roles API |
required | object |
{- "email": "user@example.com",
- "firstName": "John",
- "lastName": "Doe",
- "mobile": "string",
- "roleId": 0,
- "publicProfile": {
- "name": "string",
- "email": "user@example.com",
- "phone": "string",
- "phoneSecondary": "string",
- "whatsappPhone": "string",
- "bio": {
- "primary": "string",
- "secondary": "string"
}, - "position": {
- "primary": "string",
- "secondary": "string"
}, - "experienceSince": 2015,
- "nationality": "AD",
- "spokenLanguages": [
- 1
], - "compliances": [
- {
- "type": "string",
- "value": "string",
- "expiryDate": "2019-08-24"
}
]
}
}{- "id": 1234,
- "firstName": "John",
- "lastName": "Doe",
- "email": "abcd@example.com",
- "mobile": "+9710123456789",
- "status": "active",
- "roleId": 3,
- "publicProfile": {
- "id": 1234,
- "name": "John Doe",
- "email": "john@propertyfinder.ae",
- "phone": "+9715823456789",
- "phoneSecondary": "+9715823456789",
- "whatsappPhone": "+9715823456789",
- "bio": {
- "primary": "string",
- "secondary": "string"
}, - "position": {
- "primary": "string",
- "secondary": "string"
}, - "imageVariants": {
- "large": {
}
}, - "verification": {
- "status": "verified",
- "requestDate": "2021-01-01T00:00:00Z"
}, - "compliances": [
- {
- "type": "brn",
- "value": "1234567890",
- "status": "active",
- "expiryDate": "2025-04-30T09:54:18+04:00",
- "reason": "reason"
}
], - "isSuperAgent": true
}
}Retrieves a list of users associated with a specific client or organisation.
Required scope: users:read
| page | integer <int32> >= 1 Default: 1 Example: page=1 Page number, starts with 1. |
| perPage | integer <int32> [ 1 .. 100 ] Default: 50 Example: perPage=10 Number of items per page (max 100 allowed) |
| search | string Example: search=entity_name Search term to filter entity |
| status | string Enum: "active" "inactive" Example: status=active User's status |
| roleId | string Example: roleId=3 The user's role ID |
| publicProfileId | string Comma separated list of public profile IDs to filter the response. |
| id | string Comma separated list of user IDs to filter the response. |
string Comma separated list of user emails to filter the response. |
{- "data": [
- {
- "id": 1234,
- "firstName": "John",
- "lastName": "Doe",
- "email": "abcd@example.com",
- "mobile": "+9710123456789",
- "status": "active",
- "callTracking": {
- "number": "+9710123456789"
}, - "role": {
- "id": 3,
- "name": "Admin",
- "roleKey": "admin",
- "baseRoleKey": "admin",
- "isCustom": true
}, - "publicProfile": {
- "id": 1234,
- "name": "John Doe",
- "email": "john@propertyfinder.ae",
- "phone": "+9715823456789",
- "phoneSecondary": "+9715823456789",
- "whatsappPhone": "+9715823456789",
- "bio": {
- "primary": "string",
- "secondary": "string"
}, - "position": {
- "primary": "string",
- "secondary": "string"
}, - "imageVariants": {
- "large": {
}
}, - "verification": {
- "status": "verified",
- "requestDate": "2021-01-01T00:00:00Z"
}, - "compliances": [
- {
- "type": "brn",
- "value": "1234567890",
- "status": "active",
- "expiryDate": "2025-04-30T09:54:18+04:00",
- "reason": "reason"
}
], - "isSuperAgent": true
}, - "createdAt": "2021-01-01T00:00:00Z"
}
], - "pagination": {
- "total": 100,
- "page": 1,
- "perPage": 10,
- "totalPages": 10,
- "nextPage": 2,
- "prevPage": 1
}
}Update a user's private profile details. Request body should contain only the fields that need to be updated.
Required scope: users:full_access
| id required | string |
| firstName | string |
| lastName | string |
string <email> | |
| password | string Deprecated This field is deprecated and will be removed in future versions. This filed DOES NOT update the password of the user. |
| phone | string Deprecated This field is deprecated and will be removed in future versions. Please use mobile instead. |
| mobile | string |
| roleId | string |
| isActive | boolean |
{- "firstName": "string",
- "lastName": "string",
- "email": "user@example.com",
- "password": "string",
- "phone": "string",
- "mobile": "string",
- "roleId": "string",
- "isActive": true
}{- "detail": "",
- "errors": [
- {
- "detail": "error reason"
}
], - "title": "Bad Request",
- "type": "SCHEMA_VALIDATION"
}Update a user's public profile details. Request body should contain only the fields that need to be updated.
Required scope: users:full_access
| id required | string |
| name | string Full name of the user, that will be exposed on the PF Website. | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
string <email> Email of the user, that will be exposed on the PF Website. | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| phone | string Phone number of the user, that will be exposed on the PF Website. | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| phoneSecondary | string Secondary phone number of the user, that will be used when the phone number is not reachable. | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| whatsappPhone | string WhatsApp phone number of the user, that will be exposed on the PF Website. | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| imageUrl | string <uri> URL of the profile image. | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
object Localized brief biography of the user, displayed on the PF Website. Can include professional background, expertise, or achievements. | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
object Localized current job title or position of the user within the company. | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| linkedinAddress | string <uri> LinkedIn URL of the user. | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| experienceSince | integer Year when the user started their professional career. Represented as a four-digit year (e.g., 2015). | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| nationality | string
Nationality of the user (2 letter country code). | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| spokenLanguages | Array of integers or null unique
Array of the spoken languages. Can be empty array. | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Array of objects or null An array of compliances. Can be an empty array. |
{- "name": "string",
- "email": "user@example.com",
- "phone": "string",
- "phoneSecondary": "string",
- "whatsappPhone": "string",
- "bio": {
- "primary": "string",
- "secondary": "string"
}, - "position": {
- "primary": "string",
- "secondary": "string"
}, - "experienceSince": 2015,
- "nationality": "AD",
- "spokenLanguages": [
- 1
], - "compliances": [
- {
- "type": "string",
- "value": "string",
- "expiryDate": "2019-08-24"
}
]
}{- "detail": "",
- "errors": [
- {
- "detail": "error reason"
}
], - "title": "Bad Request",
- "type": "SCHEMA_VALIDATION"
}Submit Public Profile Verification request.
Required scope: users:full_access
| id required | string |
| phone required | string Private Profile Phone number of the public profile to be used for verification |
| documentUrl required | string <uri> URL to the verification document - license |
{- "phone": "string",
}{- "status": "unverified"
}Returns the list of user roles available in the account. This includes both base roles (such as agent, admin, decision maker, etc), as well as any custom roles that have been created in the account.
Required scope: roles:read
{- "data": [
- {
- "id": 3,
- "name": "Admin",
- "roleKey": "admin",
- "baseRoleKey": "admin",
- "isCustom": true
}
]
}Creates a new listing. The request body should contain all the required fields for the listing creation. The response will include the details of the created listing.
Required scope: listings:full_access
For image upload specifications, see Image Requirements.
For each country, there are specific required fields that need to be included in the request body. In order for created listing to get published afterwards, Below is the Required fields and their conditions.
| Field | Required if |
|---|---|
compliance |
When uaeEmirate = dubai or uaeEmirate = abu_dhabi |
compliance.listingAdvertisementNumber |
When uaeEmirate = dubai or uaeEmirate = abu_dhabi |
compliance.type |
When uaeEmirate = dubai or uaeEmirate = abu_dhabi |
category |
Always |
type |
Always |
furnishingType |
Always |
media.images.original |
Always |
price |
Always |
price.type |
Always |
price.amounts |
Include the amount matching price.type (e.g., amounts.daily for daily, amounts.sale for sale). For rental types (yearly, monthly, weekly, daily), other amounts.* values are optional. |
downPayment |
When price.type = sale |
location |
Always |
uaeEmirate |
Always |
reference |
Always (must be unique) |
bathrooms |
Required if listing type is not Land or Farm |
title.en |
Always |
description.en |
Always |
size |
Always |
hasParkingSpace |
When listing type = co-working-space |
For Saudi Arabia (KSA) listings, the fields have special handling due to REGA (Real Estate General Authority) integration:
| Field | Required if |
|---|---|
compliance.listingAdvertisementNumber |
Always |
compliance.userConfirmedDataIsCorrect |
Always |
category |
Always |
type |
Always |
furnishingType |
Always |
media.images.original |
Always |
price.type |
Always |
price.amounts |
Include the amount matching price.type (e.g., amounts.daily for daily, amounts.sale for sale). For rental types (yearly, monthly, weekly, daily), other amounts.* values are optional. |
price.downpayment |
When price.type = sale |
location |
Always |
reference |
Always (must be unique) |
bathrooms |
Required if listing type is not Land or Farm |
title.en |
Always |
description.en |
Always |
size |
Always |
hasParkingSpace |
When listing type = co-working-space |
The following fields in your request body will be overridden with REGA data to ensure regulatory compliance:
| Field | Override Source | Description |
|---|---|---|
category |
regaData.category |
Property category from REGA |
type |
mapPropertyType(regaData.type) |
Mapped property type from REGA |
size |
regaData.property_size |
Property size from REGA |
age |
regaData.property_age |
Property age from REGA |
street.direction |
regaData.street_direction |
Street direction from REGA |
street.width |
regaData.street_width |
Street width from REGA |
location.id |
regaData.location.id |
Location ID from REGA |
location.full_name.en |
buildLocationFullName(regaData.location.location_tree, 'en') |
Full location name in English from REGA |
location.full_name.ar |
buildLocationFullName(regaData.location.location_tree, 'ar') |
Full location name in Arabic from REGA |
location.lat |
regaData.location.lat |
Latitude from REGA |
location.lon |
regaData.location.lon |
Longitude from REGA |
location.path |
regaData.location.path |
Location path from REGA |
price.type |
regaData.offering_type === 'rent' ? 'yearly' : 'sale' |
Price type based on REGA offering type (sale, yearly, monthly, daily) |
price.amounts |
{} (auto-calculated based on REGA data) |
Price amounts object with optional fields: daily, monthly, weekly, yearly, sale (all int32) |
price.obligation.enabled |
regaData.price.obligation.enabled (if available) |
Boolean indicating if price has obligations. Auto-populated from REGA if available, otherwise must be provided. |
price.obligation.comment |
regaData.price.obligation.comment (if available) |
Comment about price obligation. Required if price.obligation.enabled is true. Auto-populated from REGA if available, otherwise must be provided. |
price.value_affected.enabled |
regaData.price.value_affected.enabled (if available) |
Boolean indicating if price value is affected. Auto-populated from REGA if available, otherwise must be provided. |
price.value_affected.comment |
regaData.price.value_affected.comment (if available) |
Comment about value affected. Required if price.value_affected.enabled is true. Auto-populated from REGA if available, otherwise must be provided. |
plot_number |
regaData.plot_number |
Plot number from REGA |
land_number |
regaData.land_number |
Land number from REGA |
Important: For KSA listings, even if you provide values for the override fields above, they will be replaced with REGA data to ensure regulatory compliance. Fields marked as "optional" can be omitted from your request if REGA provides them; however, if REGA does not provide these fields (e.g.,
price.obligation,price.value_affected), you must include them in your request body.
| age | integer Number of years since the property was handed over |
| amenities | Array of strings Items Enum: "central-ac" "built-in-wardrobes" "kitchen-appliances" "security" "concierge" "private-gym" "shared-gym" "private-jacuzzi" "shared-spa" "covered-parking" "maids-room" "barbecue-area" "shared-pool" "childrens-pool" "private-garden" "private-pool" "view-of-water" "walk-in-closet" "lobby-in-building" "electricity" "waters" "sanitation" "no-services" "fixed-phone" "fibre-optics" "flood-drainage" "balcony" "networked" "view-of-landmark" "dining-in-building" "conference-room" "study" "maid-service" "childrens-play-area" "pets-allowed" "vastu-compliant" |
object | |
| availableFrom | string <date> |
| bathrooms | string Enum: "none" "1" "2" "3" "4" "5" "6" "7" "8" "9" "10" "11" "12" "13" "14" "15" "16" "17" "18" "19" "20" |
| bedrooms | string Enum: "studio" "1" "2" "3" "4" "5" "6" "7" "8" "9" "10" "11" "12" "13" "14" "15" "16" "17" "18" "19" "20" "21" "22" "23" "24" "25" "26" "27" "28" "29" "30" |
| category | string Enum: "residential" "commercial" |
object | |
object This is the public profile id of the user. Refer to Search Users API response for more details - look at the id field, under publicProfile | |
object If provided, one of | |
| developer | string |
| finishingType | string Enum: "fully-finished" "semi-finished" "unfinished" |
| floorNumber | string |
| furnishingType | string Enum: "unfurnished" "semi-furnished" "furnished" |
| hasGarden | boolean |
| hasKitchen | boolean |
| hasParkingOnSite | boolean |
| landNumber | string |
object | |
object | |
| mojDeedLocationDescription | string |
| numberOfFloors | integer |
| ownerName | string |
| parkingSlots | integer |
| plotNumber | string |
| plotSize | number |
object | |
| projectStatus | string Enum: "completed" "off_plan" "completed_primary" "off_plan_primary" |
| reference | string |
| size | number |
object | |
object If provided, one of | |
| type | string Enum: "compound" "whole-building" "factory" "land" "rest-house" "apartment" "shop" "warehouse" "chalet" "office-space" "full-floor" "villa" "farm" "show-room" "bulk-sale-unit" "restaurant" "roof" "half-floor" "twin-house" "cabin" "bulk-rent-unit" "ivilla" "co-working-space" "hotel-apartment" "retail" "duplex" "townhouse" "staff-accommodation" "medical-facility" "palace" "penthouse" "clinic" "cafeteria" "bungalow" "labor-camp" "business-center" |
| uaeEmirate | string Enum: "dubai" "abu_dhabi" "northern_emirates" |
| unitNumber | string |
{- "age": 0,
- "amenities": [
- "central-ac"
], - "assignedTo": {
- "id": 0
}, - "availableFrom": "2019-08-24",
- "bathrooms": "none",
- "bedrooms": "studio",
- "category": "residential",
- "compliance": {
- "advertisementLicenseIssuanceDate": "2019-08-24T14:15:22Z",
- "listingAdvertisementNumber": "string",
- "type": "rera",
- "issuingClientLicenseNumber": "string",
- "userConfirmedDataIsCorrect": true
}, - "createdBy": {
- "id": 0
}, - "description": {
- "ar": "string",
- "en": "string"
}, - "developer": "string",
- "finishingType": "fully-finished",
- "floorNumber": "string",
- "furnishingType": "unfurnished",
- "hasGarden": true,
- "hasKitchen": true,
- "hasParkingOnSite": true,
- "landNumber": "string",
- "location": {
- "id": 0
}, - "media": {
}, - "mojDeedLocationDescription": "string",
- "numberOfFloors": 0,
- "ownerName": "string",
- "parkingSlots": 0,
- "plotNumber": "string",
- "plotSize": 0,
- "price": {
- "amounts": {
- "daily": 0,
- "monthly": 0,
- "sale": 0,
- "weekly": 0,
- "yearly": 0
}, - "downpayment": 0,
- "minimalRentalPeriod": 0,
- "mortgage": {
- "comment": "string",
- "enabled": true
}, - "numberOfCheques": 0,
- "numberOfMortgageYears": 0,
- "obligation": {
- "comment": "string",
- "enabled": true
}, - "onRequest": true,
- "paymentMethods": [
- "installments"
], - "type": "yearly",
- "utilitiesInclusive": true,
- "valueAffected": {
- "comment": "string",
- "enabled": true
}
}, - "projectStatus": "completed",
- "reference": "string",
- "size": 0,
- "street": {
- "direction": "North",
- "width": 0
}, - "title": {
- "ar": "string",
- "en": "string"
}, - "type": "compound",
- "uaeEmirate": "dubai",
- "unitNumber": "string"
}{- "age": 0,
- "aiContentUsed": true,
- "amenities": [
- "central-ac"
], - "assignedTo": {
- "id": 0,
- "name": "string",
- "photos": {
- "thumbnail": "string"
}
}, - "availableFrom": "2019-08-24",
- "bathrooms": "none",
- "bedrooms": "studio",
- "category": "residential",
- "compliance": {
- "advertisementLicenseIssuanceDate": "2019-08-24T14:15:22Z",
- "listingAdvertisementNumber": "string",
- "issuingClientLicenseNumber": "string",
- "regaResponse": {
- "age": 0,
- "amenities": [
- "electricity"
], - "bathrooms": "none",
- "bedrooms": "studio",
- "category": "residential",
- "compliance": {
- "advertisementLicenseIssuanceDate": "2019-08-24T14:15:22Z",
- "issuingClientLicenseNumber": "string"
}, - "landNumber": "string",
- "location": {
- "fullName": {
- "ar": "string",
- "en": "string"
}, - "id": 0,
- "lat": "string",
- "lon": "string",
- "path": "string"
}, - "mojDeedLocationDescription": "string",
- "plotNumber": "string",
- "price": {
- "amounts": {
- "daily": 0,
- "monthly": 0,
- "sale": 0,
- "weekly": 0,
- "yearly": 0
}, - "obligation": {
- "comment": "string",
- "enabled": true
}, - "type": "sale",
- "valueAffected": {
- "comment": "string",
- "enabled": true
}
}, - "size": 0,
- "street": {
- "direction": "North",
- "width": 0
}, - "type": "apartment"
}, - "type": "rera",
- "userConfirmedDataIsCorrect": true
}, - "createdAt": "2019-08-24T14:15:22Z",
- "createdBy": {
- "id": 0,
- "name": "string",
- "photos": {
- "thumbnail": "string"
}
}, - "ctsPriority": 0,
- "description": {
- "ar": "string",
- "en": "string"
}, - "developer": "string",
- "finishingType": "fully-finished",
- "floorNumber": "string",
- "furnishingType": "unfurnished",
- "hasGarden": true,
- "hasKitchen": true,
- "hasParkingOnSite": true,
- "id": "string",
- "landNumber": "string",
- "location": {
- "id": 0
}, - "media": {
- "images": [
- {
}
],
}, - "mojDeedLocationDescription": "string",
- "numberOfFloors": 0,
- "ownerName": "string",
- "parkingSlots": 0,
- "pfCategoryId": 0,
- "pfTypeId": 0,
- "plotNumber": "string",
- "plotSize": 0,
- "portals": {
- "propertyfinder": {
- "isLive": true,
- "name": "string",
- "publishedAt": "2019-08-24T14:15:22Z"
}
}, - "price": {
- "amounts": {
- "daily": 0,
- "monthly": 0,
- "sale": 0,
- "weekly": 0,
- "yearly": 0
}, - "downpayment": 0,
- "minimalRentalPeriod": 0,
- "mortgage": {
- "comment": "string",
- "enabled": true
}, - "numberOfCheques": 0,
- "numberOfMortgageYears": 0,
- "obligation": {
- "comment": "string",
- "enabled": true
}, - "onRequest": true,
- "paymentMethods": [
- "installments"
], - "type": "sale",
- "utilitiesInclusive": true,
- "valueAffected": {
- "comment": "string",
- "enabled": true
}
}, - "products": {
- "featured": {
- "createdAt": "2019-08-24T14:15:22Z",
- "expiresAt": "2019-08-24T14:15:22Z",
- "id": "string",
- "purchasedProductId": "string",
- "renewalEnabled": true
}, - "premium": {
- "createdAt": "2019-08-24T14:15:22Z",
- "expiresAt": "2019-08-24T14:15:22Z",
- "id": "string",
- "purchasedProductId": "string",
- "renewalEnabled": true
}, - "standard": {
- "createdAt": "2019-08-24T14:15:22Z",
- "expiresAt": "2019-08-24T14:15:22Z",
- "id": "string",
- "purchasedProductId": "string",
- "renewalEnabled": true
}
}, - "projectStatus": "completed",
- "qualityScore": {
- "color": "red",
- "details": {
- "description": {
- "color": "red",
- "group": "string",
- "help": "string",
- "helpAr": "string",
- "tag": "string",
- "tagAr": "string",
- "value": 0,
- "weight": 0
}, - "hasAgentUser": {
- "color": "red",
- "group": "string",
- "help": "string",
- "helpAr": "string",
- "tag": "string",
- "tagAr": "string",
- "value": 0,
- "weight": 0
}, - "image": {
- "color": "red",
- "group": "string",
- "help": "string",
- "helpAr": "string",
- "tag": "string",
- "tagAr": "string",
- "value": 0,
- "weight": 0
}, - "imageDiversity": {
- "color": "red",
- "group": "string",
- "help": "string",
- "helpAr": "string",
- "tag": "string",
- "tagAr": "string",
- "value": 0,
- "weight": 0
}, - "imageDuplicates": {
- "color": "red",
- "group": "string",
- "help": "string",
- "helpAr": "string",
- "tag": "string",
- "tagAr": "string",
- "value": 0,
- "weight": 0
}, - "imagesDimensions": {
- "color": "red",
- "group": "string",
- "help": "string",
- "helpAr": "string",
- "tag": "string",
- "tagAr": "string",
- "value": 0,
- "weight": 0
}, - "listingCompletion": {
- "color": "red",
- "group": "string",
- "help": "string",
- "helpAr": "string",
- "tag": "string",
- "tagAr": "string",
- "value": 0,
- "weight": 0
}, - "location": {
- "color": "red",
- "group": "string",
- "help": "string",
- "helpAr": "string",
- "tag": "string",
- "tagAr": "string",
- "value": 0,
- "weight": 0
}, - "priceRealism": {
- "color": "red",
- "group": "string",
- "help": "string",
- "helpAr": "string",
- "tag": "string",
- "tagAr": "string",
- "value": 0,
- "weight": 0
}, - "title": {
- "color": "red",
- "group": "string",
- "help": "string",
- "helpAr": "string",
- "tag": "string",
- "tagAr": "string",
- "value": 0,
- "weight": 0
}, - "titleDeed": {
- "color": "red",
- "group": "string",
- "help": "string",
- "helpAr": "string",
- "tag": "string",
- "tagAr": "string",
- "value": 0,
- "weight": 0
}, - "verified": {
- "color": "red",
- "group": "string",
- "help": "string",
- "helpAr": "string",
- "tag": "string",
- "tagAr": "string",
- "value": 0,
- "weight": 0
}
}, - "value": 0
}, - "reference": "string",
- "size": 0,
- "state": {
- "reasons": [
- {
- "ar": "string",
- "en": "string"
}
], - "stage": "draft",
- "type": "draft"
}, - "street": {
- "direction": "North",
- "width": 0
}, - "title": {
- "ar": "string",
- "en": "string"
}, - "type": "bulk-sale-unit",
- "uaeEmirate": "dubai",
- "unitNumber": "string",
- "updatedAt": "2019-08-24T14:15:22Z",
- "updatedBy": {
- "id": 0,
- "name": "string",
- "photos": {
- "thumbnail": "string"
}
}, - "verificationStatus": "string",
- "rnpm": {
- "state": "enabled",
- "enabledAt": "2019-08-24T14:15:22Z",
- "revokedAt": "2019-08-24T14:15:22Z",
- "reasons": [
- {
- "en": "string",
- "ar": "string"
}
]
}
}Retrieves a list of listings based on various filters and parameters. The response will include the details of the listings that match the specified criteria.
Required scope: listings:read
| draft | boolean Example: draft=true Get published or non-published listings (default will return published listings) |
| archived | boolean Example: archived=true Get archived listings |
| isCtsEligible | boolean Default: true Example: isCtsEligible=false Get listings that are eligible for CTS |
| filter[state] | string Enum: "draft" "live" "takendown" "archived" "unpublished" "pending_approval" "rejected" "approved" "failed" Filter by listing state. States are different based on the draft parameter |
| filter[ids] | string Example: filter[ids]=XXXXX,YYYYY,ZZZZZ Comma separated list of listing ids |
| filter[reference] | string |
| filter[listingLevel] | string Enum: "featured" "premium" "standard" Filter by listing level |
| filter[completionStatus] | string Enum: "completed" "completed_primary" "off_plan" "off_plan_primary" Filter by completion status |
| filter[furnishingType] | string Enum: "furnished" "unfurnished" "semi-furnished" Filter by furnished type |
| filter[locationId] | string Example: filter[locationId]=123,456,789 Comma separated list of location ids |
| filter[assignedToId] | string Example: filter[assignedToId]=123,456,789 Comma separated list of public profile ids, assigned to the listing |
| filter[type] | string Filter listing by type (apartment, villa, etc) |
| filter[category] | string Enum: "commercial" "residential" Filter by listing category |
| filter[offeringType] | string Enum: "rent" "sale" Filter by offering type |
| filter[bedrooms] | string Example: filter[bedrooms]=studio,2,3 Filter listings by number of bedrooms. |
| filter[bathrooms] | string Example: filter[bathrooms]=1,2,3 Filter listings by number of bathrooms. |
| filter[unitNumber] | string Example: filter[unitNumber]=123,B-923 Filter listings by unit number. |
| filter[advertisementNumber] | string Example: filter[advertisementNumber]=1234,5678 Filter by listing advertisement number (filter by RERA and DTCM number) |
| filter[size][from] | number Example: filter[size][from]=1000 Filter listings by size starting from |
| filter[size][to] | number Example: filter[size][to]=2000 Filter listings by size ending at |
| filter[price][from] | number Example: filter[price][from]=1000 Filter listings by price starting from |
| filter[price][to] | number Example: filter[price][to]=2000 Filter listings by price ending at |
| filter[listingLevelExpiresAt][from] | string <date-time> Example: filter[listingLevelExpiresAt][from]=2025-04-30T09:54:18+04:00 Filter by listing level expiration date (from). From and to should be used together. |
| filter[listingLevelExpiresAt][to] | string <date-time> Example: filter[listingLevelExpiresAt][to]=2025-04-30T09:54:18+04:00 Filter by listing level expiration date (to). From and to should be used together. |
| filter[projectStatus] | string Enum: "completed" "completed_primary" "off_plan" "off_plan_primary" Filter by projectStatus |
| filter[spotlightStatus] | string Enum: "eligible" "outcompeted" "spotlight" "winning_offer" "expired" "not_eligible" Filter by listing spotlight status |
| filter[ctsPriority] | integer Enum: 100 0 Filter by listing cts priority |
| filter[verificationStatus] | string Enum: "pending" "approved" "rejected" "expired" "deleted" Filter by listing verification status |
| perPage | integer <int32> [ 1 .. 100 ] Default: 50 Example: perPage=10 Number of items per page (max 100 allowed) |
| page | integer <int32> >= 1 Default: 1 Example: page=1 Page number, starts with 1. |
| orderBy | string Enum: "createdAt" "price" "publishedAt" Example: orderBy=price Field to order by |
| sort[createdAt] | string Enum: "asc" "desc" Sort by createdAt |
| sort[price] | string Enum: "asc" "desc" Sort by price |
| sort[publishedAt] | string Enum: "asc" "desc" Sort by publishedAt |
{- "results": [
- {
- "age": 0,
- "aiContentUsed": true,
- "amenities": [
- "central-ac"
], - "assignedTo": {
- "id": 0,
- "name": "string",
- "photos": {
- "thumbnail": "string"
}
}, - "availableFrom": "2019-08-24",
- "bathrooms": "none",
- "bedrooms": "studio",
- "category": "residential",
- "compliance": {
- "advertisementLicenseIssuanceDate": "2019-08-24T14:15:22Z",
- "listingAdvertisementNumber": "string",
- "issuingClientLicenseNumber": "string",
- "regaResponse": {
- "age": 0,
- "amenities": [
- "electricity"
], - "bathrooms": "none",
- "bedrooms": "studio",
- "category": "residential",
- "compliance": {
- "advertisementLicenseIssuanceDate": "2019-08-24T14:15:22Z",
- "issuingClientLicenseNumber": "string"
}, - "landNumber": "string",
- "location": {
- "fullName": {
- "ar": "string",
- "en": "string"
}, - "id": 0,
- "lat": "string",
- "lon": "string",
- "path": "string"
}, - "mojDeedLocationDescription": "string",
- "plotNumber": "string",
- "price": {
- "amounts": {
- "daily": 0,
- "monthly": 0,
- "sale": 0,
- "weekly": 0,
- "yearly": 0
}, - "obligation": {
- "comment": "string",
- "enabled": true
}, - "type": "sale",
- "valueAffected": {
- "comment": "string",
- "enabled": true
}
}, - "size": 0,
- "street": {
- "direction": "North",
- "width": 0
}, - "type": "apartment"
}, - "type": "rera",
- "userConfirmedDataIsCorrect": true
}, - "createdAt": "2019-08-24T14:15:22Z",
- "createdBy": {
- "id": 0,
- "name": "string",
- "photos": {
- "thumbnail": "string"
}
}, - "ctsPriority": 0,
- "description": {
- "ar": "string",
- "en": "string"
}, - "developer": "string",
- "finishingType": "fully-finished",
- "floorNumber": "string",
- "furnishingType": "unfurnished",
- "hasGarden": true,
- "hasKitchen": true,
- "hasParkingOnSite": true,
- "id": "string",
- "landNumber": "string",
- "location": {
- "id": 0
}, - "media": {
- "images": [
- {
}
],
}, - "mojDeedLocationDescription": "string",
- "numberOfFloors": 0,
- "ownerName": "string",
- "parkingSlots": 0,
- "pfCategoryId": 0,
- "pfTypeId": 0,
- "plotNumber": "string",
- "plotSize": 0,
- "portals": {
- "propertyfinder": {
- "isLive": true,
- "name": "string",
- "publishedAt": "2019-08-24T14:15:22Z"
}
}, - "price": {
- "amounts": {
- "daily": 0,
- "monthly": 0,
- "sale": 0,
- "weekly": 0,
- "yearly": 0
}, - "downpayment": 0,
- "minimalRentalPeriod": 0,
- "mortgage": {
- "comment": "string",
- "enabled": true
}, - "numberOfCheques": 0,
- "numberOfMortgageYears": 0,
- "obligation": {
- "comment": "string",
- "enabled": true
}, - "onRequest": true,
- "paymentMethods": [
- "installments"
], - "type": "sale",
- "utilitiesInclusive": true,
- "valueAffected": {
- "comment": "string",
- "enabled": true
}
}, - "products": {
- "featured": {
- "createdAt": "2019-08-24T14:15:22Z",
- "expiresAt": "2019-08-24T14:15:22Z",
- "id": "string",
- "purchasedProductId": "string",
- "renewalEnabled": true
}, - "premium": {
- "createdAt": "2019-08-24T14:15:22Z",
- "expiresAt": "2019-08-24T14:15:22Z",
- "id": "string",
- "purchasedProductId": "string",
- "renewalEnabled": true
}, - "standard": {
- "createdAt": "2019-08-24T14:15:22Z",
- "expiresAt": "2019-08-24T14:15:22Z",
- "id": "string",
- "purchasedProductId": "string",
- "renewalEnabled": true
}
}, - "projectStatus": "completed",
- "qualityScore": {
- "color": "red",
- "details": {
- "description": {
- "color": "red",
- "group": "string",
- "help": "string",
- "helpAr": "string",
- "tag": "string",
- "tagAr": "string",
- "value": 0,
- "weight": 0
}, - "hasAgentUser": {
- "color": "red",
- "group": "string",
- "help": "string",
- "helpAr": "string",
- "tag": "string",
- "tagAr": "string",
- "value": 0,
- "weight": 0
}, - "image": {
- "color": "red",
- "group": "string",
- "help": "string",
- "helpAr": "string",
- "tag": "string",
- "tagAr": "string",
- "value": 0,
- "weight": 0
}, - "imageDiversity": {
- "color": "red",
- "group": "string",
- "help": "string",
- "helpAr": "string",
- "tag": "string",
- "tagAr": "string",
- "value": 0,
- "weight": 0
}, - "imageDuplicates": {
- "color": "red",
- "group": "string",
- "help": "string",
- "helpAr": "string",
- "tag": "string",
- "tagAr": "string",
- "value": 0,
- "weight": 0
}, - "imagesDimensions": {
- "color": "red",
- "group": "string",
- "help": "string",
- "helpAr": "string",
- "tag": "string",
- "tagAr": "string",
- "value": 0,
- "weight": 0
}, - "listingCompletion": {
- "color": "red",
- "group": "string",
- "help": "string",
- "helpAr": "string",
- "tag": "string",
- "tagAr": "string",
- "value": 0,
- "weight": 0
}, - "location": {
- "color": "red",
- "group": "string",
- "help": "string",
- "helpAr": "string",
- "tag": "string",
- "tagAr": "string",
- "value": 0,
- "weight": 0
}, - "priceRealism": {
- "color": "red",
- "group": "string",
- "help": "string",
- "helpAr": "string",
- "tag": "string",
- "tagAr": "string",
- "value": 0,
- "weight": 0
}, - "title": {
- "color": "red",
- "group": "string",
- "help": "string",
- "helpAr": "string",
- "tag": "string",
- "tagAr": "string",
- "value": 0,
- "weight": 0
}, - "titleDeed": {
- "color": "red",
- "group": "string",
- "help": "string",
- "helpAr": "string",
- "tag": "string",
- "tagAr": "string",
- "value": 0,
- "weight": 0
}, - "verified": {
- "color": "red",
- "group": "string",
- "help": "string",
- "helpAr": "string",
- "tag": "string",
- "tagAr": "string",
- "value": 0,
- "weight": 0
}
}, - "value": 0
}, - "reference": "string",
- "size": 0,
- "state": {
- "reasons": [
- {
- "ar": "string",
- "en": "string"
}
], - "stage": "draft",
- "type": "draft"
}, - "street": {
- "direction": "North",
- "width": 0
}, - "title": {
- "ar": "string",
- "en": "string"
}, - "type": "bulk-sale-unit",
- "uaeEmirate": "dubai",
- "unitNumber": "string",
- "updatedAt": "2019-08-24T14:15:22Z",
- "updatedBy": {
- "id": 0,
- "name": "string",
- "photos": {
- "thumbnail": "string"
}
}, - "verificationStatus": "string",
- "rnpm": {
- "state": "enabled",
- "enabledAt": "2019-08-24T14:15:22Z",
- "revokedAt": "2019-08-24T14:15:22Z",
- "reasons": [
- {
- "en": "string",
- "ar": "string"
}
]
}
}
], - "pagination": {
- "total": 100,
- "page": 1,
- "perPage": 10,
- "totalPages": 10,
- "nextPage": 2,
- "prevPage": 1
}, - "activeCts": {
- "locations": [
- {
- "id": 0,
- "name": "string"
}
], - "categories": [
- "residential"
], - "offeringTypes": [
- "rent"
]
}
}Updates an existing listing. The response will include the details of the updated listing.
Required scope: listings:full_access
For image upload specifications, see Image Requirements.
| id required | string |
| age | integer Number of years since the property was handed over |
| amenities | Array of strings Items Enum: "central-ac" "built-in-wardrobes" "kitchen-appliances" "security" "concierge" "private-gym" "shared-gym" "private-jacuzzi" "shared-spa" "covered-parking" "maids-room" "barbecue-area" "shared-pool" "childrens-pool" "private-garden" "private-pool" "view-of-water" "walk-in-closet" "lobby-in-building" "electricity" "waters" "sanitation" "no-services" "fixed-phone" "fibre-optics" "flood-drainage" "balcony" "networked" "view-of-landmark" "dining-in-building" "conference-room" "study" "maid-service" "childrens-play-area" "pets-allowed" "vastu-compliant" |
object | |
| availableFrom | string <date> |
| bathrooms | string Enum: "none" "1" "2" "3" "4" "5" "6" "7" "8" "9" "10" "11" "12" "13" "14" "15" "16" "17" "18" "19" "20" |
| bedrooms | string Enum: "studio" "1" "2" "3" "4" "5" "6" "7" "8" "9" "10" "11" "12" "13" "14" "15" "16" "17" "18" "19" "20" "21" "22" "23" "24" "25" "26" "27" "28" "29" "30" |
| category | string Enum: "residential" "commercial" |
object | |
object This is the public profile id of the user. Refer to Search Users API response for more details - look at the id field, under publicProfile | |
object If provided, one of | |
| developer | string |
| finishingType | string Enum: "fully-finished" "semi-finished" "unfinished" |
| floorNumber | string |
| furnishingType | string Enum: "unfurnished" "semi-furnished" "furnished" |
| hasGarden | boolean |
| hasKitchen | boolean |
| hasParkingOnSite | boolean |
| landNumber | string |
object | |
object | |
| mojDeedLocationDescription | string |
| numberOfFloors | integer |
| ownerName | string |
| parkingSlots | integer |
| plotNumber | string |
| plotSize | number |
object | |
| projectStatus | string Enum: "completed" "off_plan" "completed_primary" "off_plan_primary" |
| reference | string |
| size | number |
object | |
object If provided, one of | |
| type | string Enum: "compound" "whole-building" "factory" "land" "rest-house" "apartment" "shop" "warehouse" "chalet" "office-space" "full-floor" "villa" "farm" "show-room" "bulk-sale-unit" "restaurant" "roof" "half-floor" "twin-house" "cabin" "bulk-rent-unit" "ivilla" "co-working-space" "hotel-apartment" "retail" "duplex" "townhouse" "staff-accommodation" "medical-facility" "palace" "penthouse" "clinic" "cafeteria" "bungalow" "labor-camp" "business-center" |
| uaeEmirate | string Enum: "dubai" "abu_dhabi" "northern_emirates" |
| unitNumber | string |
{- "age": 0,
- "amenities": [
- "central-ac"
], - "assignedTo": {
- "id": 0
}, - "availableFrom": "2019-08-24",
- "bathrooms": "none",
- "bedrooms": "studio",
- "category": "residential",
- "compliance": {
- "advertisementLicenseIssuanceDate": "2019-08-24T14:15:22Z",
- "listingAdvertisementNumber": "string",
- "type": "rera",
- "issuingClientLicenseNumber": "string",
- "userConfirmedDataIsCorrect": true
}, - "createdBy": {
- "id": 0
}, - "description": {
- "ar": "string",
- "en": "string"
}, - "developer": "string",
- "finishingType": "fully-finished",
- "floorNumber": "string",
- "furnishingType": "unfurnished",
- "hasGarden": true,
- "hasKitchen": true,
- "hasParkingOnSite": true,
- "landNumber": "string",
- "location": {
- "id": 0
}, - "media": {
}, - "mojDeedLocationDescription": "string",
- "numberOfFloors": 0,
- "ownerName": "string",
- "parkingSlots": 0,
- "plotNumber": "string",
- "plotSize": 0,
- "price": {
- "amounts": {
- "daily": 0,
- "monthly": 0,
- "sale": 0,
- "weekly": 0,
- "yearly": 0
}, - "downpayment": 0,
- "minimalRentalPeriod": 0,
- "mortgage": {
- "comment": "string",
- "enabled": true
}, - "numberOfCheques": 0,
- "numberOfMortgageYears": 0,
- "obligation": {
- "comment": "string",
- "enabled": true
}, - "onRequest": true,
- "paymentMethods": [
- "installments"
], - "type": "yearly",
- "utilitiesInclusive": true,
- "valueAffected": {
- "comment": "string",
- "enabled": true
}
}, - "projectStatus": "completed",
- "reference": "string",
- "size": 0,
- "street": {
- "direction": "North",
- "width": 0
}, - "title": {
- "ar": "string",
- "en": "string"
}, - "type": "compound",
- "uaeEmirate": "dubai",
- "unitNumber": "string"
}{- "age": 0,
- "aiContentUsed": true,
- "amenities": [
- "central-ac"
], - "assignedTo": {
- "id": 0,
- "name": "string",
- "photos": {
- "thumbnail": "string"
}
}, - "availableFrom": "2019-08-24",
- "bathrooms": "none",
- "bedrooms": "studio",
- "category": "residential",
- "compliance": {
- "advertisementLicenseIssuanceDate": "2019-08-24T14:15:22Z",
- "listingAdvertisementNumber": "string",
- "issuingClientLicenseNumber": "string",
- "regaResponse": {
- "age": 0,
- "amenities": [
- "electricity"
], - "bathrooms": "none",
- "bedrooms": "studio",
- "category": "residential",
- "compliance": {
- "advertisementLicenseIssuanceDate": "2019-08-24T14:15:22Z",
- "issuingClientLicenseNumber": "string"
}, - "landNumber": "string",
- "location": {
- "fullName": {
- "ar": "string",
- "en": "string"
}, - "id": 0,
- "lat": "string",
- "lon": "string",
- "path": "string"
}, - "mojDeedLocationDescription": "string",
- "plotNumber": "string",
- "price": {
- "amounts": {
- "daily": 0,
- "monthly": 0,
- "sale": 0,
- "weekly": 0,
- "yearly": 0
}, - "obligation": {
- "comment": "string",
- "enabled": true
}, - "type": "sale",
- "valueAffected": {
- "comment": "string",
- "enabled": true
}
}, - "size": 0,
- "street": {
- "direction": "North",
- "width": 0
}, - "type": "apartment"
}, - "type": "rera",
- "userConfirmedDataIsCorrect": true
}, - "createdAt": "2019-08-24T14:15:22Z",
- "createdBy": {
- "id": 0,
- "name": "string",
- "photos": {
- "thumbnail": "string"
}
}, - "ctsPriority": 0,
- "description": {
- "ar": "string",
- "en": "string"
}, - "developer": "string",
- "finishingType": "fully-finished",
- "floorNumber": "string",
- "furnishingType": "unfurnished",
- "hasGarden": true,
- "hasKitchen": true,
- "hasParkingOnSite": true,
- "id": "string",
- "landNumber": "string",
- "location": {
- "id": 0
}, - "media": {
- "images": [
- {
}
],
}, - "mojDeedLocationDescription": "string",
- "numberOfFloors": 0,
- "ownerName": "string",
- "parkingSlots": 0,
- "pfCategoryId": 0,
- "pfTypeId": 0,
- "plotNumber": "string",
- "plotSize": 0,
- "portals": {
- "propertyfinder": {
- "isLive": true,
- "name": "string",
- "publishedAt": "2019-08-24T14:15:22Z"
}
}, - "price": {
- "amounts": {
- "daily": 0,
- "monthly": 0,
- "sale": 0,
- "weekly": 0,
- "yearly": 0
}, - "downpayment": 0,
- "minimalRentalPeriod": 0,
- "mortgage": {
- "comment": "string",
- "enabled": true
}, - "numberOfCheques": 0,
- "numberOfMortgageYears": 0,
- "obligation": {
- "comment": "string",
- "enabled": true
}, - "onRequest": true,
- "paymentMethods": [
- "installments"
], - "type": "sale",
- "utilitiesInclusive": true,
- "valueAffected": {
- "comment": "string",
- "enabled": true
}
}, - "products": {
- "featured": {
- "createdAt": "2019-08-24T14:15:22Z",
- "expiresAt": "2019-08-24T14:15:22Z",
- "id": "string",
- "purchasedProductId": "string",
- "renewalEnabled": true
}, - "premium": {
- "createdAt": "2019-08-24T14:15:22Z",
- "expiresAt": "2019-08-24T14:15:22Z",
- "id": "string",
- "purchasedProductId": "string",
- "renewalEnabled": true
}, - "standard": {
- "createdAt": "2019-08-24T14:15:22Z",
- "expiresAt": "2019-08-24T14:15:22Z",
- "id": "string",
- "purchasedProductId": "string",
- "renewalEnabled": true
}
}, - "projectStatus": "completed",
- "qualityScore": {
- "color": "red",
- "details": {
- "description": {
- "color": "red",
- "group": "string",
- "help": "string",
- "helpAr": "string",
- "tag": "string",
- "tagAr": "string",
- "value": 0,
- "weight": 0
}, - "hasAgentUser": {
- "color": "red",
- "group": "string",
- "help": "string",
- "helpAr": "string",
- "tag": "string",
- "tagAr": "string",
- "value": 0,
- "weight": 0
}, - "image": {
- "color": "red",
- "group": "string",
- "help": "string",
- "helpAr": "string",
- "tag": "string",
- "tagAr": "string",
- "value": 0,
- "weight": 0
}, - "imageDiversity": {
- "color": "red",
- "group": "string",
- "help": "string",
- "helpAr": "string",
- "tag": "string",
- "tagAr": "string",
- "value": 0,
- "weight": 0
}, - "imageDuplicates": {
- "color": "red",
- "group": "string",
- "help": "string",
- "helpAr": "string",
- "tag": "string",
- "tagAr": "string",
- "value": 0,
- "weight": 0
}, - "imagesDimensions": {
- "color": "red",
- "group": "string",
- "help": "string",
- "helpAr": "string",
- "tag": "string",
- "tagAr": "string",
- "value": 0,
- "weight": 0
}, - "listingCompletion": {
- "color": "red",
- "group": "string",
- "help": "string",
- "helpAr": "string",
- "tag": "string",
- "tagAr": "string",
- "value": 0,
- "weight": 0
}, - "location": {
- "color": "red",
- "group": "string",
- "help": "string",
- "helpAr": "string",
- "tag": "string",
- "tagAr": "string",
- "value": 0,
- "weight": 0
}, - "priceRealism": {
- "color": "red",
- "group": "string",
- "help": "string",
- "helpAr": "string",
- "tag": "string",
- "tagAr": "string",
- "value": 0,
- "weight": 0
}, - "title": {
- "color": "red",
- "group": "string",
- "help": "string",
- "helpAr": "string",
- "tag": "string",
- "tagAr": "string",
- "value": 0,
- "weight": 0
}, - "titleDeed": {
- "color": "red",
- "group": "string",
- "help": "string",
- "helpAr": "string",
- "tag": "string",
- "tagAr": "string",
- "value": 0,
- "weight": 0
}, - "verified": {
- "color": "red",
- "group": "string",
- "help": "string",
- "helpAr": "string",
- "tag": "string",
- "tagAr": "string",
- "value": 0,
- "weight": 0
}
}, - "value": 0
}, - "reference": "string",
- "size": 0,
- "state": {
- "reasons": [
- {
- "ar": "string",
- "en": "string"
}
], - "stage": "draft",
- "type": "draft"
}, - "street": {
- "direction": "North",
- "width": 0
}, - "title": {
- "ar": "string",
- "en": "string"
}, - "type": "bulk-sale-unit",
- "uaeEmirate": "dubai",
- "unitNumber": "string",
- "updatedAt": "2019-08-24T14:15:22Z",
- "updatedBy": {
- "id": 0,
- "name": "string",
- "photos": {
- "thumbnail": "string"
}
}, - "verificationStatus": "string",
- "rnpm": {
- "state": "enabled",
- "enabledAt": "2019-08-24T14:15:22Z",
- "revokedAt": "2019-08-24T14:15:22Z",
- "reasons": [
- {
- "en": "string",
- "ar": "string"
}
]
}
}Deletes a listing by its ID.
Required scope: listings:full_access
| id required | string |
{- "id": "string",
- "state": {
- "type": "live_pending_deletion",
- "stage": "live",
- "reasons": [
- {
- "en": "string",
- "ar": "string"
}
]
}
}Calculates the publish price of a draft listing based on its parameters. This endpoint will return 404 for listings that do not exist or are not in the draft state
Required scope: listings:read
| id required | string The listing ID for which to calculate the publish price. |
[- {
- "feature": "publish",
- "purchasableProducts": [
- {
- "name": "string",
- "description": "string",
- "price": {
- "type": "credits",
- "full": 0,
- "discount": 0,
- "total": 0,
- "discounts": [
- {
- "name": "string",
- "percentage": 0
}
]
}, - "duration": {
- "unit": "day",
- "value": 0
}
}
]
}
]Publishes a listing to the PropertyFinder website. The listing must meet all the requirements for publication.
Required scope: listings:full_access
| id required | string |
{- "state": {
- "type": "draft",
- "stage": "draft",
- "reasons": [
- {
- "en": "string",
- "ar": "string"
}
]
}, - "id": "string"
}Unpublishes a listing from the PropertyFinder website. The listing will no longer be visible to users.
Required scope: listings:full_access
| id required | string |
{- "state": {
- "type": "draft",
- "stage": "draft",
- "reasons": [
- {
- "en": "string",
- "ar": "string"
}
]
}, - "id": "string"
}Upgrade a listing to premium or featured
Required scope: listings:full_access
| id required | string |
Listing upgrades request
| featureId required | string Enum: "featured" "premium" The feature to apply to the listing |
| productId required | string Product ID to purchase. Obtained from GET /upgrades response under 'purchasableProducts[].id'. Use this to buy a new boost. |
| renewalEnabled | boolean Default: true Whether to enable automatic renewal when the upgrade expires |
{- "featureId": "featured",
- "productId": "string",
- "renewalEnabled": true
}{- "state": {
- "type": "draft",
- "stage": "draft",
- "reasons": [
- {
- "en": "string",
- "ar": "string"
}
]
}, - "id": "string"
}Retrieve a list of available upgrade options for a specific listing.
Use includeBundles=true query parameter to include bundle products in addition to
credit-based products. Bundle products can be used when the client has bundle wallets available.
Product Types:
credits: Standard products purchasable with creditsbundle: Bundle products (Feature Bundle, Super Bundle) that use bundle wallet unitsBundle Products:
Required scope: listings:read
| id required | string |
| includeBundles | boolean Default: false When set to |
{- "options": [
- {
- "feature": "featured",
- "purchasedProducts": [
- {
- "id": "string",
- "name": "string",
- "description": "string"
}
], - "usedPurchasedProductIds": [
- "string"
], - "purchasableProducts": [
- {
- "id": "string",
- "name": "string",
- "description": "string",
- "price": {
- "type": "credits",
- "full": 0,
- "discount": 0,
- "total": 0
}, - "duration": {
- "unit": "day",
- "value": 0
}
}
]
}
]
}Enables RNPM (Rent Now Pay Monthly) for a listing. The listing must meet all RNPM eligibility criteria.
Required scope: listings:full_access
| id required | string |
{- "detail": "",
- "errors": [
- {
- "detail": "error reason"
}
], - "title": "Bad Request",
- "type": "SCHEMA_VALIDATION"
}Revokes RNPM (Rent Now Pay Monthly) for a listing. Requires reasons for revocation.
Required scope: listings:full_access
| id required | string |
RNPM revoke request
required | Array of objects non-empty List of reasons for RNPM revocation |
{- "reasons": [
- {
- "en": "string",
- "ar": "string"
}
]
}{- "detail": "",
- "errors": [
- {
- "detail": "error reason"
}
], - "title": "Bad Request",
- "type": "SCHEMA_VALIDATION"
}Returns either the property permit data or if project permit exists, the corresponding project details.
Required scope: compliances:read
| permitNumber required | string The DLD listing (permit) number to validate |
| licenseNumber required | string The company license number |
| permitType required | string The listing (permit) type to validate. |
| Accept-Language | string Default: en Enum: "en" "ar" Example: en Language code |
{- "status": "success",
- "data": [
- {
- "expiresAt": "2019-08-24T14:15:22Z",
- "permitNumber": "string",
- "permitStatusId": 0,
- "startedAt": "2019-08-24T14:15:22Z",
- "property": {
- "permitType": "string",
- "id": 0,
- "unitNumber": "string",
- "size": 0,
- "listingType": "string",
- "value": 0,
- "roomsCount": "string",
- "locationName": "string",
- "saleType": "string"
}, - "project": {
- "developerName": "string",
- "projectDescription": "string",
- "id": 0,
- "name": "string",
- "number": "string"
}
}
]
}This endpoint allows clients to retrieve a comprehensive and paginated list of listing verification submissions within the system. It supports advanced filtering through various query parameters such as submission ID, listing ID, listing reference, agent broker ID, status, and time ranges (createdAt, updatedAt, expiresAt). Clients can use these filters to narrow down the results to only the relevant submissions they are interested in.
Required scope: listing_verification:full_access
To provide more flexibility and context in the response, the API supports include parameters for embedding related resources such as submitted documents and historical status transitions. This avoids the need for additional round trips to fetch related data.
In addition, the endpoint supports customizable sorting (e.g., by creation date, status, expiration) and pagination controls to efficiently handle large data sets.
| filter[id] | string Comma-separated list of submission IDs. |
| filter[listingId] | string Comma-separated list of listing IDs. |
| filter[listingReference] | string Comma-separated list of listing references. |
| filter[publicProfileId] | string Comma-separated list of publicProfile IDs. |
| filter[status] | string Example: filter[status]=pending,approved,rejected,expired Comma-separated list of statuses. |
| filter[createdAt][from] | string <date-time> Example: filter[createdAt][from]=2025-04-30T09:54:18+04:00 Date and time in RFC 3339 format: |
| filter[createdAt][to] | string <date-time> Example: filter[createdAt][to]=2025-04-30T09:54:18+04:00 Date and time in RFC 3339 format: |
| filter[updatedAt][from] | string <date-time> Example: filter[updatedAt][from]=2025-04-30T09:54:18+04:00 Date and time in RFC 3339 format: |
| filter[updatedAt][to] | string <date-time> Example: filter[updatedAt][to]=2025-04-30T09:54:18+04:00 Date and time in RFC 3339 format: |
| filter[expiresAt][from] | string <date-time> Example: filter[expiresAt][from]=2025-04-30T09:54:18+04:00 Date and time in RFC 3339 format: |
| filter[expiresAt][to] | string <date-time> Example: filter[expiresAt][to]=2025-04-30T09:54:18+04:00 Date and time in RFC 3339 format: |
| include | string Example: include=document,history Comma-separated list of related entities to include in the response. |
| page | integer <int32> >= 1 Default: 1 Example: page=1 Page number, starts with 1. |
| perPage | integer <int32> [ 1 .. 100 ] Default: 50 Example: perPage=10 Number of items per page (max 100 allowed) |
| orderBy | string Example: orderBy=name Field to order by |
{- "submissions": [
- {
- "id": 10,
- "createdAt": "2019-08-24T14:15:22Z",
- "updatedAt": "2019-08-24T14:15:22Z",
- "listingId": "string",
- "listingReference": "AC-CLI",
- "publicProfileId": 1234,
- "status": "draft",
- "expiresAt": "2019-08-24T14:15:22Z",
- "history": [
- {
- "id": 12,
- "createdAt": "2019-08-24T14:15:22Z",
- "submissionId": 1234,
- "eventType": "in_work, approved, rejected",
- "eventDescription": "Submission approved",
- "eventData": {
- "checks": [
- {
- "id": 111,
- "checkName": "check_name",
- "category": "category",
- "status": "success",
- "rejectionReason": "reason",
- "comment": "string",
- "details": {
- "imageIds": [
- 1,
- 2,
- 3
]
}
}
], - "tags": [
- "string"
]
}
}
], - "documents": [
- {
- "id": 123,
- "createdAt": "2019-08-24T14:15:22Z",
- "updatedAt": "2019-08-24T14:15:22Z",
- "submissionId": 123,
- "type": "identification",
- "contentLength": 123456,
- "contentType": "application/pdf",
- "expiresAt": "2021-09-12T00:00:00Z",
- "presignedUrl": "string"
}
], - "rejectionReason": "Listing is not completed"
}
], - "pageMetadata": {
- "total": 100,
- "page": 1,
- "perPage": 10,
- "totalPages": 10,
- "nextPage": 2,
- "prevPage": 1
}
}This endpoint allows clients to initiate a new listing verification submission by providing the listing details, agent/broker identity, and supporting documents grouped by category.
Required scope: listing_verification:full_access
The request must include the listingId and agentBrokerId fields, which associate the submission with a specific listing and the responsible agent or broker. Optionally, clients can attach categorized documents to support the verification process. Document categories include: authorization, ownership, identification, representationPao, representationId, and others.
| listingId required | string |
| publicProfileId required | integer |
object |
{- "listingId": "string",
- "publicProfileId": 0,
- "documents": {
- "authorization": [
- "string"
], - "ownership": [
- "string"
], - "identification": [
- "string"
], - "representationPao": [
- "string"
], - "representationId": [
- "string"
], - "others": [
- "string"
]
}
}{- "submissionId": 0
}This endpoint allows clients to resubmit a previously rejected verification submission, but it is strictly limited to auto submissions — a type of submission that is automatically generated by the system without requiring supporting documents from the user.
Required scope: listing_verification:full_access
Auto submissions are typically created when a listing is eligible for automated verification, and they are often rejected due to issues that can be resolved without requiring the agent or broker to manually upload new documentation.
When using this endpoint, clients must provide the listingId of the listing whose auto submission needs to be resubmitted. The system will locate the most recent rejected auto submission for that listing and, if found and eligible, transition its status back to pending. This re-initiates the verification process without requiring the user to create a brand new submission or re-upload any documents.
This endpoint is useful in scenarios such as: • The rejection reason was temporary (e.g., backend data mismatch that has since been resolved) • The listing has been updated and now satisfies automated checks • A manual override or external fix has made the listing verifiable again
| submissionId required | integer <int64> The ID of the listing verification submission to be resubmitted. |
{- "detail": "",
- "errors": [
- {
- "detail": "error reason"
}
], - "title": "Bad Request",
- "type": "SCHEMA_VALIDATION"
}This endpoint allows clients to check whether a specific listing qualifies to begin the verification process. Before a verification submission is created—especially for auto submissions that don’t require documents—this check determines whether the listing meets all necessary criteria.
The evaluation includes both technical and business rules such as: • Listing location (e.g., certain cities may be excluded) • Listing quality metrics (like score thresholds) • Agent or broker eligibility • Duplicate submission prevention
The response includes two key flags: • eligible: Indicates whether the listing qualifies for any kind of verification. • autoSubmit: Indicates whether the listing is eligible for auto submission (which requires no documents or manual input).
If eligible is false, the response may also contain a helpDetails object to help the client understand why the listing is not eligible and how to resolve the issue.
This check should be performed before attempting to create or resubmit a verification
Required scope: listing_verification:full_access
| listingId required | string |
{- "listingId": "string"
}{- "eligible": true,
- "autoSubmit": true,
- "helpDetails": { }
}Retrieves a list of locations matching the search term. You can use the fields like filter[id], filter[type] and filter[parent] to narrow down the search to the most relevant locations.
Required scope: locations:read
| page | integer <int32> >= 1 Default: 1 Example: page=1 Page number, starts with 1. |
| perPage | integer <int32> [ 1 .. 100 ] Default: 50 Example: perPage=10 Number of items per page (max 100 allowed) |
| search required | string >= 2 characters Example: search=Maple 1 Search term to filter entity |
| filter[id] | string Example: filter[id]=1234 Location ID to filter the response. |
| filter[type] | string Enum: "REGION" "GOVERNORATE" "CITY" "TOWN" "VILLAGE" "DISTRICT" "STREET" "COMMUNITY" "SUBCOMMUNITY" "PROJECT" "TOWER" "COMPOUND" "AREA" "PROVINCE" "SUBDISTRICT" Example: filter[type]=AREA Location type to filter the response. |
| filter[parent] | string Example: filter[parent]=Dubai, Dubai Hills Estate Comma-separated list of locations to narrow down search results by location hierarchy. This filter helps disambiguate locations with similar names across different areas. For example, when searching for "Maple 1", without this filter you might get results from multiple areas - Maple 1 in Dubai Hills Estate and Maple 1 in Jumeirah Village Circle. To get only the Dubai Hills Estate location, set the |
| Accept-Language | string Default: en Enum: "en" "ar" Example: en Language code |
{- "data": [
- {
- "id": 1234,
- "type": "AREA",
- "name": "Dubai",
- "tree": [
- {
- "id": 1234,
- "type": "CITY",
- "name": "Dubai"
}
], - "coordinates": {
- "lat": 25.276987,
- "lng": 55.296249
}
}
], - "pagination": {
- "total": 100,
- "page": 1,
- "perPage": 10,
- "totalPages": 10,
- "nextPage": 2,
- "prevPage": 1
}
}Fetch leads, filtering on type, status, date, assigned user/agent etc.
Required scope: leads:read
Note: Project leads do not generate a lead.created webhook. They only trigger lead.assigned or lead.updated notifications.
| page | integer <int32> >= 1 Default: 1 Example: page=1 Page number, starts with 1. |
| perPage | number [ 1 .. 50 ] Default: 50 Example: perPage=20 Number of items per page (max 50 allowed) |
| orderBy | string Example: orderBy=name Field to order by |
| orderDirection | string Enum: "asc" "desc" Example: orderDirection=asc Order direction |
| search | string Example: search=entity_name Search term to filter entity |
| id | Array of strings |
| status | Array of strings Items Enum: "sent" "delivered" "read" "replied" Filter leads by status.
|
| channel | Array of strings Items Enum: "whatsapp" "email" "call" |
| entityType | Array of strings Items Enum: "listing" "project" "developer" "agent" "company" Project leads represent PRIMARY PLUS leads. |
| publicProfileId | Array of integers |
| listingId | Array of strings |
| listingReference | Array of strings |
| listingCategory | Array of strings Items Enum: "commercial" "residential" |
| listingOffering | Array of strings Items Enum: "sale" "rent" |
| developerId | Array of strings |
| projectId | Array of strings |
| senderName | Array of strings |
| senderPhone | Array of strings |
| senderEmail | Array of strings |
| tag | Array of strings |
| excludeTag | Array of strings |
| createdAtFrom | string <date-time> Example: createdAtFrom=2025-04-30T09:54:18+04:00 Date and time in RFC 3339 format: YYYY-MM-DDTHH:MM:SSZ Optional filter to specify the earliest creation date. The date must not be older than 3 months from the current date. |
| createdAtTo | string <date-time> Example: createdAtTo=2025-04-30T09:54:18+04:00 Date and time in RFC 3339 format: |
{- "data": [
- {
- "id": "call_lead_1992",
- "entityType": "listing",
- "channel": "whatsapp",
- "status": "sent",
- "enrichment": {
- "property1": "string",
- "property2": "string"
}, - "distributionType": "project_cta",
- "publicProfile": {
- "id": 0
}, - "sender": {
- "name": "string",
- "contacts": [
- {
- "type": "email",
- "value": "string"
}
]
}, - "listing": {
- "id": "string",
- "reference": "string"
}, - "project": {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08"
}, - "developer": {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08"
}, - "call": {
- "talkTime": 0,
- "waitTime": 0,
}, - "tags": [
- "string"
], - "createdAt": "2019-08-24T14:15:22Z"
}
], - "pagination": {
- "total": 100,
- "page": 1,
- "perPage": 10,
- "totalPages": 10,
- "nextPage": 2,
- "prevPage": 1
}
}Retrieve detailed information about a specific project
Required scope: projects:read
| id required | string |
| Accept-Language | string Default: en Enum: "en" "ar" Example: en Language code |
{- "id": "string",
- "title": {
- "en": "string",
- "ar": "string"
}, - "developer": {
- "id": "string",
- "name": {
- "en": "string",
- "ar": "string"
}
}, - "location": {
- "id": "string",
- "name": {
- "en": "string",
- "ar": "string"
}
}, - "dldId": "string",
- "startingPrice": "string"
}Retrieve Public Profile Statistics data (only available for countries where SuperAgent is launched (e.g. AE, QA, BH etc.)
Required scope: statistics:read
| search | string Example: search=entity_name Search term to filter entity |
| page | integer <int32> >= 1 Default: 1 Example: page=1 Page number, starts with 1. |
| perPage | integer <int32> [ 1 .. 100 ] Default: 50 Example: perPage=10 Number of items per page (max 100 allowed) |
| orderBy | string Example: orderBy=name Field to order by |
| orderDirection | string Enum: "asc" "desc" Example: orderDirection=asc Order direction |
{- "data": [
- {
- "id": 0,
- "name": "string",
- "imageUrl": "string",
- "metrics": {
- "verification": {
- "type": "string",
- "value": "unverified",
- "pass": true
}, - "listingsBlacklistedCount": {
- "type": "string",
- "value": "string",
- "pass": true
}, - "listingsLiveCount": {
- "type": "string",
- "value": "string",
- "pass": true
}, - "leadsCount": {
- "type": "string",
- "value": "string",
- "pass": true
}, - "transactionsCount": {
- "type": "string",
- "value": "string",
- "pass": true
}, - "transactionsDaysSinceLast": {
- "type": "string",
- "value": "string"
}, - "ratingAverage": {
- "type": "string",
- "value": "string",
- "pass": true
}, - "ratingsCount": {
- "type": "string",
- "value": "string"
}, - "responseRate": {
- "type": "string",
- "value": "string",
- "pass": true
}, - "responseTime": {
- "type": "string",
- "value": "string",
- "pass": true
}, - "qualityScoreAvg": {
- "type": "string",
- "value": "string",
- "pass": true
}
}
}
], - "pagination": {
- "total": 100,
- "page": 1,
- "perPage": 10,
- "totalPages": 10,
- "nextPage": 2,
- "prevPage": 1
}, - "sort": {
- "by": "string",
- "direction": "asc"
}
}Retrieves the credit balance information including the including total, remaining, and used credits, as well as the billing cycle dates.
Required scope: credits:read
| publicProfileId | integer The public profile ID of the user to retrieve the balance for. If left empty, the credit balance information for the company is returned. |
{- "total": 138361,
- "remaining": 111278,
- "used": 27083,
- "cycle": {
- "startDate": "2019-08-24T14:15:22Z",
- "endDate": "2019-08-24T14:15:22Z"
}
}Webhooks are HTTP callbacks that are triggered by specific events in the system. They allow you to receive real-time notifications about changes or actions that occur within the system, such as lead creation, updates, or other relevant events.
Webhooks are typically used to integrate with external systems or services, enabling you to automate workflows and respond to events as they happen.
For example, when a new lead is created, a webhook can be triggered to send the lead data to an external CRM system or notify a third-party service.
Webhooks are configured to send HTTP POST requests to a specified URL, containing relevant data about the event that occurred. This allows you to process the data in real-time and take appropriate actions based on the received information.
It is possible to create multiple subscriptions for the same event type. Each subscription operates independently and will receive a separate delivery when the corresponding event is emitted.
If a secret was defined during the event subscription setup, each event delivery will include an HMAC-SHA256 signature.
X-Signature HTTP header as a hexadecimal string.If no secret is defined, the signature header will be omitted.
Creates a new event subscription
Required scope: webhooks:full_access
| eventId required | string Enum: "user.created" "user.updated" "user.deleted" "user.activated" "user.deactivated" "lead.created" "lead.updated" "lead.assigned" "publicProfile.verification.approved" "publicProfile.verification.rejected" "listing.published" "listing.unpublished" "listing.action" The event type that will trigger the webhook. This can be one of the predefined events. |
| callbackUrl required | string <uri> |
| secret | string <= 32 characters A secret key used to sign the webhook payload(HMAC). This is optional and can be used for additional security. |
{- "eventId": "user.created",
- "secret": "pF3Z9km2L7xQhR8dBnAeTfYu"
}{- "eventId": "users.created",
- "createdAt": "2021-01-01T00:00:00Z"
}Deletes an event subscription
Required scope: webhooks:full_access
| eventId required | string Example: agent.created Event ID |
{- "detail": "unauthorized",
- "title": "Unauthorized",
- "type": "AUTHENTICATION"
}Triggered when a new user is created
Required scope: users:read
| id required | string <uuid> Unique identifier of the event |
| type required | string Value: "user.created" Event type indicating a new user was created |
| timestamp required | string <date-time> Timestamp of the event |
required | object Details of the entity associated with the event |
required | object Additional details for user events |
{- "id": "554f3eaf-814a-4068-80b8-7beaaedb7194",
- "type": "user.created",
- "timestamp": "2025-08-24T14:15:22Z",
- "entity": {
- "id": "string",
- "type": "user"
}, - "payload": {
- "email": "example@propertyfinder.ae"
}
}Triggered when a user is updated
Required scope: users:read
| id required | string <uuid> Unique identifier of the event |
| type required | string Value: "user.updated" Event type indicating an user was updated |
| timestamp required | string <date-time> Timestamp of the event |
required | object Details of the entity associated with the event |
required | object Additional user update details |
{- "id": "554f3eaf-814a-4068-80b8-7beaaedb7194",
- "type": "user.updated",
- "timestamp": "2025-08-24T14:15:22Z",
- "entity": {
- "id": "string",
- "type": "user"
}, - "payload": {
- "email": "user@example.com",
- "changes": [
- {
- "fieldName": "string",
- "oldValue": "string",
- "newValue": "string"
}
]
}
}Triggered when a user is deleted
Required scope: users:read
| id required | string <uuid> Unique identifier of the event |
| type required | string Value: "user.deleted" Event type indicating an user was deleted |
| timestamp required | string <date-time> Timestamp of the event |
required | object Details of the entity associated with the event |
required | object Additional details for user events |
{- "id": "554f3eaf-814a-4068-80b8-7beaaedb7194",
- "type": "user.deleted",
- "timestamp": "2025-08-24T14:15:22Z",
- "entity": {
- "id": "string",
- "type": "user"
}, - "payload": {
- "email": "example@propertyfinder.ae"
}
}Triggered when a user is activated
Required scope: users:read
| id required | string <uuid> Unique identifier of the event |
| type required | string Value: "user.activated" Event type indicating an user was activated |
| timestamp required | string <date-time> Timestamp of the event |
required | object Details of the entity associated with the event |
required | object Additional details for user events |
{- "id": "554f3eaf-814a-4068-80b8-7beaaedb7194",
- "type": "user.activated",
- "timestamp": "2025-08-24T14:15:22Z",
- "entity": {
- "id": "string",
- "type": "user"
}, - "payload": {
- "email": "example@propertyfinder.ae"
}
}Triggered when a user is deactivated
Required scope: users:read
| id required | string <uuid> Unique identifier of the event |
| type required | string Value: "user.deactivated" Event type indicating an user was deactivated |
| timestamp required | string <date-time> Timestamp of the event |
required | object Details of the entity associated with the event |
required | object Additional details for user events |
{- "id": "554f3eaf-814a-4068-80b8-7beaaedb7194",
- "type": "user.deactivated",
- "timestamp": "2025-08-24T14:15:22Z",
- "entity": {
- "id": "string",
- "type": "user"
}, - "payload": {
- "email": "example@propertyfinder.ae"
}
}Triggered when a new lead is created.
Required scope: leads:read
Important: Will not trigger for new project leads. Project leads only generate a lead.assigned or lead.updated webhook notification.
| id required | string <uuid> Unique identifier of the event |
| type required | string Value: "lead.created" Event type indicating a lead was created |
| timestamp required | string <date-time> Timestamp of the event |
required | object Details of the entity associated with the event |
required | object Additional details for lead events |
{- "id": "lead-created-12345678",
- "type": "lead.created",
- "timestamp": "2025-08-24T14:15:22Z",
- "entity": {
- "id": "string",
- "type": "lead"
}, - "payload": {
- "channel": "whatsapp",
- "status": "sent",
- "entityType": "listing",
- "publicProfile": {
- "id": 123
}, - "listing": {
- "id": "01JZ50J63YP6BZB49N0BZ8M3T6",
- "reference": "01JZ50J63YP6BZB49N0BZ8M3T6"
}, - "project": {
- "id": "123e4567-e89b-12d3-a456-426655440000"
}, - "developer": {
- "id": "123e4567-e89b-12d3-a456-426655440000"
}, - "sender": {
- "name": "Jane Doe",
- "contacts": [
- {
- "type": "phone",
- "value": "+971555555555"
}
]
}
}
}Triggered when a new lead is updated
Required scope: leads:read
| id required | string <uuid> Unique identifier of the event |
| type required | string Value: "lead.updated" Event type indicating a lead was updated |
| timestamp required | string <date-time> Timestamp of the event |
required | object Details of the entity associated with the event |
required | object Additional details for lead events |
{- "id": "lead-updated-12345678",
- "type": "lead.updated",
- "timestamp": "2025-08-24T14:15:22Z",
- "entity": {
- "id": "string",
- "type": "lead"
}, - "payload": {
- "channel": "whatsapp",
- "status": "sent",
- "entityType": "listing",
- "publicProfile": {
- "id": 123
}, - "listing": {
- "id": "01JZ50J63YP6BZB49N0BZ8M3T6",
- "reference": "01JZ50J63YP6BZB49N0BZ8M3T6"
}, - "project": {
- "id": "123e4567-e89b-12d3-a456-426655440000"
}, - "developer": {
- "id": "123e4567-e89b-12d3-a456-426655440000"
}, - "sender": {
- "name": "Jane Doe",
- "contacts": [
- {
- "type": "phone",
- "value": "+971555555555"
}
]
}
}
}Triggered when a new lead is assigned (It used in new project leads mainly)
Required scope: leads:read
| id required | string <uuid> Unique identifier of the event |
| type required | string Value: "lead.assigned" Event type indicating a lead was assigned |
| timestamp required | string <date-time> Timestamp of the event |
required | object Details of the entity associated with the event |
required | object Additional details for lead events |
{- "id": "lead-assigned-12345678",
- "type": "lead.assigned",
- "timestamp": "2025-08-24T14:15:22Z",
- "entity": {
- "id": "string",
- "type": "lead"
}, - "payload": {
- "channel": "whatsapp",
- "status": "sent",
- "entityType": "listing",
- "publicProfile": {
- "id": 123
}, - "listing": {
- "id": "01JZ50J63YP6BZB49N0BZ8M3T6",
- "reference": "01JZ50J63YP6BZB49N0BZ8M3T6"
}, - "project": {
- "id": "123e4567-e89b-12d3-a456-426655440000"
}, - "developer": {
- "id": "123e4567-e89b-12d3-a456-426655440000"
}, - "sender": {
- "name": "Jane Doe",
- "contacts": [
- {
- "type": "phone",
- "value": "+971555555555"
}
]
}
}
}Triggered when a public profile verification state is changed to 'approved'
Required scope: users:read
| id required | string <uuid> Unique identifier of the event |
| type required | string Value: "publicProfile.verification.approved" Event type indicating a public profile verification was approved |
| timestamp required | string <date-time> Timestamp of the event |
required | object Details of the entity associated with the event |
required | object Additional details for public profile verification approved event |
{- "id": "554f3eaf-814a-4068-80b8-7beaaedb7194",
- "type": "publicProfile.verification.approved",
- "timestamp": "2025-08-24T14:15:22Z",
- "entity": {
- "id": "string",
- "type": "publicProfile"
}, - "payload": {
- "email": "example@propertyfinder.ae"
}
}Triggered when a public profile verification state is changed to 'rejected'
Required scope: users:read
| id required | string <uuid> Unique identifier of the event |
| type required | string Value: "publicProfile.verification.rejected" Event type indicating a public profile verification was rejected |
| timestamp required | string <date-time> Timestamp of the event |
required | object Details of the entity associated with the event |
required | object Additional details for public profile verification rejected event |
{- "id": "554f3eaf-814a-4068-80b8-7beaaedb7194",
- "type": "publicProfile.verification.rejected",
- "timestamp": "2025-08-24T14:15:22Z",
- "entity": {
- "id": "string",
- "type": "publicProfile"
}, - "payload": {
- "email": "example@propertyfinder.ae",
- "reason": "Invalid BRN"
}
}Triggered when a listing is published
Required scope: listings:read
| id required | string <uuid> Unique identifier of the event |
| type required | string Value: "listing.published" Event type indicating a listing was published |
| timestamp required | string <date-time> Timestamp of the event |
required | object Details of the entity associated with the event |
| payload required | object Empty payload as this event does not require additional data |
{- "id": "554f3eaf-814a-4068-80b8-7beaaedb7194",
- "type": "listing.published",
- "timestamp": "2025-08-24T14:15:22Z",
- "entity": {
- "id": "01K0YB4HEKM08V901DVJ5ATVYF",
- "type": "listing"
}, - "payload": { }
}Triggered when a listing is unpublished
Required scope: listings:read
| id required | string <uuid> Unique identifier of the event |
| type required | string Value: "listing.unpublished" Event type indicating a listing was unpublished |
| timestamp required | string <date-time> Timestamp of the event |
required | object Details of the entity associated with the event |
| payload required | object Empty payload as this event does not require additional data |
{- "id": "554f3eaf-814a-4068-80b8-7beaaedb7194",
- "type": "listing.unpublished",
- "timestamp": "2025-08-24T14:15:22Z",
- "entity": {
- "id": "01K0YB4HEKM08V901DVJ5ATVYF",
- "type": "listing"
}, - "payload": { }
}Triggered when an action is created, updated, or expires for a listing.
Required scope: listings:read
Actions are compliance and quality notifications created when a listing violates business or regulatory rules. Each action identifies a specific issue that requires resolution within a defined grace period.
If you don't resolve the issue before the deadline, enforcement actions may be automatically applied, such as unpublishing the listing or triggering permit revalidation.
Examples:
DLD Permit Mismatch: If DLD permit data is mismatched, a listing_trakheesi_checks action is created.
You must correct the permit information before the deadline, or the listing may be automatically unpublished.
Incomplete Location: If your listing doesn't provide a complete location path (e.g., only "Southwest Apartments" instead of
"Southwest Apartments 1" or "Southwest Apartments 2"), a listing_location_update_required action is created.
Update to a more specific location to keep your Quality Score unaffected.
This single webhook event type covers all action lifecycle changes (pending, dispute_created, expired). Use the status field to determine the specific state:
pending: Action has been newly created and is awaiting client responsedispute_created: Client has disputed the actionexpired: Action has expired (see reason field for details)When status is expired, the reason field provides context:
RESOLVED: Client successfully resolved the issueACTION_TIMEOUT: Client did not take action before the deadlineDISPUTE_ACCEPTED: Client's dispute was accepted by the PF Support teamDISPUTE_REJECTED: Client's dispute was rejected by the PF Support teamDANGLING_PARENT: Parent action expired because all child actions expired with no pending children remainingThe actionType field indicates the specific compliance or quality issue. Actions are categorized by country:
| Country | Action Types |
|---|---|
| KSA | rega_invalid_permit, rega_expired_permit |
| UAE | DLD Permit issues: incorrect_permit_type, unique_permit_type, invalid_permit_type, listing_trakheesi_invalid, listing_trakheesi_checks, project_permit_violationADREC Permit issues: listing_adrec_expire_soon, listing_adrec_invalid, adrec_sub_permit_already_used, adrec_sub_permit_expired, adrec_sub_permit_required, adrec_sub_permits_exhaustedVerification issues: listing_unable_to_verifyAgent License issues: listing_invalid_brn, listing_invalid_blnTransaction-related: claimed_transaction, listing_delist_transacted |
| Common for all countries | Property status: unavailable_propertyQuality issues: listing_duplicate, listing_price_issue, listing_location_update_required |
The optional expireAction field specifies what happens if the client doesn't resolve the issue before expiration:
listing_unpublish: The listing will be taken down from live staterevalidate_permit: The permit will be revalidatedNot all actions have an expire action defined.
The optional remarks field contains additional comments from the PF Support team to provide more context about the action.
This is typically used when extra clarification or specific instructions are needed beyond the standard action message.
| id required | string Unique identifier of the event |
| type required | string Value: "listing.action" Event type indicating an action on a listing was created |
| timestamp required | string <date-time> Timestamp of the event |
required | object Details of the entity associated with the event |
required | object Additional details for listing action events |
{- "id": "action-created-15582193",
- "type": "listing.action",
- "timestamp": "2025-08-24T14:15:22Z",
- "entity": {
- "id": "01K0YB4HEKM08V901DVJ5ATVYF",
- "type": "listing"
}, - "payload": {
- "actionType": "listing_location_update_required",
- "status": "pending",
- "reason": "RESOLVED",
- "entityType": "listing",
- "expiresAt": "2025-11-16T19:31:13Z",
- "expireAction": "listing_unpublish",
- "message": {
- "ar": "يمكن تحديث هذا الإعلان إلى موقع أكثر تحديدًا (مثل Southwest Apartments 1, Southwest Apartments 2). يرجى إجراء التحديث للحفاظ على درجة الجودة الخاصة بك دون تأثر.",
- "en": "This listing can be updated to a more specific location (e.g. Southwest Apartments 1, Southwest Apartments 2). Please make the update to keep your Quality Score unaffected."
}, - "remarks": "A discrepancy was found in the specified location. Please verify the correct address and update accordingly.",
- "agent": {
- "id": 123456
}, - "listing": {
- "id": "01K0YB4HEKM08V901DVJ5ATVYF",
- "reference": "PF-REF-12345"
}
}
}