PropertyIndex · Schema

RentalList

CompanyReal EstateDubaiProperty DataMarket Intelligence

Properties

Name Type Description
data array
next_cursor stringnull Returned for cursor and numbered pages when more data exists. Pass as cursor to fetch the next page, removing page and preserving sort, order and filters. null on the last page.
as_of stringnull The DLD delivery date the data was built from.
total integer Exact number of records matching all filters, including q, location_search and location scopes where supported. Ignores page, limit and cursor. Always included, even on empty pages. Not a snapshot: ca
page integernull Requested numbered page, or 1 when neither page nor cursor was supplied. null for cursor requests because a cursor position is not a numbered page.
limit integer Requested page size, or 100 when omitted. This is the maximum rows requested, not the actual number returned; data can contain fewer rows.
View JSON Schema on GitHub

JSON Schema

propertyindex-ae-rental-list-schema.json Raw ↑
{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "$id": "https://artifacts.apis.io/propertyindex-ae/json-schema/propertyindex-ae-rental-list-schema.json",
  "title": "RentalList",
  "x-generated": "2026-11-07",
  "x-method": "derived",
  "x-generator": "derive-json-schema.py",
  "x-source": "openapi/propertyindex-ae-openapi.json#/components/schemas/RentalList",
  "type": "object",
  "required": [
    "data",
    "next_cursor",
    "as_of",
    "total",
    "page",
    "limit"
  ],
  "properties": {
    "data": {
      "type": "array",
      "items": {
        "$ref": "#/$defs/Rental"
      }
    },
    "next_cursor": {
      "type": [
        "string",
        "null"
      ],
      "description": "Returned for cursor and numbered pages when more data exists. Pass as cursor to fetch the next page, removing page and preserving sort, order and filters. null on the last page."
    },
    "as_of": {
      "type": [
        "string",
        "null"
      ],
      "format": "date",
      "description": "The DLD delivery date the data was built from."
    },
    "total": {
      "type": "integer",
      "minimum": 0,
      "description": "Exact number of records matching all filters, including q, location_search and location scopes where supported. Ignores page, limit and cursor. Always included, even on empty pages. Not a snapshot: can change after a data refresh."
    },
    "page": {
      "type": [
        "integer",
        "null"
      ],
      "minimum": 1,
      "maximum": 9007199254740991,
      "description": "Requested numbered page, or 1 when neither page nor cursor was supplied. null for cursor requests because a cursor position is not a numbered page."
    },
    "limit": {
      "type": "integer",
      "minimum": 1,
      "maximum": 1000,
      "description": "Requested page size, or 100 when omitted. This is the maximum rows requested, not the actual number returned; data can contain fewer rows."
    }
  },
  "$defs": {
    "Rental": {
      "type": "object",
      "description": "Registered DLD/Ejari rental-contract evidence resolved to the property's own location node.",
      "properties": {
        "rental_id": {
          "type": "string",
          "description": "Opaque public identifier of this rental record. Stable; use it with the single-record endpoint. It carries no meaning outside this API."
        },
        "highest_location_level": {
          "type": [
            "string",
            "null"
          ],
          "description": "First location after Dubai in the record's breadcrumb, regardless of location kind. For Dubai > Dubai Harbour > Emaar Beachfront > Beach Vista > Beach Vista Tower 1, this is Dubai Harbour. Null when no location below the city is known."
        },
        "lowest_location_level": {
          "type": [
            "string",
            "null"
          ],
          "description": "Final assigned location in the record's breadcrumb. This may be an area, community, subcommunity or building, rather than a physical building. For Dubai > Dubai Harbour > Emaar Beachfront > Beach Vista > Beach Vista Tower 1, this is Beach Vista Tower 1. Labels are not unique. Null when no location is known."
        },
        "location_path": {
          "type": [
            "array",
            "null"
          ],
          "items": {
            "type": "string"
          },
          "minItems": 1,
          "description": "Ordered location labels from Dubai to the record's assigned location, following the published location hierarchy. For a record assigned to Beach Vista Tower 1 this is [\"Dubai\", \"Dubai Harbour\", \"Emaar Beachfront\", \"Beach Vista\", \"Beach Vista Tower 1\"]. When present, it starts with Dubai and ends with lowest_location_level, and any second element equals highest_location_level. Labels only: names are not unique and are not identifiers. Null when the location cannot be resolved. Returned only; not a filter, sort or cursor field."
        },
        "floor": {
          "type": [
            "string",
            "null"
          ],
          "description": "Registered floor label, as text: numeric floors plus values such as 'G' or 'P'-prefixed podium levels. Null for houses and unresolved records."
        },
        "start_date": {
          "type": [
            "string",
            "null"
          ],
          "format": "date",
          "description": "Registered tenancy period start date."
        },
        "end_date": {
          "type": [
            "string",
            "null"
          ],
          "format": "date",
          "description": "Scheduled end date for this exact registered tenancy period. It is not proof the tenancy is active until this date."
        },
        "terminated_date": {
          "type": [
            "string",
            "null"
          ],
          "format": "date",
          "description": "Evidenced actual termination date for this exact registered tenancy period. Null means no termination date is evidenced, not that the tenancy is active."
        },
        "registration_date": {
          "type": [
            "string",
            "null"
          ],
          "format": "date",
          "description": "Date this period was filed with Ejari. This can differ from start_date; it is not a PropertyIndex ingestion or last-updated timestamp."
        },
        "contract_type": {
          "type": [
            "string",
            "null"
          ],
          "description": "Normalized rental contract structure."
        },
        "is_new_contract": {
          "type": [
            "boolean",
            "null"
          ],
          "description": "Whether this is a new rather than renewed contract (version = 1)."
        },
        "property_type": {
          "type": [
            "string",
            "null"
          ],
          "description": "Normalized property type. Known values: Apartment, Building, Clinic, Hotel Apartment, Hotel Room, Land, Office, Other Commercial, Parking, Shop, Villa, Warehouse."
        },
        "bedrooms": {
          "type": [
            "string",
            "null"
          ],
          "description": "Normalized bedroom label; empty when the record carries no bedroom count. Known values: Studio, 1 Bed, 2 Bed, 3 Bed, 4 Bed, 5 Bed, 6 Bed, 7 Bed, 8 Bed, 9 Bed, 10 Bed, 11 Bed, 15 Bed, Penthouse, Duplex."
        },
        "annual_rent": {
          "type": [
            "number",
            "null"
          ],
          "description": "Registered annual rent (contract amount annualised). Unit: AED/year."
        },
        "annual_rent_psf": {
          "type": [
            "number",
            "null"
          ],
          "description": "Annual rent per square foot. Null when a reliable figure is unavailable; null does not mean zero rent. Unit: AED/sqft/year."
        },
        "size_sqft": {
          "type": [
            "number",
            "null"
          ],
          "description": "Registered property size. Unit: sqft."
        }
      }
    }
  }
}

Work with this as data

Every JSON Schema here is available over the APIs.io API and to AI agents over MCP.

MCP server

One button, every client — Claude, Cursor, VS Code and the rest.

https://apis.io/mcp

Tools for schemas

4 MCP tools reach this
  • find_json_schemasBrowse and filter every JSON Schema in the catalog.
  • apis_io_searchSTART HERE — APIs, providers and tags for one query, each with its total.
  • resolveTurn a domain, URL or GitHub org into the provider it belongs to.
  • find_cohortsEvery scored population of providers in the catalog.
All 92 tools →

Call it yourself

curl for this page
This JSON Schema
curl "https://apis.io/api/v1/json-schemas/propertyindex-ae-rental-list"
All schemas
curl "https://apis.io/api/v1/json-schemas?limit=25"

Calls without X-API-Key need no key. Calls with it need a paid plan — get a key.

Get an API key

Free tier, no form to fill in. Signing in shares your email address with us — we store it to create your key and to recognise you if you sign in with another provider. See our Privacy Policy and Terms.

A second provider on the same verified email joins the account you already have.