Quick start
Generate a free test key in the developer dashboard, then call a derived-data endpoint. Test and live responses use the same schema.
curl "https://abudhabuy.com/api/v1/intelligence/community/al-reem-island" \
-H "Authorization: Bearer dub_test_..."const response = await fetch(
"https://abudhabuy.com/api/v1/intelligence/community/al-reem-island",
{ headers: { Authorization: "Bearer " + process.env.DUBUY_API_KEY } }
);
if (!response.ok) throw new Error(await response.text());
const intelligence = await response.json();import os, requests
response = requests.get(
"https://abudhabuy.com/api/v1/intelligence/community/al-reem-island",
headers={"Authorization": f"Bearer {os.environ['DUBUY_API_KEY']}"},
timeout=20,
)
response.raise_for_status()
intelligence = response.json()Authentication
Use a Bearer header. X-API-Key is also accepted for systems that cannot set Bearer auth.
Authorization: Bearer dub_test_...- Keys are displayed once and stored as SHA-256 verifiers.
- Do not expose a key in client-side JavaScript or source control.
- Use dashboard rotation after suspected compromise; the old key is revoked immediately.
Test and live environments
| Prefix | Purpose | Availability |
|---|---|---|
| dub_test_ | Development and evaluation; production-compatible schemas. | Every account, 500 units/month. |
| dub_live_ | Customer-facing and production workloads. | Paid data plans and legacy Agent / Team. |
Endpoint catalog
Base URL: https://abudhabuy.com/api/v1. Metadata and freshness are public; other routes require a key.
| Route | Dataset | Units | Returns |
|---|---|---|---|
| GET /meta | metadata | 0 | API metadata and plan-neutral capability discovery. |
| GET /data-freshness | metadata | 0 | Dataset provenance, cadence, and last-success timestamps. |
| GET /market/stats | market_aggregates | 1 | Citywide ADREC market aggregates. |
| GET /communities | community_intelligence | 1 | Community discovery and headline metrics. |
| GET /communities/{slug} | community_intelligence | 2 | Normalized community profile. |
| GET /communities/{slug}/properties | community_intelligence | 2 | Official and transaction-backed property catalogue with provenance. |
| GET /communities/{slug}/pulse | community_intelligence | 2 | Community discussion and market-temperature summary. |
| GET /communities/{slug}/trends | community_intelligence | 2 | Community price history. |
| GET /communities/{slug}/as-of | community_intelligence | 5 | Historical AbuDhaBuy aggregate snapshot at or before a requested date. |
| GET /search | community_intelligence | 1 | Community screening. |
| GET /compare | community_intelligence | 4 | Community comparison. |
| GET /projects | project_registry | 2 | Project search and performance. |
| GET /projects/{id} | project_registry | 2 | Official project detail and matched history. |
| GET /developers | developer_registry | 2 | Developer registry search. |
| GET /developers/{name} | developer_registry | 2 | Developer profile and registry evidence. |
| GET /rental-yields | rental_intelligence | 2 | Tawtheeq-derived rental yields. |
| GET /intelligence/community/{slug} | community_intelligence | 5 | Decision-ready community signal bundle. |
| GET /intelligence/investment-screen | community_intelligence | 5 | Multi-factor community investment screen. |
Query parameters and response schemas are defined in the OpenAPI document. Collection pagination uses an integer cursor; pass the returned next_cursor to continue.
Errors, limits, and request IDs
{
"error": {
"code": "monthly_quota_exceeded",
"message": "Monthly quota of 10,000 units has been exceeded.",
"request_id": "9bb03a8b-..."
},
"documentation_url": "https://abudhabuy.com/developers/api/"
}Response headers
X-Request-Id, X-AbuDhaBuy-Units, X-AbuDhaBuy-Units-Used, X-AbuDhaBuy-Units-Remaining, and X-RateLimit-Limit.
Retry policy
Retry 429 and 503 with exponential backoff and jitter. Do not retry 400, 401, 403, 402, or 451 until the cause changes.
Units
Authenticated calls consume the endpoint’s published units, including valid queries that return no matches.
Versioning
Additive fields can ship in v1; breaking meaning or removal requires a version or deprecation window.
Hosted MCP and local stdio
The hosted endpoint is stateless and supports the current self-contained HTTP protocol plus a bounded legacy mode. Pass the same AbuDhaBuy key your REST client uses.
{
"url": "https://abudhabuy.com/api/mcp/",
"headers": {
"Authorization": "Bearer dub_test_..."
}
}{
"mcpServers": {
"dubuy": {
"command": "npx",
"args": ["-y", "dubuy-mcp-server"],
"env": { "DUBUY_API_KEY": "dub_test_..." }
}
}
}Discovery: /.well-known/mcp.json. Both MCP transports expose the same safe-only tool set as the REST catalog.
Data governance
Every result distinguishes official source facts, AbuDhaBuy normalization, and model-derived signals. The API and MCP expose only source-labelled official facts, aggregates, and AbuDhaBuy-created derived metrics. Row-level transactions, listing-provider-derived intelligence, raw listings, and contact details are excluded on every plan.