Make your first request
Create an API client in the admin dashboard. Copy the API key and secret when they are shown, then send both values as request headers.
https://dubaioffplanhub.com/api/v1curl --request GET \
--url "https://dubaioffplanhub.com/api/v1/projects?limit=25" \
--header "X-API-Key: YOUR_API_KEY" \
--header "X-API-Secret: YOUR_API_SECRET"
Keep your secret on the server. It is displayed only once when a client is created or regenerated.
Authentication
Every API request requires an active API key and API secret. Pass the credentials in HTTP headers over HTTPS in production.
| Header | Required value |
|---|---|
X-API-Key | Your client API key |
X-API-Secret | Your client API secret |
Suspended or revoked clients cannot make requests. API usage, response status and request timing are recorded for active clients.
Endpoints
| Method | Endpoint | Description |
|---|---|---|
| GET | /projects | Paginated Dubai off-plan projects. |
| GET | /projects/{slug} | One project by its URL slug. |
| GET | /communities | Available communities with project totals. |
| GET | /communities/{slug} | A community and its projects. |
| GET | /developers | Available developers with project totals. |
| GET | /developers/{slug} | A developer and its projects. |
Endpoint paths are relative to https://dubaioffplanhub.com/api/v1.
Filters and pagination
The projects collection accepts the following optional query parameters.
| Parameter | Example | Purpose |
|---|---|---|
community | jvc | Filter by a community slug or name. |
developer | emaar | Filter by a developer slug or name. |
status | under-construction | Filter by project status. |
property_type | apartment | Filter by property type. |
min_price | 1000000 | Set a minimum starting price in AED. |
max_price | 3000000 | Set a maximum starting price in AED. |
q | marina | Search project names, communities and developers. |
page | 2 | Page number. Defaults to 1. |
limit | 25 | Results per page. Defaults to 25; maximum is 100. |
https://dubaioffplanhub.com/api/v1/projects?community=jvc&property_type=apartment&min_price=1000000&page=1&limit=25
Response format
Successful requests return JSON with success, data and, for collections, pagination metadata.
{
"success": true,
"data": [{"name": "…", "slug": "…", "community": "…", "developer": "…", "price_from": "…"}],
"meta": {"page": 1, "limit": 25, "total": 562, "total_pages": 23}
}
Fields reflect the current project records. Values unavailable in the source data may be empty or null.
Errors and rate limits
| HTTP status | Code | Meaning |
|---|---|---|
| 401 | UNAUTHORIZED | The API key or secret is missing or invalid. |
| 404 | NOT_FOUND | The requested resource does not exist. |
| 429 | RATE_LIMITED | The client has reached its daily request allowance. |
| 503 | SERVICE_UNAVAILABLE | The API cannot connect to its data source. |
{"success":false,"error":{"code":"UNAUTHORIZED","message":"Invalid API credentials."}}
Request limits are assigned to each client by an administrator. Check the API client area for your current status and daily allowance.