Overview
Base URL https://ridgeratings.com/api/v1. Every dataset answers GET with JSON by default; append ?format=csv to any list dataset for a spreadsheet-ready file. Figures carry their period, currency, scope and source in the response, and grades are printed on the Ridge scale (Aaa to Caa, NR for not rated).
An evaluation key is printed on this page. It returns live data from three datasets at a throttled rate; production keys cover the full feed and are issued under an Enterprise agreement.
ridge-demo-2026Covers /meta, /ratings and /index at 20 requests a minute.curl -H "X-Ridge-Key: ridge-demo-2026" https://ridgeratings.com/api/v1/ratings
Quickstart
# the feed manifest: window, counts, every dataset
curl -H "X-Ridge-Key: lk_your_key" https://ridgeratings.com/api/v1/meta
# every community rating as CSV, straight into a model
curl -H "X-Ridge-Key: lk_your_key" \
"https://ridgeratings.com/api/v1/ratings?format=csv" -o ratings.csv
import urllib.request, json
req = urllib.request.Request("https://ridgeratings.com/api/v1/history?community=Dubai%20Marina",
headers={"X-Ridge-Key": "lk_your_key"})
feed = json.load(urllib.request.urlopen(req))
print(feed["count"], "buildings")
const r = await fetch("https://ridgeratings.com/api/v1/ratings", {
headers: { "X-Ridge-Key": "lk_your_key" }
});
const { communities } = await r.json();
console.log(communities.find(c => c.community === "Dubai Marina").grade);
library(httr)
r <- GET("https://ridgeratings.com/api/v1/ratings?format=csv",
add_headers(`X-Ridge-Key` = "lk_your_key"))
ratings <- read.csv(text = content(r, "text"))
let
Source = Csv.Document(
Web.Contents("https://ridgeratings.com/api/v1/ratings?format=csv",
[Headers = [#"X-Ridge-Key" = "lk_your_key"]]),
[Delimiter = ",", Encoding = 65001]),
Promoted = Table.PromoteHeaders(Source, [PromoteAllScalars = true])
in
Promoted
Authentication
Send the key in the X-Ridge-Key request header. The query form ?key= is accepted for tools that cannot set headers; it is logged like any other request and should not be used from a browser page. Cross-origin requests are allowed (Access-Control-Allow-Origin: *), and the server answers the OPTIONS preflight.
Keys are bound to an Enterprise agreement and can be rotated on request to the desk. The demo key is limited to /meta, /ratings and /index; any other dataset answers 403 with the catalogue in the body.
Datasets
?community= · every dataset takes ?format=csv| Endpoint | Returns | Filters |
|---|---|---|
/meta | Feed manifest: data window, transaction, community and building counts, methodology versions, dataset catalogue. | — |
/ratings | Every rated Dubai community: Ridge grade, grade score, resale AED/sqft, gross and net yield, off-plan share, maturity. | community · format |
/buildings | Every rated building: grade, score, median AED/sqft, valuation band (p25–p75), liquidity, size profile, off-plan split. | community · format |
/yields | Community yields from registered rents and service charges: gross, net, rent per sqft, service charge per sqft. | community · format |
/index | Ridge Dubai Resale Price Index (RDRPI): monthly citywide resale AED/sqft and index level, 2002 to the latest print, 2014 = 100. | format |
/index_typed | Apartment and villa series: monthly AED/sqft and index level by property type. | format |
/rent_index | Ridge Rent Index: new and renewal registered rents per sqft, monthly. | format |
/developers | Developer track records: delivered, cancelled, on-time share, units, entities, grouped by corporate brand. | format |
/actions | The Ridge Wire: every rating action (initiation, upgrade, downgrade), dated, full history. | community · format |
/history | Bulk history: monthly median resale AED/sqft per rated building, 2007 to the latest print. | community · format |
Community grades are on the v1.4 absolute scale; building grades on the v1.5 percentile scale. The machine-readable contract is /api/v1/openapi.json.
Sample response
GET /api/v1/ratings?community=Dubai%20Marina. Illustrative; live figures move with each nightly refresh.
{
"source": "Dubai Land Department open data",
"count": 1,
"methodology_note": "community grades v1.4 absolute scale; building grades v1.5 percentile",
"communities": [{
"community": "Dubai Marina",
"grade": "Ridge Aa",
"grade_score": 80,
"sale_psf": 1963, // median resale AED/sqft in the window
"gross_yield": 5.5, // registered rents / resale prices
"net_yield": 4.6, // after service charges
"offplan_share": 34, // % of registered sales that are off-plan
"secondary_sales": 3477
}]
}
Rate limits
retry_after_seconds in the 429 bodyBulk datasets are designed to be pulled once per refresh, not polled: everything is recomputed nightly and /meta carries the exact data window, so a client can fetch once a day after the window advances. A request over the limit answers 429 with a JSON body naming the limit and the retry interval.
Errors
| Status | Meaning | Body |
|---|---|---|
401 | Missing or invalid key | {"error": "missing or invalid API key", "how": "send your key in the X-Ridge-Key header", "docs": …} |
403 | Key valid, dataset outside its tier | {"error": "enterprise licence required for the data feed", "your_tier": "pro", "upgrade": …} |
404 | Unknown dataset | {"error": "unknown dataset", "datasets": ["meta", "buildings", …]} |
429 | Rate limit exceeded | {"error": "rate limit exceeded", "limit": "120 requests / minute / key", "retry_after_seconds": 30} |
Every error body is JSON with an error field and the next step; no HTML error pages on /api/v1.
Versioning and changelog
/api/v1 is stable. Changes within v1 are additive: new fields and new datasets, never a renamed or removed field. Anything breaking ships as /api/v2 with notice to every key holder and a parallel-run period.
- v1 · current — ten datasets (
/meta,/ratings,/buildings,/yields,/index,/index_typed,/rent_index,/developers,/actions,/history); header authentication; CSV export on every list dataset; the demo key; the OpenAPI contract; cross-origin access. - Method stamps —
/metareports the community and building methodology versions; the site-wide method is v1.5. Methodology changes are published at /methodology before the feed reflects them.
Status
Read live from /api/health. Feed access is licensed under the Ridge Enterprise agreement for internal use, model ingestion and white-label embedding as scoped. Cite figures as “Ridge Ratings” with the methodology version. Underlying registry data © Dubai Land Department, Government of Dubai. Need a rating on your own page instead? Use Embed →