519 lines
12 KiB
Markdown
519 lines
12 KiB
Markdown
# Dubai Analytics Platform API Documentation
|
|
|
|
## Overview
|
|
|
|
The Dubai Analytics Platform provides a comprehensive REST API for accessing real estate market data, analytics, and insights. All API endpoints require authentication via API key.
|
|
|
|
## Base URL
|
|
|
|
```
|
|
http://localhost:8000/api/v1/
|
|
```
|
|
|
|
## Authentication
|
|
|
|
All API requests must include your API key in the request headers. You can pass the API key in two ways:
|
|
|
|
### Method 1: X-API-Key Header (Recommended)
|
|
```bash
|
|
X-API-Key: your_api_key_here
|
|
```
|
|
|
|
### Method 2: Authorization Header
|
|
```bash
|
|
Authorization: ApiKey your_api_key_here
|
|
```
|
|
|
|
## Getting Your API Key
|
|
|
|
### 1. Register a New User
|
|
```bash
|
|
curl -X POST http://localhost:8000/api/v1/auth/register/ \
|
|
-H "Content-Type: application/json" \
|
|
-d '{
|
|
"username": "your_username",
|
|
"email": "your_email@example.com",
|
|
"password": "your_password",
|
|
"first_name": "Your",
|
|
"last_name": "Name",
|
|
"company_name": "Your Company"
|
|
}'
|
|
```
|
|
|
|
### 2. Enable API Access and Get API Key
|
|
```bash
|
|
curl -X POST http://localhost:8000/api/v1/auth/toggle-api-access/ \
|
|
-H "Authorization: Bearer your_jwt_token" \
|
|
-H "Content-Type: application/json"
|
|
```
|
|
|
|
### 3. Regenerate API Key (if needed)
|
|
```bash
|
|
curl -X POST http://localhost:8000/api/v1/auth/regenerate-api-key/ \
|
|
-H "Authorization: Bearer your_jwt_token" \
|
|
-H "Content-Type: application/json"
|
|
```
|
|
|
|
## API Endpoints
|
|
|
|
### Authentication Endpoints
|
|
|
|
#### Register User
|
|
```bash
|
|
curl -X POST http://localhost:8000/api/v1/auth/register/ \
|
|
-H "Content-Type: application/json" \
|
|
-d '{
|
|
"username": "john_doe",
|
|
"email": "john@example.com",
|
|
"password": "secure_password123",
|
|
"first_name": "John",
|
|
"last_name": "Doe",
|
|
"company_name": "Real Estate Corp"
|
|
}'
|
|
```
|
|
|
|
#### Login
|
|
```bash
|
|
curl -X POST http://localhost:8000/api/v1/auth/login/ \
|
|
-H "Content-Type: application/json" \
|
|
-d '{
|
|
"email": "john@example.com",
|
|
"password": "secure_password123"
|
|
}'
|
|
```
|
|
|
|
#### Get User Profile
|
|
```bash
|
|
curl -X GET http://localhost:8000/api/v1/auth/user/ \
|
|
-H "Authorization: Bearer your_jwt_token"
|
|
```
|
|
|
|
### Analytics Endpoints
|
|
|
|
#### 1. Broker Statistics
|
|
Get comprehensive broker statistics including gender distribution, nationality breakdown, and license information.
|
|
|
|
```bash
|
|
curl -X GET "http://localhost:8000/api/v1/analytics/broker-stats/" \
|
|
-H "X-API-Key: your_api_key_here"
|
|
```
|
|
|
|
**Response:**
|
|
```json
|
|
{
|
|
"gender_distribution": [
|
|
{"gender": "male", "count": 1250},
|
|
{"gender": "female", "count": 890}
|
|
],
|
|
"nationality_distribution": [
|
|
{"nationality": "UAE", "count": 800},
|
|
{"nationality": "India", "count": 650}
|
|
],
|
|
"license_status_distribution": [
|
|
{"status": "Active", "count": 1800},
|
|
{"status": "Inactive", "count": 340}
|
|
]
|
|
}
|
|
```
|
|
|
|
#### 2. Project Statistics
|
|
Get project development statistics including status distribution, completion rates, and developer information.
|
|
|
|
```bash
|
|
curl -X GET "http://localhost:8000/api/v1/analytics/project-stats/" \
|
|
-H "X-API-Key: your_api_key_here"
|
|
```
|
|
|
|
**Response:**
|
|
```json
|
|
{
|
|
"status_distribution": [
|
|
{"project_status": "ACTIVE", "count": 45},
|
|
{"project_status": "COMPLETED", "count": 120},
|
|
{"project_status": "PLANNED", "count": 25}
|
|
],
|
|
"developer_distribution": [
|
|
{"developer": "Emaar Properties", "count": 35},
|
|
{"developer": "Nakheel", "count": 28}
|
|
]
|
|
}
|
|
```
|
|
|
|
#### 3. Land Statistics
|
|
Get land parcel statistics including type distribution, area analysis, and usage patterns.
|
|
|
|
```bash
|
|
curl -X GET "http://localhost:8000/api/v1/analytics/land-stats/" \
|
|
-H "X-API-Key: your_api_key_here"
|
|
```
|
|
|
|
**Response:**
|
|
```json
|
|
{
|
|
"type_distribution": [
|
|
{"land_type": "Residential", "count": 450},
|
|
{"land_type": "Commercial", "count": 280},
|
|
{"land_type": "Mixed Use", "count": 120}
|
|
],
|
|
"area_distribution": [
|
|
{"area_range": "0-1000", "count": 200},
|
|
{"area_range": "1000-5000", "count": 350}
|
|
]
|
|
}
|
|
```
|
|
|
|
#### 4. Valuation Statistics
|
|
Get property valuation statistics including price trends, market analysis, and valuation methods.
|
|
|
|
```bash
|
|
curl -X GET "http://localhost:8000/api/v1/analytics/valuation-stats/" \
|
|
-H "X-API-Key: your_api_key_here"
|
|
```
|
|
|
|
**Response:**
|
|
```json
|
|
{
|
|
"valuation_method_distribution": [
|
|
{"method": "Sales Comparison", "count": 1200},
|
|
{"method": "Income Approach", "count": 800}
|
|
],
|
|
"property_type_distribution": [
|
|
{"property_type": "Apartment", "count": 1500},
|
|
{"property_type": "Villa", "count": 900}
|
|
]
|
|
}
|
|
```
|
|
|
|
#### 5. Rent Statistics
|
|
Get rental market statistics including rent trends, property types, and area analysis.
|
|
|
|
```bash
|
|
curl -X GET "http://localhost:8000/api/v1/analytics/rent-stats/" \
|
|
-H "X-API-Key: your_api_key_here"
|
|
```
|
|
|
|
**Response:**
|
|
```json
|
|
{
|
|
"property_type_distribution": [
|
|
{"property_type": "Apartment", "count": 800},
|
|
{"property_type": "Villa", "count": 400}
|
|
],
|
|
"rent_range_distribution": [
|
|
{"range": "0-5000", "count": 200},
|
|
{"range": "5000-10000", "count": 500}
|
|
]
|
|
}
|
|
```
|
|
|
|
#### 6. Time Series Data
|
|
Get time-series data for transactions, values, and market trends.
|
|
|
|
```bash
|
|
curl -X GET "http://localhost:8000/api/v1/analytics/time-series-data/?start_date=2025-01-01&end_date=2025-12-31&group_by=month" \
|
|
-H "X-API-Key: your_api_key_here"
|
|
```
|
|
|
|
**Parameters:**
|
|
- `start_date`: Start date in YYYY-MM-DD format
|
|
- `end_date`: End date in YYYY-MM-DD format
|
|
- `group_by`: Grouping interval (day, week, month, quarter, year)
|
|
|
|
**Response:**
|
|
```json
|
|
{
|
|
"data": [
|
|
{
|
|
"date": "2025-01-01",
|
|
"transaction_count": 150,
|
|
"total_value": 45000000,
|
|
"average_price": 300000
|
|
}
|
|
]
|
|
}
|
|
```
|
|
|
|
#### 7. Transaction Summary
|
|
Get summary statistics for transactions within a date range.
|
|
|
|
```bash
|
|
curl -X GET "http://localhost:8000/api/v1/analytics/transaction-summary/?start_date=2025-01-01&end_date=2025-12-31" \
|
|
-H "X-API-Key: your_api_key_here"
|
|
```
|
|
|
|
**Response:**
|
|
```json
|
|
{
|
|
"total_transactions": 1500,
|
|
"total_value": 450000000,
|
|
"average_price": 300000,
|
|
"average_price_per_sqft": 2500
|
|
}
|
|
```
|
|
|
|
#### 8. Area Statistics
|
|
Get statistics by geographic area.
|
|
|
|
```bash
|
|
curl -X GET "http://localhost:8000/api/v1/analytics/area-statistics/?start_date=2025-01-01&end_date=2025-12-31&limit=10" \
|
|
-H "X-API-Key: your_api_key_here"
|
|
```
|
|
|
|
**Parameters:**
|
|
- `start_date`: Start date in YYYY-MM-DD format
|
|
- `end_date`: End date in YYYY-MM-DD format
|
|
- `limit`: Number of areas to return (default: 10)
|
|
|
|
**Response:**
|
|
```json
|
|
{
|
|
"data": [
|
|
{
|
|
"area": "Downtown Dubai",
|
|
"transaction_count": 150,
|
|
"total_value": 45000000,
|
|
"average_price": 300000,
|
|
"average_price_per_sqft": 2500,
|
|
"price_trend": "Rising"
|
|
}
|
|
]
|
|
}
|
|
```
|
|
|
|
#### 9. Property Type Statistics
|
|
Get statistics by property type.
|
|
|
|
```bash
|
|
curl -X GET "http://localhost:8000/api/v1/analytics/property-type-statistics/?start_date=2025-01-01&end_date=2025-12-31" \
|
|
-H "X-API-Key: your_api_key_here"
|
|
```
|
|
|
|
**Response:**
|
|
```json
|
|
{
|
|
"data": [
|
|
{
|
|
"property_type": "Apartment",
|
|
"transaction_count": 800,
|
|
"total_value": 240000000,
|
|
"average_price": 300000,
|
|
"market_share": 53.3
|
|
}
|
|
]
|
|
}
|
|
```
|
|
|
|
### Reports Endpoints
|
|
|
|
#### Get All Reports
|
|
```bash
|
|
curl -X GET "http://localhost:8000/api/v1/reports/" \
|
|
-H "X-API-Key: your_api_key_here"
|
|
```
|
|
|
|
#### Generate Report
|
|
```bash
|
|
curl -X POST "http://localhost:8000/api/v1/reports/generate/" \
|
|
-H "X-API-Key: your_api_key_here" \
|
|
-H "Content-Type: application/json" \
|
|
-d '{
|
|
"report_type": "transaction_summary",
|
|
"parameters": {
|
|
"start_date": "2025-01-01",
|
|
"end_date": "2025-12-31",
|
|
"area": "Downtown Dubai"
|
|
}
|
|
}'
|
|
```
|
|
|
|
### Monitoring Endpoints
|
|
|
|
#### System Metrics
|
|
```bash
|
|
curl -X GET "http://localhost:8000/api/v1/monitoring/metrics/" \
|
|
-H "X-API-Key: your_api_key_here"
|
|
```
|
|
|
|
### User Management Endpoints
|
|
|
|
#### Get User List (Admin)
|
|
```bash
|
|
curl -X GET "http://localhost:8000/api/v1/auth/list/" \
|
|
-H "X-API-Key: your_api_key_here"
|
|
```
|
|
|
|
#### Update User Profile
|
|
```bash
|
|
curl -X PUT "http://localhost:8000/api/v1/auth/profile/" \
|
|
-H "X-API-Key: your_api_key_here" \
|
|
-H "Content-Type: application/json" \
|
|
-d '{
|
|
"first_name": "John",
|
|
"last_name": "Doe",
|
|
"company_name": "Updated Company",
|
|
"phone_number": "+971501234567"
|
|
}'
|
|
```
|
|
|
|
## Error Handling
|
|
|
|
The API uses standard HTTP status codes:
|
|
|
|
- `200 OK`: Request successful
|
|
- `201 Created`: Resource created successfully
|
|
- `400 Bad Request`: Invalid request data
|
|
- `401 Unauthorized`: Invalid or missing API key
|
|
- `403 Forbidden`: Insufficient permissions
|
|
- `404 Not Found`: Resource not found
|
|
- `429 Too Many Requests`: Rate limit exceeded
|
|
- `500 Internal Server Error`: Server error
|
|
|
|
### Error Response Format
|
|
```json
|
|
{
|
|
"error": "Error message",
|
|
"details": "Detailed error information",
|
|
"code": "ERROR_CODE"
|
|
}
|
|
```
|
|
|
|
## Rate Limiting
|
|
|
|
API requests are rate-limited based on your subscription tier:
|
|
|
|
- **Free Tier**: 100 requests/hour
|
|
- **Paid Tier**: 1,000 requests/hour
|
|
- **Premium Tier**: 10,000 requests/hour
|
|
|
|
Rate limit headers are included in responses:
|
|
- `X-RateLimit-Limit`: Requests allowed per hour
|
|
- `X-RateLimit-Remaining`: Requests remaining in current window
|
|
- `X-RateLimit-Reset`: Time when rate limit resets (Unix timestamp)
|
|
|
|
## Data Formats
|
|
|
|
### Date Format
|
|
All dates are in ISO 8601 format: `YYYY-MM-DD`
|
|
|
|
### Currency Format
|
|
All monetary values are in AED (United Arab Emirates Dirham) and returned as numbers (not formatted strings).
|
|
|
|
### Coordinates
|
|
Geographic coordinates are in decimal degrees format.
|
|
|
|
## Examples
|
|
|
|
### Complete Workflow Example
|
|
|
|
1. **Register and get API key:**
|
|
```bash
|
|
# Register user
|
|
curl -X POST http://localhost:8000/api/v1/auth/register/ \
|
|
-H "Content-Type: application/json" \
|
|
-d '{
|
|
"username": "demo_user",
|
|
"email": "demo@example.com",
|
|
"password": "demo_password123",
|
|
"first_name": "Demo",
|
|
"last_name": "User",
|
|
"company_name": "Demo Company"
|
|
}'
|
|
|
|
# Login to get JWT token
|
|
curl -X POST http://localhost:8000/api/v1/auth/login/ \
|
|
-H "Content-Type: application/json" \
|
|
-d '{
|
|
"email": "demo@example.com",
|
|
"password": "demo_password123"
|
|
}'
|
|
|
|
# Enable API access and get API key
|
|
curl -X POST http://localhost:8000/api/v1/auth/toggle-api-access/ \
|
|
-H "Authorization: Bearer YOUR_JWT_TOKEN"
|
|
```
|
|
|
|
2. **Use API key to get data:**
|
|
```bash
|
|
# Get broker statistics
|
|
curl -X GET "http://localhost:8000/api/v1/analytics/broker-stats/" \
|
|
-H "X-API-Key: YOUR_API_KEY"
|
|
|
|
# Get transaction summary for 2025
|
|
curl -X GET "http://localhost:8000/api/v1/analytics/transaction-summary/?start_date=2025-01-01&end_date=2025-12-31" \
|
|
-H "X-API-Key: YOUR_API_KEY"
|
|
|
|
# Get time series data
|
|
curl -X GET "http://localhost:8000/api/v1/analytics/time-series-data/?start_date=2025-01-01&end_date=2025-12-31&group_by=month" \
|
|
-H "X-API-Key: YOUR_API_KEY"
|
|
```
|
|
|
|
## SDKs and Libraries
|
|
|
|
### JavaScript/Node.js
|
|
```javascript
|
|
const axios = require('axios');
|
|
|
|
const api = axios.create({
|
|
baseURL: 'http://localhost:8000/api/v1',
|
|
headers: {
|
|
'X-API-Key': 'your_api_key_here'
|
|
}
|
|
});
|
|
|
|
// Get broker statistics
|
|
const brokerStats = await api.get('/analytics/broker-stats/');
|
|
console.log(brokerStats.data);
|
|
```
|
|
|
|
### Python
|
|
```python
|
|
import requests
|
|
|
|
headers = {
|
|
'X-API-Key': 'your_api_key_here'
|
|
}
|
|
|
|
# Get broker statistics
|
|
response = requests.get('http://localhost:8000/api/v1/analytics/broker-stats/', headers=headers)
|
|
broker_stats = response.json()
|
|
print(broker_stats)
|
|
```
|
|
|
|
### PHP
|
|
```php
|
|
<?php
|
|
$api_key = 'your_api_key_here';
|
|
$headers = [
|
|
'X-API-Key: ' . $api_key,
|
|
'Content-Type: application/json'
|
|
];
|
|
|
|
$ch = curl_init();
|
|
curl_setopt($ch, CURLOPT_URL, 'http://localhost:8000/api/v1/analytics/broker-stats/');
|
|
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
|
|
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
|
|
|
|
$response = curl_exec($ch);
|
|
$broker_stats = json_decode($response, true);
|
|
curl_close($ch);
|
|
|
|
print_r($broker_stats);
|
|
?>
|
|
```
|
|
|
|
## Support
|
|
|
|
For API support and questions:
|
|
- Email: api-support@dubaianalytics.com
|
|
- Documentation: https://docs.dubaianalytics.com
|
|
- Status Page: https://status.dubaianalytics.com
|
|
|
|
## Changelog
|
|
|
|
### Version 1.0.0 (Current)
|
|
- Initial API release
|
|
- Authentication via API key
|
|
- All analytics endpoints
|
|
- Rate limiting by subscription tier
|
|
- Comprehensive error handling
|