Public API for retrieving off-plan property data. Documentation includes only endpoints for off-plan properties.
Backend Technology:
Express.js 5.1 • Node.js • TypeScript • TypeORM • PostgreSQL
/api/public/data
API Key
Get all off-plan properties with locations, developers, and facilities in one request
💡 How to get properties:
Use this endpoint to retrieve all off-plan properties. Properties are located in the data.properties array in the response.
curl -X GET "https://admin.pro-part.online/api/public/data" \ -H "Content-Type: application/json" \ -H "X-API-Key: your_api_key" \ -H "X-API-Secret: your_api_secret"
{
"success": true,
"data": {
"properties": [
{
"id": "uuid",
"propertyType": "off-plan",
"name": "string",
"description": "string",
"photos": ["string (URLs)"],
"country": { "id": "uuid", "nameEn": "string", "nameRu": "string", "nameAr": "string", "code": "string" },
"city": { "id": "uuid", "nameEn": "string", "nameRu": "string", "nameAr": "string" },
"area": "string (format: 'areaName, cityName')",
"developer": { "id": "uuid", "name": "string", "logo": "string", "description": "string" },
"facilities": [{ "id": "uuid", "nameEn": "string", "nameRu": "string", "nameAr": "string", "iconName": "string" }],
"units": [{ "id": "uuid", "unitId": "string", "type": "apartment" | "villa" | "penthouse" | "townhouse", "price": "number", "totalSize": "number", "balconySize": "number", "planImage": "string" }],
"priceFrom": "number",
"priceFromAED": "number",
"sizeFrom": "number",
"sizeTo": "number",
"sizeFromSqft": "number",
"sizeToSqft": "number",
"bedroomsFrom": "number",
"bedroomsTo": "number",
"bathroomsFrom": "number",
"bathroomsTo": "number",
"paymentPlan": "string",
"latitude": "number",
"longitude": "number",
"createdAt": "ISO date",
"updatedAt": "ISO date"
}
],
"countries": [...],
"cities": [...],
"areas": [...],
"developers": [...],
"facilities": [...]
}
}
/api/public/areas
Public
Get all areas with off-plan property counts
curl -X GET "https://admin.pro-part.online/api/public/areas" \ -H "Content-Type: application/json"
{
"success": true,
"data": [
{
"id": "uuid",
"nameEn": "string",
"nameRu": "string",
"nameAr": "string",
"cityId": "uuid",
"offPlanCount": "number"
}
]
}
/api/public/developers
Public
Get all developers with off-plan property counts
curl -X GET "https://admin.pro-part.online/api/public/developers" \ -H "Content-Type: application/json"
{
"success": true,
"data": [
{
"id": "uuid",
"name": "string",
"logo": "string (URL)",
"description": "string",
"offPlanCount": "number"
}
]
}
All error responses follow a consistent format. The API uses standard HTTP status codes to indicate the type of error.
Invalid or missing API credentials.
{
"success": false,
"error": "Unauthorized",
"message": "Invalid API key or secret",
"statusCode": 401
}
The requested resource was not found.
{
"success": false,
"error": "Not Found",
"message": "Resource not found",
"statusCode": 404
}
Rate limit exceeded.
{
"success": false,
"error": "Too Many Requests",
"message": "Rate limit exceeded. Please try again later.",
"statusCode": 429,
"retryAfter": 60
}
An unexpected server error occurred.
{
"success": false,
"error": "Internal Server Error",
"message": "An unexpected error occurred",
"statusCode": 500
}
Some endpoints support query parameters for filtering, sorting, and pagination.
| Parameter | Type | Required | Description |
|---|---|---|---|
| propertyType | string | No | Filter by property type: "off-plan" or "secondary" |
| cityId | string (UUID) | No | Filter properties by city ID |
| developerId | string (UUID) | No | Filter properties by developer ID |
| page | number | No | Page number for pagination (default: 1) |
| limit | number | No | Number of items per page (default: 20, max: 100) |
| sortBy | string | No | Sort field: "name", "priceFrom", "createdAt" (default: "createdAt") |
| sortOrder | string | No | Sort order: "asc" or "desc" (default: "desc") |
curl -X GET "https://admin.pro-part.online/api/public/data?propertyType=off-plan&cityId=123e4567-e89b-12d3-a456-426614174000&page=1&limit=20&sortBy=priceFrom&sortOrder=asc" \ -H "Content-Type: application/json" \ -H "X-API-Key: your_api_key" \ -H "X-API-Secret: your_api_secret"
To ensure fair usage and maintain API performance, rate limiting is applied to all API endpoints.
Rate Limit:
100 requests per minute per API key
Rate Limit Headers:
The API includes rate limit information in response headers:
X-RateLimit-Limit: 100
X-RateLimit-Remaining: 95
X-RateLimit-Reset: 1640995200
Exceeding the Limit:
When the rate limit is exceeded, the API returns a 429 Too Many Requests status code with a retryAfter field indicating when you can retry (in seconds).
To use API endpoints that require authentication, you need an API Key and API Secret. Contact the administrator to obtain access.
X-API-Key: your_api_key
X-API-Secret: your_api_secret
https://admin.pro-part.online/api