Off-Plan Properties API Documentation

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

GET /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.

Request Example

cURL
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"

Response Schema

JSON Schema
{
  "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": [...]
  }
}
GET /api/public/areas Public

Get all areas with off-plan property counts

Request Example

cURL
curl -X GET "https://admin.pro-part.online/api/public/areas" \
  -H "Content-Type: application/json"

Response Schema

JSON Schema
{
  "success": true,
  "data": [
    {
      "id": "uuid",
      "nameEn": "string",
      "nameRu": "string",
      "nameAr": "string",
      "cityId": "uuid",
      "offPlanCount": "number"
    }
  ]
}
GET /api/public/developers Public

Get all developers with off-plan property counts

Request Example

cURL
curl -X GET "https://admin.pro-part.online/api/public/developers" \
  -H "Content-Type: application/json"

Response Schema

JSON Schema
{
  "success": true,
  "data": [
    {
      "id": "uuid",
      "name": "string",
      "logo": "string (URL)",
      "description": "string",
      "offPlanCount": "number"
    }
  ]
}

Error Responses

All error responses follow a consistent format. The API uses standard HTTP status codes to indicate the type of error.

401 Unauthorized

Invalid or missing API credentials.

{
  "success": false,
  "error": "Unauthorized",
  "message": "Invalid API key or secret",
  "statusCode": 401
}
404 Not Found

The requested resource was not found.

{
  "success": false,
  "error": "Not Found",
  "message": "Resource not found",
  "statusCode": 404
}
429 Too Many Requests

Rate limit exceeded.

{
  "success": false,
  "error": "Too Many Requests",
  "message": "Rate limit exceeded. Please try again later.",
  "statusCode": 429,
  "retryAfter": 60
}
500 Internal Server Error

An unexpected server error occurred.

{
  "success": false,
  "error": "Internal Server Error",
  "message": "An unexpected error occurred",
  "statusCode": 500
}

Query Parameters

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")

Example with Query Parameters

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"

Rate Limiting

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).

API Key Authentication

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

Base URL

https://admin.pro-part.online/api