{"openapi":"3.1.0","info":{"title":"Brainy Prices API v2 — Dubai cost of living (proposal)","version":"2.0.0-proposal.1","summary":"Read-only, per-query Dubai/UAE cost-of-living data with per-row provenance.","description":"Proposal for **v2** of the Brainy Prices public API (prices.brainy.ae): Dubai and UAE cost of living, read-only, per query.\n\n**Not deployed.** v1 (`/api/v1`, OpenAPI at https://prices.brainy.ae/api/v1/openapi.json) stays live and unchanged. When v2 reaches general availability, v1 answers will carry a `Deprecation` header (RFC 9745) with a future date chosen at that time; no `Sunset` date is set.\n\nConventions (normative):\n- Envelope `{meta, [context], data, links}`. `meta.dataset` says status, dates, period, stale and historical; every row carries `provenance` (source, licence, dates, stale, status).\n- `*_on` = calendar date, `*_at` = logged instant. A day is never turned into an instant (a midnight placeholder becomes `*_on` with `*_at: null`).\n- Money is AED (`*_aed`, with the period in the name or description) as reported by the source or computed by the documented formula. No VAT treatment is implied: the VAT basis appears only where the source publishes it or a calculation declares it (telecom `price_basis`, DEWA `vat_percent`/`vat_aed`); otherwise it is unknown. Other currencies are explicit (`currency`). Unknown = `null`, never 0.\n- `stale` (our refresh failed, last good copy served) and `historical` (newest official period has ended) are independent.\n- Deliberate pause = HTTP 200, `meta.dataset.status: paused` (or row `status: paused`), empty data, no `Retry-After`: do not retry. A paused source is never served from the last good copy. 503 is only a genuine outage.\n- Selective questions only: `page_size` default 20, max 50; opaque `cursor` bound to the dataset snapshot, filters, sort, page_size, locale and an expiry (no drift or duplicates after a refresh; 400 cursor_invalid, 409 cursor_expired/snapshot_changed); at most 200 rows per query; sort allowlists; required filters where a full listing would be a bulk export. No dataset downloads or raw redistribution (legal decision on open datasets ON HOLD).\n- Calculations with personal data (relocation, DEWA bill) are POST-only with `Cache-Control: no-store`; nothing is stored.\n- Language: optional `Accept-Language` on every data operation (en default and fallback, ar, es); answers carry `Content-Language`, `Vary: Accept-Language` and `meta.content_language`; ETag and cursor are bound to the chosen language. Phase 1 serves English; later phases may translate labels, notices and errors only when a reviewed translation exists. Source facts (school names, grade labels, official quotes, store titles, source texts) are never translated. MCP tools may expose an optional `locale` argument mapped to this header.\n- Licences are per source (GET /api/v2/sources). **There is no licence covering all data of this API**, so `info.license` is intentionally absent. Tax figures are estimates, not tax advice.\n- Access: anonymous 30/min and 500/day per IP (IPv6 /64); optional free key (`X-API-Key`) 60/min and 1,500/day per confirmed account, shared by at most 2 active keys (two keys never double the quota; rotation does not renew it); shared enforcement across instances, no paid tier; IETF draft-11 `RateLimit-Policy`/`RateLimit` headers without account id or e-mail. Every data call counts (including 304, paused answers and validation errors). Details in ACCESS.md.\n- Every response carries its full sources (`meta.dataset.sources`: licence, conditions, attribution, pause status); each row's `provenance.source_id` and `license_id` resolve inside the same response.\n- Examples are mapped value by value from root's live capture (`evidence/manifest.json`, 27 GET, 03 Oct 2026) or from `site/dist` files hashed in `source-manifest.json` (a file rebuilt later is marked `drift: true` with both hashes); each example lists its `x-evidence-ref` (file, URL, JSON pointers, transforms) and the `x-proposed-fields` that do not exist in v1.\n- `/api/v2/openapi.json` is served without `examples` and `x-evidence-*` annotations so it stays under the 256 KiB response limit; this YAML is the full review copy.\n","contact":{"name":"Brainy Prices","url":"https://prices.brainy.ae/developers.html"}},"jsonSchemaDialect":"https://spec.openapis.org/oas/3.1/dialect/base","servers":[{"url":"https://prices.brainy.ae","description":"Production host (v2 paths not deployed yet)."}],"security":[{},{"api_key":[]}],"tags":[{"name":"grocery","description":"Supermarket catalogue, offers, stores, list comparison, official MOET shop prices, moderated shopper reports, online references (paused)."},{"name":"schools","description":"KHDA tuition, school bus fees, uniform items (paused)."},{"name":"housing","description":"Registered rents and sales by community (DLD open data)."},{"name":"transport","description":"Fuel, tolls, parking, public transport, taxis and commute estimates."},{"name":"utilities","description":"DEWA tariff and private bill estimate."},{"name":"telecom","description":"Mobile and home internet plans."},{"name":"costs","description":"Living costs by community, household profile and emirate."},{"name":"relocation","description":"Private relocation/tax estimate (POST), tax models, family index and CBUAE exchange rates. Estimates, not tax advice."},{"name":"residence","description":"Visa/residence and free-zone company setup fees from official sources."},{"name":"health","description":"Health insurance rules from official texts."},{"name":"electronics","description":"Electronics prices (paused)."},{"name":"today","description":"Today's highlights."},{"name":"meta","description":"Discovery, this document and the source/licence registry."},{"name":"access","description":"Optional free keys (lifecycle owned by ACCESS.md). Not MCP tools."}],"paths":{"/api/v2":{"get":{"operationId":"get_api_v2_info","tags":["meta"],"summary":"API name, version and discovery links","description":"Discovery document. Not an MCP tool.","parameters":[{"$ref":"#/components/parameters/IfNoneMatch"}],"responses":{"200":{"description":"Success. AED; unknown values are null, never 0. A deliberately paused dataset answers 200 with empty data.","headers":{"ETag":{"$ref":"#/components/headers/ETag"},"Cache-Control":{"$ref":"#/components/headers/CacheControlData"},"RateLimit-Policy":{"$ref":"#/components/headers/RateLimitPolicy"},"RateLimit":{"$ref":"#/components/headers/RateLimit"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiInfo"}}}},"304":{"$ref":"#/components/responses/NotModified"},"401":{"$ref":"#/components/responses/Unauthorized"},"429":{"$ref":"#/components/responses/TooManyRequests"},"503":{"$ref":"#/components/responses/ServiceUnavailable"}},"x-mcp-tool":false,"x-v1-equivalent":{"method":"GET","path":"/api/v1","tool":null}}},"/api/v2/access/confirm":{"post":{"operationId":"confirm_free_api_key","tags":["access"],"summary":"Confirm a request: key (signup) or management token (manage), shown once","description":"The token from the mail goes in the body, never in a URL. signup ⇒ the key, shown once (at most 2 active keys per confirmed account, sharing one quota; a third ⇒ 409 key_limit_reached); manage ⇒ a single-use management token. Old keys are never revealed. Not an MCP tool.","requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiKeyConfirm"}}}},"responses":{"201":{"description":"Key or management token issued (shown once).","headers":{"Cache-Control":{"$ref":"#/components/headers/CacheControlNoStore"},"RateLimit-Policy":{"$ref":"#/components/headers/RateLimitPolicy"},"RateLimit":{"$ref":"#/components/headers/RateLimit"}},"content":{"application/json":{"schema":{"oneOf":[{"$ref":"#/components/schemas/ApiKeyIssued"},{"$ref":"#/components/schemas/ManagementTokenIssued"}],"discriminator":{"propertyName":"kind","mapping":{"api_key":"#/components/schemas/ApiKeyIssued","management_token":"#/components/schemas/ManagementTokenIssued"}}}}}},"400":{"$ref":"#/components/responses/BadRequest"},"409":{"$ref":"#/components/responses/Conflict"},"413":{"$ref":"#/components/responses/PayloadTooLarge"},"415":{"$ref":"#/components/responses/UnsupportedMediaType"},"429":{"$ref":"#/components/responses/TooManyRequests"},"503":{"$ref":"#/components/responses/ServiceUnavailable"}},"security":[{}],"x-mcp-tool":false,"x-max-request-bytes":24576}},"/api/v2/access/keys/revoke":{"post":{"operationId":"revoke_free_api_key","tags":["access"],"summary":"Revoke a key with a management token","description":"Body: management_token from a confirmed purpose=manage request (single use, expires). X-API-Key is NOT accepted for management. Not an MCP tool.","requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/KeyManagementRequest"}}}},"responses":{"200":{"description":"Success. AED; unknown values are null, never 0. A deliberately paused dataset answers 200 with empty data.","headers":{"Cache-Control":{"$ref":"#/components/headers/CacheControlNoStore"},"RateLimit-Policy":{"$ref":"#/components/headers/RateLimitPolicy"},"RateLimit":{"$ref":"#/components/headers/RateLimit"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiKeyRevoked"}}}},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"413":{"$ref":"#/components/responses/PayloadTooLarge"},"415":{"$ref":"#/components/responses/UnsupportedMediaType"},"429":{"$ref":"#/components/responses/TooManyRequests"},"503":{"$ref":"#/components/responses/ServiceUnavailable"}},"security":[{}],"x-mcp-tool":false,"x-max-request-bytes":24576}},"/api/v2/access/keys/rotate":{"post":{"operationId":"rotate_free_api_key","tags":["access"],"summary":"Rotate a key with a management token","description":"Body: management_token from a confirmed purpose=manage request (single use, expires). X-API-Key is NOT accepted for management: a data key only reads. The old key stops working; the new key is shown once and never mailed; the account quota is NOT renewed by rotation. Not an MCP tool.","requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/KeyManagementRequest"}}}},"responses":{"200":{"description":"New key (shown once).","headers":{"Cache-Control":{"$ref":"#/components/headers/CacheControlNoStore"},"RateLimit-Policy":{"$ref":"#/components/headers/RateLimitPolicy"},"RateLimit":{"$ref":"#/components/headers/RateLimit"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiKeyIssued"}}}},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"413":{"$ref":"#/components/responses/PayloadTooLarge"},"415":{"$ref":"#/components/responses/UnsupportedMediaType"},"429":{"$ref":"#/components/responses/TooManyRequests"},"503":{"$ref":"#/components/responses/ServiceUnavailable"}},"security":[{}],"x-mcp-tool":false,"x-max-request-bytes":24576}},"/api/v2/access/requests":{"post":{"operationId":"request_free_api_key","tags":["access"],"summary":"Request a free API key or a key-management token (double opt-in by mail)","description":"Optional: anonymous access keeps working. purpose=signup issues a key after confirmation; purpose=manage issues a single-use management token. Accepted terms and privacy versions are recorded; transfer consent only while the notice in force requires it. No payment, no free-text profile. Fails closed (503 access_unavailable) while the operator identity, the mail provider or the privacy notice in force are not defined. Lifecycle and limits are owned by ACCESS.md; the same steps can be offered on a web page. Not an MCP tool.","requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiKeyRequest"}}}},"responses":{"202":{"description":"Success. AED; unknown values are null, never 0. A deliberately paused dataset answers 200 with empty data.","headers":{"Cache-Control":{"$ref":"#/components/headers/CacheControlNoStore"},"RateLimit-Policy":{"$ref":"#/components/headers/RateLimitPolicy"},"RateLimit":{"$ref":"#/components/headers/RateLimit"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiKeyRequestAccepted"}}}},"400":{"$ref":"#/components/responses/BadRequest"},"413":{"$ref":"#/components/responses/PayloadTooLarge"},"415":{"$ref":"#/components/responses/UnsupportedMediaType"},"429":{"$ref":"#/components/responses/TooManyRequests"},"503":{"$ref":"#/components/responses/ServiceUnavailable"}},"security":[{}],"x-mcp-tool":false,"x-max-request-bytes":24576}},"/api/v2/companies/free-zones":{"get":{"operationId":"list_free_zone_company_setups","tags":["residence"],"summary":"Free-zone company setup packages as published","description":"Packages quoted from each authority (first-year or monthly price, visas included); zones without a published price or paused are listed as such. Mainland status in context.","parameters":[{"name":"emirate_id","in":"query","required":false,"schema":{"type":"string","enum":["dubai","abu_dhabi","sharjah","ajman","umm_al_quwain","ras_al_khaimah","fujairah"]},"description":"Emirate."},{"name":"published","in":"query","required":false,"schema":{"type":"string","enum":["one_visa","partial","none","paused"]},"description":"Publication status."},{"$ref":"#/components/parameters/PageSize"},{"$ref":"#/components/parameters/Cursor"},{"$ref":"#/components/parameters/AcceptLanguage"},{"$ref":"#/components/parameters/IfNoneMatch"}],"responses":{"200":{"description":"Success. AED; unknown values are null, never 0. A deliberately paused dataset answers 200 with empty data.","headers":{"ETag":{"$ref":"#/components/headers/ETag"},"Cache-Control":{"$ref":"#/components/headers/CacheControlData"},"RateLimit-Policy":{"$ref":"#/components/headers/RateLimitPolicy"},"RateLimit":{"$ref":"#/components/headers/RateLimit"},"Content-Language":{"$ref":"#/components/headers/ContentLanguage"},"Vary":{"$ref":"#/components/headers/VaryAcceptLanguage"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/FreeZoneSetupListResponse"}}}},"304":{"$ref":"#/components/responses/NotModified"},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"409":{"$ref":"#/components/responses/Conflict"},"429":{"$ref":"#/components/responses/TooManyRequests"},"503":{"$ref":"#/components/responses/ServiceUnavailable"}},"x-mcp-tool":true,"x-dataset":"company_setup","x-v1-equivalent":{"method":"GET","path":"/api/v1/visas?route=company","tool":"get_visa_and_company_costs"}}},"/api/v2/costs/areas":{"get":{"operationId":"rank_areas_by_living_cost","tags":["costs"],"summary":"Rank Dubai communities by estimated monthly living cost","description":"Median registered rent + housing fee + DEWA (example use) + transport + mobile + home internet, the website defaults; optionally the cheapest KHDA tuition per area. Assumptions in context.","parameters":[{"name":"bedrooms","in":"query","required":false,"schema":{"type":"integer","minimum":0,"maximum":10},"description":"0 = studio. Default 1."},{"name":"property_type","in":"query","required":false,"schema":{"type":"string","enum":["apartment","villa"]},"description":"Default apartment."},{"name":"include_school","in":"query","required":false,"schema":{"type":"boolean"},"description":"Add the cheapest KHDA tuition in each area (one child)."},{"name":"zone_id","in":"query","required":false,"schema":{"$ref":"#/components/schemas/RecordId"},"description":"One community."},{"name":"transport","in":"query","required":false,"schema":{"type":"string","enum":["car_commute_no_tolls","car_commute_with_salik","public_transport_one_zone","public_transport_two_zones"],"description":"Transport assumption."},"description":"Transport assumption."},{"name":"min_contracts","in":"query","required":false,"schema":{"type":"integer","minimum":10,"maximum":100000},"description":"Minimum registered contracts (default 30)."},{"name":"sort","in":"query","required":false,"schema":{"type":"string","enum":["total_monthly_aed","-total_monthly_aed","rent_monthly_aed","total_with_school_monthly_aed","name"],"default":"total_monthly_aed"},"description":"Sort allowlist; a leading \"-\" means descending. Other values ⇒ 400 unsupported_sort."},{"$ref":"#/components/parameters/PageSize"},{"$ref":"#/components/parameters/Cursor"},{"$ref":"#/components/parameters/AcceptLanguage"},{"$ref":"#/components/parameters/IfNoneMatch"}],"responses":{"200":{"description":"Success. AED; unknown values are null, never 0. A deliberately paused dataset answers 200 with empty data.","headers":{"ETag":{"$ref":"#/components/headers/ETag"},"Cache-Control":{"$ref":"#/components/headers/CacheControlData"},"RateLimit-Policy":{"$ref":"#/components/headers/RateLimitPolicy"},"RateLimit":{"$ref":"#/components/headers/RateLimit"},"Content-Language":{"$ref":"#/components/headers/ContentLanguage"},"Vary":{"$ref":"#/components/headers/VaryAcceptLanguage"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AreaLivingCostListResponse"}}}},"304":{"$ref":"#/components/responses/NotModified"},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"409":{"$ref":"#/components/responses/Conflict"},"429":{"$ref":"#/components/responses/TooManyRequests"},"503":{"$ref":"#/components/responses/ServiceUnavailable"}},"x-mcp-tool":true,"x-dataset":"area_living_costs","x-v1-equivalent":{"method":"GET","path":"/api/v1/areas","tool":"compare_areas_cost_of_living"}}},"/api/v2/costs/emirates":{"get":{"operationId":"list_emirate_living_costs","tags":["costs"],"summary":"Living-cost building blocks for each emirate","description":"Rent (only Dubai publishes registered rents as open data), utilities by provider, municipality housing fee, school data status, intercity buses and community points. Unknowns are statuses, never 0.","parameters":[{"$ref":"#/components/parameters/PageSize"},{"$ref":"#/components/parameters/Cursor"},{"$ref":"#/components/parameters/AcceptLanguage"},{"$ref":"#/components/parameters/IfNoneMatch"}],"responses":{"200":{"description":"Success. AED; unknown values are null, never 0. A deliberately paused dataset answers 200 with empty data.","headers":{"ETag":{"$ref":"#/components/headers/ETag"},"Cache-Control":{"$ref":"#/components/headers/CacheControlData"},"RateLimit-Policy":{"$ref":"#/components/headers/RateLimitPolicy"},"RateLimit":{"$ref":"#/components/headers/RateLimit"},"Content-Language":{"$ref":"#/components/headers/ContentLanguage"},"Vary":{"$ref":"#/components/headers/VaryAcceptLanguage"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/EmirateCostsListResponse"}}}},"304":{"$ref":"#/components/responses/NotModified"},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"409":{"$ref":"#/components/responses/Conflict"},"429":{"$ref":"#/components/responses/TooManyRequests"},"503":{"$ref":"#/components/responses/ServiceUnavailable"}},"x-mcp-tool":true,"x-dataset":"emirate_costs"}},"/api/v2/costs/emirates/{emirate_id}":{"get":{"operationId":"get_emirate_living_costs","tags":["costs"],"summary":"Living-cost building blocks of one emirate","description":"Same row as the list for one emirate.","parameters":[{"name":"emirate_id","in":"path","required":true,"schema":{"type":"string","enum":["dubai","abu_dhabi","sharjah","ajman","umm_al_quwain","ras_al_khaimah","fujairah"]},"description":"Emirate code."},{"$ref":"#/components/parameters/AcceptLanguage"},{"$ref":"#/components/parameters/IfNoneMatch"}],"responses":{"200":{"description":"Success. AED; unknown values are null, never 0. A deliberately paused dataset answers 200 with empty data.","headers":{"ETag":{"$ref":"#/components/headers/ETag"},"Cache-Control":{"$ref":"#/components/headers/CacheControlData"},"RateLimit-Policy":{"$ref":"#/components/headers/RateLimitPolicy"},"RateLimit":{"$ref":"#/components/headers/RateLimit"},"Content-Language":{"$ref":"#/components/headers/ContentLanguage"},"Vary":{"$ref":"#/components/headers/VaryAcceptLanguage"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/EmirateCostsResponse"}}}},"304":{"$ref":"#/components/responses/NotModified"},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"404":{"$ref":"#/components/responses/NotFound"},"429":{"$ref":"#/components/responses/TooManyRequests"},"503":{"$ref":"#/components/responses/ServiceUnavailable"}},"x-mcp-tool":true,"x-dataset":"emirate_costs"}},"/api/v2/costs/households":{"get":{"operationId":"list_household_cost_profiles","tags":["costs"],"summary":"Fixed monthly costs for three household profiles","description":"Single (studio), couple (1-bed) and family of four (2-bed, two children in private school): each line with assumption, source and date. Fixed costs only.","parameters":[{"name":"profile_id","in":"query","required":false,"schema":{"type":"string","enum":["single","couple","family4"]},"description":"One profile (default all)."},{"$ref":"#/components/parameters/AcceptLanguage"},{"$ref":"#/components/parameters/IfNoneMatch"}],"responses":{"200":{"description":"Success. AED; unknown values are null, never 0. A deliberately paused dataset answers 200 with empty data.","headers":{"ETag":{"$ref":"#/components/headers/ETag"},"Cache-Control":{"$ref":"#/components/headers/CacheControlData"},"RateLimit-Policy":{"$ref":"#/components/headers/RateLimitPolicy"},"RateLimit":{"$ref":"#/components/headers/RateLimit"},"Content-Language":{"$ref":"#/components/headers/ContentLanguage"},"Vary":{"$ref":"#/components/headers/VaryAcceptLanguage"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/HouseholdCostProfileListResponse"}}}},"304":{"$ref":"#/components/responses/NotModified"},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"429":{"$ref":"#/components/responses/TooManyRequests"},"503":{"$ref":"#/components/responses/ServiceUnavailable"}},"x-mcp-tool":true,"x-dataset":"household_cost_profiles","x-v1-equivalent":{"method":"GET","path":"/api/v1/cost-of-living","tool":"get_cost_of_living"}}},"/api/v2/electronics/models":{"get":{"operationId":"search_electronics_models","tags":["electronics"],"summary":"Electronics prices at Dubai stores (paused)","description":"PAUSED while sources are reviewed: HTTP 200, status paused, empty data, no Retry-After, never served from the last good copy.","parameters":[{"name":"q","in":"query","required":true,"schema":{"type":"string","maxLength":120,"minLength":1},"description":"Model text."},{"name":"category","in":"query","required":false,"schema":{"$ref":"#/components/schemas/Code"},"description":"Category code."},{"$ref":"#/components/parameters/PageSize"},{"$ref":"#/components/parameters/Cursor"},{"$ref":"#/components/parameters/AcceptLanguage"},{"$ref":"#/components/parameters/IfNoneMatch"}],"responses":{"200":{"description":"Success. AED; unknown values are null, never 0. A deliberately paused dataset answers 200 with empty data.","headers":{"ETag":{"$ref":"#/components/headers/ETag"},"Cache-Control":{"$ref":"#/components/headers/CacheControlData"},"RateLimit-Policy":{"$ref":"#/components/headers/RateLimitPolicy"},"RateLimit":{"$ref":"#/components/headers/RateLimit"},"Content-Language":{"$ref":"#/components/headers/ContentLanguage"},"Vary":{"$ref":"#/components/headers/VaryAcceptLanguage"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ElectronicsModelListResponse"}}}},"304":{"$ref":"#/components/responses/NotModified"},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"409":{"$ref":"#/components/responses/Conflict"},"429":{"$ref":"#/components/responses/TooManyRequests"},"503":{"$ref":"#/components/responses/ServiceUnavailable"}},"x-mcp-tool":true,"x-dataset":"electronics_prices","x-v1-equivalent":{"method":"GET","path":"/api/v1/electronics","tool":"get_electronics_prices"}}},"/api/v2/grocery/comparisons":{"post":{"operationId":"compare_grocery_list","tags":["grocery"],"summary":"Compare the cost of a grocery list across Dubai stores","description":"1–40 items of ≤120 characters. Stores are ranked on the same comparable subset; with one store with prices there is no ranking (outcome single_store). Product and quantity matches are proposals. Unknown delivery stays unknown. The body is not logged in URLs; no-store.","parameters":[{"$ref":"#/components/parameters/AcceptLanguage"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/GroceryComparisonRequest"}}}},"responses":{"200":{"description":"Success. AED; unknown values are null, never 0. A deliberately paused dataset answers 200 with empty data.","headers":{"Cache-Control":{"$ref":"#/components/headers/CacheControlNoStore"},"RateLimit-Policy":{"$ref":"#/components/headers/RateLimitPolicy"},"RateLimit":{"$ref":"#/components/headers/RateLimit"},"Content-Language":{"$ref":"#/components/headers/ContentLanguage"},"Vary":{"$ref":"#/components/headers/VaryAcceptLanguage"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/GroceryComparisonResponse"}}}},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"413":{"$ref":"#/components/responses/PayloadTooLarge"},"415":{"$ref":"#/components/responses/UnsupportedMediaType"},"429":{"$ref":"#/components/responses/TooManyRequests"},"503":{"$ref":"#/components/responses/ServiceUnavailable"}},"x-mcp-tool":true,"x-dataset":"grocery_comparison","x-v1-equivalent":{"method":"GET|POST","path":"/api/v1/compare","tool":"compare_grocery_list"},"x-max-request-bytes":24576}},"/api/v2/grocery/official-prices":{"get":{"operationId":"list_official_shop_prices","tags":["grocery"],"summary":"Official shop prices of essential goods (MOET)","description":"UAE Ministry of Economy and Tourism Essential Goods Prices Platform, Dubai branches only, identical variants, figures unaltered. Selective: give q, category, chain_id or product_id.","parameters":[{"name":"q","in":"query","required":false,"schema":{"type":"string","maxLength":120,"minLength":1},"description":"Product text."},{"name":"category","in":"query","required":false,"schema":{"type":"string","enum":["bread","chicken","cooking_oil","dairy","eggs","legumes","rice","sugar"]},"description":"Category."},{"name":"chain_id","in":"query","required":false,"schema":{"type":"string","enum":["al_maya","carrefour","emirates_coop","lulu","nesto","safeer","spinneys","union_coop"]},"description":"Only products reported for this chain."},{"name":"product_id","in":"query","required":false,"schema":{"$ref":"#/components/schemas/RecordId"},"description":"One product."},{"name":"sort","in":"query","required":false,"schema":{"type":"string","enum":["name","category"],"default":"name"},"description":"Sort allowlist; a leading \"-\" means descending. Other values ⇒ 400 unsupported_sort."},{"$ref":"#/components/parameters/PageSize"},{"$ref":"#/components/parameters/Cursor"},{"$ref":"#/components/parameters/AcceptLanguage"},{"$ref":"#/components/parameters/IfNoneMatch"}],"responses":{"200":{"description":"Success. AED; unknown values are null, never 0. A deliberately paused dataset answers 200 with empty data.","headers":{"ETag":{"$ref":"#/components/headers/ETag"},"Cache-Control":{"$ref":"#/components/headers/CacheControlData"},"RateLimit-Policy":{"$ref":"#/components/headers/RateLimitPolicy"},"RateLimit":{"$ref":"#/components/headers/RateLimit"},"Content-Language":{"$ref":"#/components/headers/ContentLanguage"},"Vary":{"$ref":"#/components/headers/VaryAcceptLanguage"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/OfficialShopPriceListResponse"}}}},"304":{"$ref":"#/components/responses/NotModified"},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"409":{"$ref":"#/components/responses/Conflict"},"429":{"$ref":"#/components/responses/TooManyRequests"},"503":{"$ref":"#/components/responses/ServiceUnavailable"}},"x-mcp-tool":true,"x-dataset":"official_shop_prices","x-required-one-of":["q","category","chain_id","product_id"]}},"/api/v2/grocery/online-references":{"get":{"operationId":"find_online_price_references","tags":["grocery"],"summary":"Indicative online price references (paused)","description":"Google Shopping UAE references. PAUSED during a legal review: HTTP 200, status paused, empty data, no Retry-After. Do not retry; use search_grocery_products.","parameters":[{"name":"q","in":"query","required":true,"schema":{"type":"string","maxLength":200,"minLength":1},"description":"Product text."},{"$ref":"#/components/parameters/PageSize"},{"$ref":"#/components/parameters/Cursor"},{"$ref":"#/components/parameters/AcceptLanguage"},{"$ref":"#/components/parameters/IfNoneMatch"}],"responses":{"200":{"description":"Success. AED; unknown values are null, never 0. A deliberately paused dataset answers 200 with empty data.","headers":{"ETag":{"$ref":"#/components/headers/ETag"},"Cache-Control":{"$ref":"#/components/headers/CacheControlData"},"RateLimit-Policy":{"$ref":"#/components/headers/RateLimitPolicy"},"RateLimit":{"$ref":"#/components/headers/RateLimit"},"Content-Language":{"$ref":"#/components/headers/ContentLanguage"},"Vary":{"$ref":"#/components/headers/VaryAcceptLanguage"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/OnlineReferenceListResponse"}}}},"304":{"$ref":"#/components/responses/NotModified"},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"409":{"$ref":"#/components/responses/Conflict"},"429":{"$ref":"#/components/responses/TooManyRequests"},"503":{"$ref":"#/components/responses/ServiceUnavailable"}},"x-mcp-tool":true,"x-dataset":"online_price_references","x-v1-equivalent":{"method":"GET","path":"/api/v1/search","tool":"find_price_online"}}},"/api/v2/grocery/products":{"get":{"operationId":"search_grocery_products","tags":["grocery"],"summary":"Search the observed grocery catalogue","description":"Selective search by name, brand or identifier (q required). Exact products and explicit equivalents are labelled. No live web search.","parameters":[{"name":"q","in":"query","required":true,"schema":{"type":"string","maxLength":120,"minLength":1},"description":"Product text, brand or id."},{"name":"comparison","in":"query","required":false,"schema":{"type":"string","enum":["exact","equivalent"]},"description":"Only exact products or only equivalents."},{"name":"store_id","in":"query","required":false,"schema":{"$ref":"#/components/schemas/RecordId"},"description":"Only products with an offer at this store."},{"name":"available_only","in":"query","required":false,"schema":{"type":"boolean"},"description":"Only products with a fresh, available offer."},{"name":"sort","in":"query","required":false,"schema":{"type":"string","enum":["relevance","name","-name","lowest_price_aed","-lowest_price_aed"],"default":"relevance"},"description":"Sort allowlist; a leading \"-\" means descending. Other values ⇒ 400 unsupported_sort."},{"$ref":"#/components/parameters/PageSize"},{"$ref":"#/components/parameters/Cursor"},{"$ref":"#/components/parameters/AcceptLanguage"},{"$ref":"#/components/parameters/IfNoneMatch"}],"responses":{"200":{"description":"Success. AED; unknown values are null, never 0. A deliberately paused dataset answers 200 with empty data.","headers":{"ETag":{"$ref":"#/components/headers/ETag"},"Cache-Control":{"$ref":"#/components/headers/CacheControlData"},"RateLimit-Policy":{"$ref":"#/components/headers/RateLimitPolicy"},"RateLimit":{"$ref":"#/components/headers/RateLimit"},"Content-Language":{"$ref":"#/components/headers/ContentLanguage"},"Vary":{"$ref":"#/components/headers/VaryAcceptLanguage"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/GroceryProductListResponse"}}}},"304":{"$ref":"#/components/responses/NotModified"},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"409":{"$ref":"#/components/responses/Conflict"},"429":{"$ref":"#/components/responses/TooManyRequests"},"503":{"$ref":"#/components/responses/ServiceUnavailable"}},"x-mcp-tool":true,"x-dataset":"grocery_catalog","x-v1-equivalent":{"method":"GET","path":"/api/v1/products","tool":"search_products"}}},"/api/v2/grocery/products/{product_id}":{"get":{"operationId":"get_grocery_product","tags":["grocery"],"summary":"Get one catalogue product with its store offers","description":"Offers per store (fresh, stale or unavailable are labelled, never ranked as current). Basket-total history is never presented as product history.","parameters":[{"name":"product_id","in":"path","required":true,"schema":{"$ref":"#/components/schemas/RecordId"},"description":"Catalogue product id."},{"$ref":"#/components/parameters/AcceptLanguage"},{"$ref":"#/components/parameters/IfNoneMatch"}],"responses":{"200":{"description":"Success. AED; unknown values are null, never 0. A deliberately paused dataset answers 200 with empty data.","headers":{"ETag":{"$ref":"#/components/headers/ETag"},"Cache-Control":{"$ref":"#/components/headers/CacheControlData"},"RateLimit-Policy":{"$ref":"#/components/headers/RateLimitPolicy"},"RateLimit":{"$ref":"#/components/headers/RateLimit"},"Content-Language":{"$ref":"#/components/headers/ContentLanguage"},"Vary":{"$ref":"#/components/headers/VaryAcceptLanguage"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/GroceryProductResponse"}}}},"304":{"$ref":"#/components/responses/NotModified"},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"404":{"$ref":"#/components/responses/NotFound"},"429":{"$ref":"#/components/responses/TooManyRequests"},"503":{"$ref":"#/components/responses/ServiceUnavailable"}},"x-mcp-tool":true,"x-dataset":"grocery_catalog","x-v1-equivalent":{"method":"GET","path":"/api/v1/products/{id}","tool":"get_product"}}},"/api/v2/grocery/products/{product_id}/offers":{"get":{"operationId":"list_grocery_product_offers","tags":["grocery"],"summary":"List the store offers of one product","description":"Offers of one product, filterable by store and availability.","parameters":[{"name":"product_id","in":"path","required":true,"schema":{"$ref":"#/components/schemas/RecordId"},"description":"Catalogue product id."},{"name":"store_id","in":"query","required":false,"schema":{"$ref":"#/components/schemas/RecordId"},"description":"Only this store."},{"name":"availability","in":"query","required":false,"schema":{"type":"string","enum":["available","unavailable","unknown"]},"description":"Filter by availability."},{"name":"sort","in":"query","required":false,"schema":{"type":"string","enum":["unit_price_aed","-unit_price_aed","price_aed","-price_aed","store_name"],"default":"unit_price_aed"},"description":"Sort allowlist; a leading \"-\" means descending. Other values ⇒ 400 unsupported_sort."},{"$ref":"#/components/parameters/PageSize"},{"$ref":"#/components/parameters/Cursor"},{"$ref":"#/components/parameters/AcceptLanguage"},{"$ref":"#/components/parameters/IfNoneMatch"}],"responses":{"200":{"description":"Success. AED; unknown values are null, never 0. A deliberately paused dataset answers 200 with empty data.","headers":{"ETag":{"$ref":"#/components/headers/ETag"},"Cache-Control":{"$ref":"#/components/headers/CacheControlData"},"RateLimit-Policy":{"$ref":"#/components/headers/RateLimitPolicy"},"RateLimit":{"$ref":"#/components/headers/RateLimit"},"Content-Language":{"$ref":"#/components/headers/ContentLanguage"},"Vary":{"$ref":"#/components/headers/VaryAcceptLanguage"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/GroceryOfferListResponse"}}}},"304":{"$ref":"#/components/responses/NotModified"},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"404":{"$ref":"#/components/responses/NotFound"},"409":{"$ref":"#/components/responses/Conflict"},"429":{"$ref":"#/components/responses/TooManyRequests"},"503":{"$ref":"#/components/responses/ServiceUnavailable"}},"x-mcp-tool":true,"x-dataset":"grocery_catalog","x-v1-equivalent":{"method":"GET","path":"/api/v1/products/{id}","tool":"get_product"}}},"/api/v2/grocery/shopper-reports":{"get":{"operationId":"list_shopper_reports","tags":["grocery"],"summary":"Moderated shopper price reports (receipts)","description":"Accepted reports of the last 30 days only: product, store, purchase date, pack price, promo flag. No zone, quantity or person data. Selective: product_id or store_id.","parameters":[{"name":"product_id","in":"query","required":false,"schema":{"$ref":"#/components/schemas/RecordId"},"description":"Catalogue product id."},{"name":"store_id","in":"query","required":false,"schema":{"$ref":"#/components/schemas/RecordId"},"description":"Store id."},{"name":"purchased_since","in":"query","required":false,"schema":{"$ref":"#/components/schemas/CalendarDate"},"description":"Not before this date (window is 30 days)."},{"name":"sort","in":"query","required":false,"schema":{"type":"string","enum":["-purchased_on","purchased_on","unit_price_aed"],"default":"-purchased_on"},"description":"Sort allowlist; a leading \"-\" means descending. Other values ⇒ 400 unsupported_sort."},{"$ref":"#/components/parameters/PageSize"},{"$ref":"#/components/parameters/Cursor"},{"$ref":"#/components/parameters/AcceptLanguage"},{"$ref":"#/components/parameters/IfNoneMatch"}],"responses":{"200":{"description":"Success. AED; unknown values are null, never 0. A deliberately paused dataset answers 200 with empty data.","headers":{"ETag":{"$ref":"#/components/headers/ETag"},"Cache-Control":{"$ref":"#/components/headers/CacheControlData"},"RateLimit-Policy":{"$ref":"#/components/headers/RateLimitPolicy"},"RateLimit":{"$ref":"#/components/headers/RateLimit"},"Content-Language":{"$ref":"#/components/headers/ContentLanguage"},"Vary":{"$ref":"#/components/headers/VaryAcceptLanguage"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ShopperReportListResponse"}}}},"304":{"$ref":"#/components/responses/NotModified"},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"409":{"$ref":"#/components/responses/Conflict"},"429":{"$ref":"#/components/responses/TooManyRequests"},"503":{"$ref":"#/components/responses/ServiceUnavailable"}},"x-mcp-tool":true,"x-dataset":"shopper_reports","x-required-one-of":["product_id","store_id"]}},"/api/v2/grocery/stores":{"get":{"operationId":"list_grocery_stores","tags":["grocery"],"summary":"List grocery stores and their published delivery rules","description":"Minimum orders, fee rules, sources and check dates. Unknown or expired rules are labelled; unknown fees are null.","parameters":[{"name":"delivery_rule_status","in":"query","required":false,"schema":{"type":"string","enum":["valid","stale","invalid","none"]},"description":"Filter by rule status."},{"name":"sort","in":"query","required":false,"schema":{"type":"string","enum":["name","-name"],"default":"name"},"description":"Sort allowlist; a leading \"-\" means descending. Other values ⇒ 400 unsupported_sort."},{"$ref":"#/components/parameters/PageSize"},{"$ref":"#/components/parameters/Cursor"},{"$ref":"#/components/parameters/AcceptLanguage"},{"$ref":"#/components/parameters/IfNoneMatch"}],"responses":{"200":{"description":"Success. AED; unknown values are null, never 0. A deliberately paused dataset answers 200 with empty data.","headers":{"ETag":{"$ref":"#/components/headers/ETag"},"Cache-Control":{"$ref":"#/components/headers/CacheControlData"},"RateLimit-Policy":{"$ref":"#/components/headers/RateLimitPolicy"},"RateLimit":{"$ref":"#/components/headers/RateLimit"},"Content-Language":{"$ref":"#/components/headers/ContentLanguage"},"Vary":{"$ref":"#/components/headers/VaryAcceptLanguage"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/GroceryStoreListResponse"}}}},"304":{"$ref":"#/components/responses/NotModified"},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"409":{"$ref":"#/components/responses/Conflict"},"429":{"$ref":"#/components/responses/TooManyRequests"},"503":{"$ref":"#/components/responses/ServiceUnavailable"}},"x-mcp-tool":true,"x-dataset":"grocery_delivery_rules","x-v1-equivalent":{"method":"GET","path":"/api/v1/stores","tool":"list_stores"}}},"/api/v2/grocery/stores/{store_id}":{"get":{"operationId":"get_grocery_store","tags":["grocery"],"summary":"Get one grocery store","description":"One store with its delivery rule.","parameters":[{"name":"store_id","in":"path","required":true,"schema":{"$ref":"#/components/schemas/RecordId"},"description":"Store id."},{"$ref":"#/components/parameters/AcceptLanguage"},{"$ref":"#/components/parameters/IfNoneMatch"}],"responses":{"200":{"description":"Success. AED; unknown values are null, never 0. A deliberately paused dataset answers 200 with empty data.","headers":{"ETag":{"$ref":"#/components/headers/ETag"},"Cache-Control":{"$ref":"#/components/headers/CacheControlData"},"RateLimit-Policy":{"$ref":"#/components/headers/RateLimitPolicy"},"RateLimit":{"$ref":"#/components/headers/RateLimit"},"Content-Language":{"$ref":"#/components/headers/ContentLanguage"},"Vary":{"$ref":"#/components/headers/VaryAcceptLanguage"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/GroceryStoreResponse"}}}},"304":{"$ref":"#/components/responses/NotModified"},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"404":{"$ref":"#/components/responses/NotFound"},"429":{"$ref":"#/components/responses/TooManyRequests"},"503":{"$ref":"#/components/responses/ServiceUnavailable"}},"x-mcp-tool":true,"x-dataset":"grocery_delivery_rules","x-v1-equivalent":{"method":"GET","path":"/api/v1/stores","tool":"list_stores"}}},"/api/v2/health-insurance/rules":{"get":{"operationId":"list_health_insurance_rules","tags":["health"],"summary":"Health insurance rules from official texts","description":"Who pays, minimum cover and fines in Dubai, each with article and source. No insurer prices. Abu Dhabi and the northern emirates are paused. Not legal advice.","parameters":[{"name":"emirate","in":"query","required":false,"schema":{"type":"string","enum":["dubai","abu_dhabi","sharjah","ajman","umm_al_quwain","ras_al_khaimah","fujairah"]},"description":"Only this emirate (default all)."},{"$ref":"#/components/parameters/AcceptLanguage"},{"$ref":"#/components/parameters/IfNoneMatch"}],"responses":{"200":{"description":"Success. AED; unknown values are null, never 0. A deliberately paused dataset answers 200 with empty data.","headers":{"ETag":{"$ref":"#/components/headers/ETag"},"Cache-Control":{"$ref":"#/components/headers/CacheControlData"},"RateLimit-Policy":{"$ref":"#/components/headers/RateLimitPolicy"},"RateLimit":{"$ref":"#/components/headers/RateLimit"},"Content-Language":{"$ref":"#/components/headers/ContentLanguage"},"Vary":{"$ref":"#/components/headers/VaryAcceptLanguage"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/HealthInsuranceScopeListResponse"}}}},"304":{"$ref":"#/components/responses/NotModified"},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"429":{"$ref":"#/components/responses/TooManyRequests"},"503":{"$ref":"#/components/responses/ServiceUnavailable"}},"x-mcp-tool":true,"x-dataset":"health_insurance_rules","x-v1-equivalent":{"method":"GET","path":"/api/v1/health-insurance","tool":"get_health_insurance"}}},"/api/v2/housing/rents":{"get":{"operationId":"list_registered_rent_medians","tags":["housing"],"summary":"Registered rent medians by community, type and bedrooms","description":"Selective: zone_id, or property_type together with bedrooms (ranking communities for one home size). Only combinations with ≥10 contracts.","parameters":[{"name":"zone_id","in":"query","required":false,"schema":{"$ref":"#/components/schemas/RecordId"},"description":"DLD zone id."},{"name":"property_type","in":"query","required":false,"schema":{"type":"string","enum":["apartment","villa"]},"description":"Apartment or villa."},{"name":"bedrooms","in":"query","required":false,"schema":{"type":"integer","minimum":0,"maximum":10},"description":"0 = studio."},{"name":"min_contracts","in":"query","required":false,"schema":{"type":"integer","minimum":10,"maximum":100000},"description":"Minimum registered contracts."},{"name":"sort","in":"query","required":false,"schema":{"type":"string","enum":["median_annual_aed","-median_annual_aed","-contracts","zone_name"],"default":"median_annual_aed"},"description":"Sort allowlist; a leading \"-\" means descending. Other values ⇒ 400 unsupported_sort."},{"$ref":"#/components/parameters/PageSize"},{"$ref":"#/components/parameters/Cursor"},{"$ref":"#/components/parameters/AcceptLanguage"},{"$ref":"#/components/parameters/IfNoneMatch"}],"responses":{"200":{"description":"Success. AED; unknown values are null, never 0. A deliberately paused dataset answers 200 with empty data.","headers":{"ETag":{"$ref":"#/components/headers/ETag"},"Cache-Control":{"$ref":"#/components/headers/CacheControlData"},"RateLimit-Policy":{"$ref":"#/components/headers/RateLimitPolicy"},"RateLimit":{"$ref":"#/components/headers/RateLimit"},"Content-Language":{"$ref":"#/components/headers/ContentLanguage"},"Vary":{"$ref":"#/components/headers/VaryAcceptLanguage"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RentMedianListResponse"}}}},"304":{"$ref":"#/components/responses/NotModified"},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"409":{"$ref":"#/components/responses/Conflict"},"429":{"$ref":"#/components/responses/TooManyRequests"},"503":{"$ref":"#/components/responses/ServiceUnavailable"}},"x-mcp-tool":true,"x-dataset":"registered_property","x-v1-equivalent":{"method":"GET","path":"/api/v1/rent","tool":"get_rent_prices"},"x-required-one-of":["zone_id","property_type+bedrooms"]}},"/api/v2/housing/sales":{"get":{"operationId":"list_registered_sale_medians","tags":["housing"],"summary":"Registered sale medians by community, type, bedrooms and market","description":"Ready and off-plan separately; price per sq ft from the registered area. Selective: zone_id, or property_type together with bedrooms.","parameters":[{"name":"zone_id","in":"query","required":false,"schema":{"$ref":"#/components/schemas/RecordId"},"description":"DLD zone id."},{"name":"property_type","in":"query","required":false,"schema":{"type":"string","enum":["apartment","villa"]},"description":"Apartment or villa."},{"name":"bedrooms","in":"query","required":false,"schema":{"type":"integer","minimum":0,"maximum":10},"description":"0 = studio."},{"name":"market","in":"query","required":false,"schema":{"type":"string","enum":["ready","off_plan"]},"description":"Ready or off-plan."},{"name":"sort","in":"query","required":false,"schema":{"type":"string","enum":["median_price_aed","-median_price_aed","median_aed_per_sqft","-median_aed_per_sqft","-transactions","zone_name"],"default":"median_price_aed"},"description":"Sort allowlist; a leading \"-\" means descending. Other values ⇒ 400 unsupported_sort."},{"$ref":"#/components/parameters/PageSize"},{"$ref":"#/components/parameters/Cursor"},{"$ref":"#/components/parameters/AcceptLanguage"},{"$ref":"#/components/parameters/IfNoneMatch"}],"responses":{"200":{"description":"Success. AED; unknown values are null, never 0. A deliberately paused dataset answers 200 with empty data.","headers":{"ETag":{"$ref":"#/components/headers/ETag"},"Cache-Control":{"$ref":"#/components/headers/CacheControlData"},"RateLimit-Policy":{"$ref":"#/components/headers/RateLimitPolicy"},"RateLimit":{"$ref":"#/components/headers/RateLimit"},"Content-Language":{"$ref":"#/components/headers/ContentLanguage"},"Vary":{"$ref":"#/components/headers/VaryAcceptLanguage"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SaleMedianListResponse"}}}},"304":{"$ref":"#/components/responses/NotModified"},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"409":{"$ref":"#/components/responses/Conflict"},"429":{"$ref":"#/components/responses/TooManyRequests"},"503":{"$ref":"#/components/responses/ServiceUnavailable"}},"x-mcp-tool":true,"x-dataset":"registered_property","x-v1-equivalent":{"method":"GET","path":"/api/v1/rent","tool":"get_rent_prices"},"x-required-one-of":["zone_id","property_type+bedrooms"]}},"/api/v2/housing/zones":{"get":{"operationId":"search_housing_zones","tags":["housing"],"summary":"Find a Dubai community (DLD zone)","description":"Matches the name, Arabic name, aliases (JVC, JLT…) and DLD sub-areas. Selective: q required.","parameters":[{"name":"q","in":"query","required":true,"schema":{"type":"string","maxLength":80,"minLength":1},"description":"Community name or alias."},{"name":"sort","in":"query","required":false,"schema":{"type":"string","enum":["name","-rent_contracts","-sale_transactions"],"default":"name"},"description":"Sort allowlist; a leading \"-\" means descending. Other values ⇒ 400 unsupported_sort."},{"$ref":"#/components/parameters/PageSize"},{"$ref":"#/components/parameters/Cursor"},{"$ref":"#/components/parameters/AcceptLanguage"},{"$ref":"#/components/parameters/IfNoneMatch"}],"responses":{"200":{"description":"Success. AED; unknown values are null, never 0. A deliberately paused dataset answers 200 with empty data.","headers":{"ETag":{"$ref":"#/components/headers/ETag"},"Cache-Control":{"$ref":"#/components/headers/CacheControlData"},"RateLimit-Policy":{"$ref":"#/components/headers/RateLimitPolicy"},"RateLimit":{"$ref":"#/components/headers/RateLimit"},"Content-Language":{"$ref":"#/components/headers/ContentLanguage"},"Vary":{"$ref":"#/components/headers/VaryAcceptLanguage"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/HousingZoneListResponse"}}}},"304":{"$ref":"#/components/responses/NotModified"},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"409":{"$ref":"#/components/responses/Conflict"},"429":{"$ref":"#/components/responses/TooManyRequests"},"503":{"$ref":"#/components/responses/ServiceUnavailable"}},"x-mcp-tool":true,"x-dataset":"registered_property","x-v1-equivalent":{"method":"GET","path":"/api/v1/rent","tool":"get_rent_prices"}}},"/api/v2/housing/zones/{zone_id}":{"get":{"operationId":"get_housing_zone","tags":["housing"],"summary":"Registered rents and sales of one community","description":"Median annual rent (registered Ejari contracts, last 12 months) by type and bedrooms, new vs renewal, and registered sales (ready and off-plan). Not asking prices.","parameters":[{"name":"zone_id","in":"path","required":true,"schema":{"$ref":"#/components/schemas/RecordId"},"description":"DLD zone id."},{"$ref":"#/components/parameters/AcceptLanguage"},{"$ref":"#/components/parameters/IfNoneMatch"}],"responses":{"200":{"description":"Success. AED; unknown values are null, never 0. A deliberately paused dataset answers 200 with empty data.","headers":{"ETag":{"$ref":"#/components/headers/ETag"},"Cache-Control":{"$ref":"#/components/headers/CacheControlData"},"RateLimit-Policy":{"$ref":"#/components/headers/RateLimitPolicy"},"RateLimit":{"$ref":"#/components/headers/RateLimit"},"Content-Language":{"$ref":"#/components/headers/ContentLanguage"},"Vary":{"$ref":"#/components/headers/VaryAcceptLanguage"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/HousingZoneResponse"}}}},"304":{"$ref":"#/components/responses/NotModified"},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"404":{"$ref":"#/components/responses/NotFound"},"429":{"$ref":"#/components/responses/TooManyRequests"},"503":{"$ref":"#/components/responses/ServiceUnavailable"}},"x-mcp-tool":true,"x-dataset":"registered_property","x-v1-equivalent":{"method":"GET","path":"/api/v1/rent","tool":"get_rent_prices"}}},"/api/v2/indices/family":{"get":{"operationId":"list_family_index_entries","tags":["relocation"],"summary":"Family index: employee pay and business-owner profit after tax, home vs Dubai","description":"Published scenarios per country: typical full-time employee (single and family) with the official earnings statistics used, and business owners (home company vs Dubai mainland or free-zone company) with assumptions, exit rules and sources. Dubai corporate-tax rules and the CBUAE rate date in context. Estimate, not tax advice.","parameters":[{"name":"iso2","in":"query","required":false,"schema":{"type":"string","pattern":"^[A-Z]{2}$"},"description":"One country."},{"$ref":"#/components/parameters/PageSize"},{"$ref":"#/components/parameters/Cursor"},{"$ref":"#/components/parameters/AcceptLanguage"},{"$ref":"#/components/parameters/IfNoneMatch"}],"responses":{"200":{"description":"Success. AED; unknown values are null, never 0. A deliberately paused dataset answers 200 with empty data.","headers":{"ETag":{"$ref":"#/components/headers/ETag"},"Cache-Control":{"$ref":"#/components/headers/CacheControlData"},"RateLimit-Policy":{"$ref":"#/components/headers/RateLimitPolicy"},"RateLimit":{"$ref":"#/components/headers/RateLimit"},"Content-Language":{"$ref":"#/components/headers/ContentLanguage"},"Vary":{"$ref":"#/components/headers/VaryAcceptLanguage"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/FamilyIndexListResponse"}}}},"304":{"$ref":"#/components/responses/NotModified"},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"409":{"$ref":"#/components/responses/Conflict"},"429":{"$ref":"#/components/responses/TooManyRequests"},"503":{"$ref":"#/components/responses/ServiceUnavailable"}},"x-mcp-tool":true,"x-dataset":"family_index"}},"/api/v2/openapi.json":{"get":{"operationId":"get_openapi_v2_document","tags":["meta"],"summary":"This OpenAPI 3.1 document","description":"Served as JSON. Not an MCP tool.","parameters":[{"$ref":"#/components/parameters/IfNoneMatch"}],"responses":{"200":{"description":"Success. AED; unknown values are null, never 0. A deliberately paused dataset answers 200 with empty data.","headers":{"ETag":{"$ref":"#/components/headers/ETag"},"Cache-Control":{"$ref":"#/components/headers/CacheControlData"},"RateLimit-Policy":{"$ref":"#/components/headers/RateLimitPolicy"},"RateLimit":{"$ref":"#/components/headers/RateLimit"}},"content":{"application/json":{"schema":{"$ref":"https://spec.openapis.org/oas/3.1/schema/2022-10-07","description":"OpenAPI 3.1 document (this contract), validated by the official OAS 3.1 schema."}}}},"304":{"$ref":"#/components/responses/NotModified"},"401":{"$ref":"#/components/responses/Unauthorized"},"429":{"$ref":"#/components/responses/TooManyRequests"},"503":{"$ref":"#/components/responses/ServiceUnavailable"}},"x-mcp-tool":false,"x-v1-equivalent":{"method":"GET","path":"/api/v1/openapi.json","tool":null}}},"/api/v2/references/fx-rates":{"get":{"operationId":"get_cbuae_fx_rates","tags":["relocation"],"summary":"CBUAE exchange rates used by the calculators","description":"AED per 1 unit of currency as published by the Central Bank of the UAE for the date shown.","parameters":[{"name":"currency","in":"query","required":false,"schema":{"type":"string","pattern":"^[A-Z]{3}$"},"description":"Only this currency."},{"$ref":"#/components/parameters/AcceptLanguage"},{"$ref":"#/components/parameters/IfNoneMatch"}],"responses":{"200":{"description":"Success. AED; unknown values are null, never 0. A deliberately paused dataset answers 200 with empty data.","headers":{"ETag":{"$ref":"#/components/headers/ETag"},"Cache-Control":{"$ref":"#/components/headers/CacheControlData"},"RateLimit-Policy":{"$ref":"#/components/headers/RateLimitPolicy"},"RateLimit":{"$ref":"#/components/headers/RateLimit"},"Content-Language":{"$ref":"#/components/headers/ContentLanguage"},"Vary":{"$ref":"#/components/headers/VaryAcceptLanguage"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/FxRatesResponse"}}}},"304":{"$ref":"#/components/responses/NotModified"},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"429":{"$ref":"#/components/responses/TooManyRequests"},"503":{"$ref":"#/components/responses/ServiceUnavailable"}},"x-mcp-tool":true,"x-dataset":"fx_rates"}},"/api/v2/relocation/estimates":{"post":{"operationId":"estimate_move_to_dubai","tags":["relocation"],"summary":"Private estimate: salary after tax at home vs in Dubai","description":"Official tax model of the home country for the tax year shown, CBUAE rate of the day, registered Dubai rent for an area and the grocery basket, projected monthly savings. Estimate, not tax advice. Personal data in the POST body only (GET answers 405 as in v1, see components.examples.ProblemRelocationGet); response no-store; nothing stored. No response example: root captured GET only (no private calculation was requested).","parameters":[{"$ref":"#/components/parameters/AcceptLanguage"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RelocationRequest"}}}},"responses":{"200":{"description":"Success. AED; unknown values are null, never 0. A deliberately paused dataset answers 200 with empty data.","headers":{"Cache-Control":{"$ref":"#/components/headers/CacheControlNoStore"},"RateLimit-Policy":{"$ref":"#/components/headers/RateLimitPolicy"},"RateLimit":{"$ref":"#/components/headers/RateLimit"},"Content-Language":{"$ref":"#/components/headers/ContentLanguage"},"Vary":{"$ref":"#/components/headers/VaryAcceptLanguage"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RelocationEstimateResponse"}}}},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"404":{"$ref":"#/components/responses/NotFound"},"413":{"$ref":"#/components/responses/PayloadTooLarge"},"415":{"$ref":"#/components/responses/UnsupportedMediaType"},"422":{"$ref":"#/components/responses/Unprocessable"},"429":{"$ref":"#/components/responses/TooManyRequests"},"503":{"$ref":"#/components/responses/ServiceUnavailable"}},"x-mcp-tool":true,"x-dataset":"relocation_estimate","x-v1-equivalent":{"method":"POST","path":"/api/v1/move","tool":"estimate_move_to_dubai"},"x-max-request-bytes":24576}},"/api/v2/residence/common-fees":{"get":{"operationId":"list_common_residence_fees","tags":["residence"],"summary":"Fees every new resident meets","description":"Medical fitness test and mandatory health insurance band with official wording; Emirates ID paused while ICP is asked for permission; unknown costs with reasons in context.","parameters":[{"$ref":"#/components/parameters/AcceptLanguage"},{"$ref":"#/components/parameters/IfNoneMatch"}],"responses":{"200":{"description":"Success. AED; unknown values are null, never 0. A deliberately paused dataset answers 200 with empty data.","headers":{"ETag":{"$ref":"#/components/headers/ETag"},"Cache-Control":{"$ref":"#/components/headers/CacheControlData"},"RateLimit-Policy":{"$ref":"#/components/headers/RateLimitPolicy"},"RateLimit":{"$ref":"#/components/headers/RateLimit"},"Content-Language":{"$ref":"#/components/headers/ContentLanguage"},"Vary":{"$ref":"#/components/headers/VaryAcceptLanguage"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResidenceFeeItemListResponse"}}}},"304":{"$ref":"#/components/responses/NotModified"},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"429":{"$ref":"#/components/responses/TooManyRequests"},"503":{"$ref":"#/components/responses/ServiceUnavailable"}},"x-mcp-tool":true,"x-dataset":"residence_fees","x-v1-equivalent":{"method":"GET","path":"/api/v1/visas","tool":"get_visa_and_company_costs"}}},"/api/v2/residence/routes":{"get":{"operationId":"list_residence_routes","tags":["residence"],"summary":"Official fees to move to Dubai by residence route","description":"Work permit, entry permit, residence and renewal by route (job, family, golden, remote, freelance, investor), who pays and requirements, quoting the official wording. Paused authorities are named without figures.","parameters":[{"name":"route_id","in":"query","required":false,"schema":{"type":"string","enum":["employment","family","golden","remote","freelance","investor"]},"description":"One route."},{"$ref":"#/components/parameters/AcceptLanguage"},{"$ref":"#/components/parameters/IfNoneMatch"}],"responses":{"200":{"description":"Success. AED; unknown values are null, never 0. A deliberately paused dataset answers 200 with empty data.","headers":{"ETag":{"$ref":"#/components/headers/ETag"},"Cache-Control":{"$ref":"#/components/headers/CacheControlData"},"RateLimit-Policy":{"$ref":"#/components/headers/RateLimitPolicy"},"RateLimit":{"$ref":"#/components/headers/RateLimit"},"Content-Language":{"$ref":"#/components/headers/ContentLanguage"},"Vary":{"$ref":"#/components/headers/VaryAcceptLanguage"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResidenceRouteListResponse"}}}},"304":{"$ref":"#/components/responses/NotModified"},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"429":{"$ref":"#/components/responses/TooManyRequests"},"503":{"$ref":"#/components/responses/ServiceUnavailable"}},"x-mcp-tool":true,"x-dataset":"residence_fees","x-v1-equivalent":{"method":"GET","path":"/api/v1/visas","tool":"get_visa_and_company_costs"}}},"/api/v2/residence/routes/{route_id}":{"get":{"operationId":"get_residence_route","tags":["residence"],"summary":"One residence route with its official fee cards","description":"Same row as the list.","parameters":[{"name":"route_id","in":"path","required":true,"schema":{"type":"string","enum":["employment","family","golden","remote","freelance","investor"]},"description":"Route code."},{"$ref":"#/components/parameters/AcceptLanguage"},{"$ref":"#/components/parameters/IfNoneMatch"}],"responses":{"200":{"description":"Success. AED; unknown values are null, never 0. A deliberately paused dataset answers 200 with empty data.","headers":{"ETag":{"$ref":"#/components/headers/ETag"},"Cache-Control":{"$ref":"#/components/headers/CacheControlData"},"RateLimit-Policy":{"$ref":"#/components/headers/RateLimitPolicy"},"RateLimit":{"$ref":"#/components/headers/RateLimit"},"Content-Language":{"$ref":"#/components/headers/ContentLanguage"},"Vary":{"$ref":"#/components/headers/VaryAcceptLanguage"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResidenceRouteResponse"}}}},"304":{"$ref":"#/components/responses/NotModified"},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"404":{"$ref":"#/components/responses/NotFound"},"429":{"$ref":"#/components/responses/TooManyRequests"},"503":{"$ref":"#/components/responses/ServiceUnavailable"}},"x-mcp-tool":true,"x-dataset":"residence_fees","x-v1-equivalent":{"method":"GET","path":"/api/v1/visas","tool":"get_visa_and_company_costs"}}},"/api/v2/schools":{"get":{"operationId":"search_schools","tags":["schools"],"summary":"Search Dubai private schools with KHDA tuition","description":"KHDA tuition as published (tuition only; grade labels as published; Year ≠ Grade). Selective: at least one of q, area, curriculum, grade, near, max_annual_fee_aed. With near: straight-line distance from the community centre (OpenStreetMap, ODbL), nearest first. Ratings are kept exactly as KHDA publishes them.","parameters":[{"name":"q","in":"query","required":false,"schema":{"type":"string","maxLength":120,"minLength":1},"description":"School name."},{"name":"area","in":"query","required":false,"schema":{"type":"string","maxLength":80,"minLength":1},"description":"KHDA area."},{"name":"curriculum","in":"query","required":false,"schema":{"type":"string","maxLength":60,"minLength":1},"description":"Curriculum, e.g. British."},{"name":"grade","in":"query","required":false,"schema":{"type":"string","maxLength":30,"minLength":1},"description":"Grade label as published, e.g. \"FS 1\", \"YEAR 7\", \"GRADE 10\"."},{"name":"max_annual_fee_aed","in":"query","required":false,"schema":{"type":"number","minimum":0,"maximum":1000000},"description":"Budget for the grade (or any grade)."},{"name":"rating","in":"query","required":false,"schema":{"type":"string","maxLength":40},"description":"KHDA rating label as published."},{"name":"near","in":"query","required":false,"schema":{"type":"string","maxLength":80,"minLength":1},"description":"Community to measure distance from."},{"name":"radius_km","in":"query","required":false,"schema":{"type":"integer","enum":[5,10,15,20,30],"default":10},"description":"With near."},{"name":"sort","in":"query","required":false,"schema":{"type":"string","enum":["name","distance_km","annual_fee_aed","-annual_fee_aed"],"default":"name"},"description":"Sort allowlist; a leading \"-\" means descending. Other values ⇒ 400 unsupported_sort."},{"$ref":"#/components/parameters/PageSize"},{"$ref":"#/components/parameters/Cursor"},{"$ref":"#/components/parameters/AcceptLanguage"},{"$ref":"#/components/parameters/IfNoneMatch"}],"responses":{"200":{"description":"Success. AED; unknown values are null, never 0. A deliberately paused dataset answers 200 with empty data.","headers":{"ETag":{"$ref":"#/components/headers/ETag"},"Cache-Control":{"$ref":"#/components/headers/CacheControlData"},"RateLimit-Policy":{"$ref":"#/components/headers/RateLimitPolicy"},"RateLimit":{"$ref":"#/components/headers/RateLimit"},"Content-Language":{"$ref":"#/components/headers/ContentLanguage"},"Vary":{"$ref":"#/components/headers/VaryAcceptLanguage"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SchoolListResponse"}}}},"304":{"$ref":"#/components/responses/NotModified"},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"409":{"$ref":"#/components/responses/Conflict"},"429":{"$ref":"#/components/responses/TooManyRequests"},"503":{"$ref":"#/components/responses/ServiceUnavailable"}},"x-mcp-tool":true,"x-dataset":"school_fees","x-v1-equivalent":{"method":"GET","path":"/api/v1/schools","tool":"get_school_fees"},"x-required-one-of":["q","area","curriculum","grade","near","max_annual_fee_aed","rating"]}},"/api/v2/schools/{school_id}":{"get":{"operationId":"get_school","tags":["schools"],"summary":"Get one school with all its KHDA fees and bus fees","description":"All grades as published, bus fees by zone when the operator publishes them.","parameters":[{"name":"school_id","in":"path","required":true,"schema":{"$ref":"#/components/schemas/RecordId"},"description":"KHDA-derived school id."},{"$ref":"#/components/parameters/AcceptLanguage"},{"$ref":"#/components/parameters/IfNoneMatch"}],"responses":{"200":{"description":"Success. AED; unknown values are null, never 0. A deliberately paused dataset answers 200 with empty data.","headers":{"ETag":{"$ref":"#/components/headers/ETag"},"Cache-Control":{"$ref":"#/components/headers/CacheControlData"},"RateLimit-Policy":{"$ref":"#/components/headers/RateLimitPolicy"},"RateLimit":{"$ref":"#/components/headers/RateLimit"},"Content-Language":{"$ref":"#/components/headers/ContentLanguage"},"Vary":{"$ref":"#/components/headers/VaryAcceptLanguage"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SchoolResponse"}}}},"304":{"$ref":"#/components/responses/NotModified"},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"404":{"$ref":"#/components/responses/NotFound"},"429":{"$ref":"#/components/responses/TooManyRequests"},"503":{"$ref":"#/components/responses/ServiceUnavailable"}},"x-mcp-tool":true,"x-dataset":"school_fees","x-v1-equivalent":{"method":"GET","path":"/api/v1/schools","tool":"get_school_fees"}}},"/api/v2/schools/{school_id}/uniform-items":{"get":{"operationId":"list_school_uniform_items","tags":["schools"],"summary":"Official uniform items and prices of a school (paused)","description":"Supplier catalogue item by item; no kit total is invented. PAUSED while suppliers are asked for permission: 200, status paused, empty data, never served from the last good copy.","parameters":[{"name":"school_id","in":"path","required":true,"schema":{"$ref":"#/components/schemas/RecordId"},"description":"School id."},{"$ref":"#/components/parameters/PageSize"},{"$ref":"#/components/parameters/Cursor"},{"$ref":"#/components/parameters/AcceptLanguage"},{"$ref":"#/components/parameters/IfNoneMatch"}],"responses":{"200":{"description":"Success. AED; unknown values are null, never 0. A deliberately paused dataset answers 200 with empty data.","headers":{"ETag":{"$ref":"#/components/headers/ETag"},"Cache-Control":{"$ref":"#/components/headers/CacheControlData"},"RateLimit-Policy":{"$ref":"#/components/headers/RateLimitPolicy"},"RateLimit":{"$ref":"#/components/headers/RateLimit"},"Content-Language":{"$ref":"#/components/headers/ContentLanguage"},"Vary":{"$ref":"#/components/headers/VaryAcceptLanguage"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UniformItemListResponse"}}}},"304":{"$ref":"#/components/responses/NotModified"},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"404":{"$ref":"#/components/responses/NotFound"},"409":{"$ref":"#/components/responses/Conflict"},"429":{"$ref":"#/components/responses/TooManyRequests"},"503":{"$ref":"#/components/responses/ServiceUnavailable"}},"x-mcp-tool":true,"x-dataset":"school_uniforms","x-v1-equivalent":{"method":"GET","path":"/api/v1/school-uniforms","tool":"get_school_uniforms"}}},"/api/v2/sources":{"get":{"operationId":"list_data_sources","tags":["meta"],"summary":"Upstream sources, their licence or terms and pause status","description":"Every dataset names its sources; this registry gives the exact attribution, licence status (normative: confirmed, restricted, unconfirmed, paused) and conditions.","parameters":[{"name":"status","in":"query","required":false,"schema":{"type":"string","enum":["ok","paused","unreadable","not_published"]},"description":"Source status."},{"name":"license_status","in":"query","required":false,"schema":{"type":"string","enum":["confirmed","restricted","unconfirmed","paused"]},"description":"Licence status."},{"name":"dataset_id","in":"query","required":false,"schema":{"$ref":"#/components/schemas/Code"},"description":"Sources of one dataset."},{"$ref":"#/components/parameters/PageSize"},{"$ref":"#/components/parameters/Cursor"},{"$ref":"#/components/parameters/AcceptLanguage"},{"$ref":"#/components/parameters/IfNoneMatch"}],"responses":{"200":{"description":"Success. AED; unknown values are null, never 0. A deliberately paused dataset answers 200 with empty data.","headers":{"ETag":{"$ref":"#/components/headers/ETag"},"Cache-Control":{"$ref":"#/components/headers/CacheControlData"},"RateLimit-Policy":{"$ref":"#/components/headers/RateLimitPolicy"},"RateLimit":{"$ref":"#/components/headers/RateLimit"},"Content-Language":{"$ref":"#/components/headers/ContentLanguage"},"Vary":{"$ref":"#/components/headers/VaryAcceptLanguage"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SourceListResponse"}}}},"304":{"$ref":"#/components/responses/NotModified"},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"409":{"$ref":"#/components/responses/Conflict"},"429":{"$ref":"#/components/responses/TooManyRequests"},"503":{"$ref":"#/components/responses/ServiceUnavailable"}},"x-mcp-tool":true,"x-dataset":"sources"}},"/api/v2/sources/{source_id}":{"get":{"operationId":"get_data_source","tags":["meta"],"summary":"One upstream source and its terms","description":"Same row as the registry.","parameters":[{"name":"source_id","in":"path","required":true,"schema":{"$ref":"#/components/schemas/Code"},"description":"Source code."},{"$ref":"#/components/parameters/AcceptLanguage"},{"$ref":"#/components/parameters/IfNoneMatch"}],"responses":{"200":{"description":"Success. AED; unknown values are null, never 0. A deliberately paused dataset answers 200 with empty data.","headers":{"ETag":{"$ref":"#/components/headers/ETag"},"Cache-Control":{"$ref":"#/components/headers/CacheControlData"},"RateLimit-Policy":{"$ref":"#/components/headers/RateLimitPolicy"},"RateLimit":{"$ref":"#/components/headers/RateLimit"},"Content-Language":{"$ref":"#/components/headers/ContentLanguage"},"Vary":{"$ref":"#/components/headers/VaryAcceptLanguage"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SourceResponse"}}}},"304":{"$ref":"#/components/responses/NotModified"},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"404":{"$ref":"#/components/responses/NotFound"},"429":{"$ref":"#/components/responses/TooManyRequests"},"503":{"$ref":"#/components/responses/ServiceUnavailable"}},"x-mcp-tool":true,"x-dataset":"sources"}},"/api/v2/tax/country-models":{"get":{"operationId":"list_tax_country_models","tags":["relocation"],"summary":"Home-country tax models supported by the relocation estimate","description":"Status (complete or incomplete with reason), tax year and the official sources of each model. Reference data, no personal input.","parameters":[{"name":"iso2","in":"query","required":false,"schema":{"type":"string","pattern":"^[A-Z]{2}$"},"description":"One country."},{"name":"status","in":"query","required":false,"schema":{"type":"string","enum":["complete","incomplete"]},"description":"Model status."},{"name":"sort","in":"query","required":false,"schema":{"type":"string","enum":["name","iso2"],"default":"name"},"description":"Sort allowlist; a leading \"-\" means descending. Other values ⇒ 400 unsupported_sort."},{"$ref":"#/components/parameters/PageSize"},{"$ref":"#/components/parameters/Cursor"},{"$ref":"#/components/parameters/AcceptLanguage"},{"$ref":"#/components/parameters/IfNoneMatch"}],"responses":{"200":{"description":"Success. AED; unknown values are null, never 0. A deliberately paused dataset answers 200 with empty data.","headers":{"ETag":{"$ref":"#/components/headers/ETag"},"Cache-Control":{"$ref":"#/components/headers/CacheControlData"},"RateLimit-Policy":{"$ref":"#/components/headers/RateLimitPolicy"},"RateLimit":{"$ref":"#/components/headers/RateLimit"},"Content-Language":{"$ref":"#/components/headers/ContentLanguage"},"Vary":{"$ref":"#/components/headers/VaryAcceptLanguage"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TaxCountryModelListResponse"}}}},"304":{"$ref":"#/components/responses/NotModified"},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"409":{"$ref":"#/components/responses/Conflict"},"429":{"$ref":"#/components/responses/TooManyRequests"},"503":{"$ref":"#/components/responses/ServiceUnavailable"}},"x-mcp-tool":true,"x-dataset":"tax_models"}},"/api/v2/telecom/plans":{"get":{"operationId":"search_telecom_plans","tags":["telecom"],"summary":"Mobile and home internet plans (VAT basis per plan)","description":"Ranked plans first by price per month. Plans whose price is not shown are listed as unverified and never ranked; tourist SIMs priced by days are excluded from monthly ranking. du is pending (robots.txt / script-built pages).","parameters":[{"name":"category","in":"query","required":false,"schema":{"type":"string","enum":["mobile_postpaid","mobile_prepaid","home_internet"]},"description":"Plan category."},{"name":"operator","in":"query","required":false,"schema":{"type":"string","maxLength":40,"minLength":1},"description":"Operator name."},{"name":"max_aed_per_month","in":"query","required":false,"schema":{"type":"number","minimum":0,"maximum":100000},"description":"Budget per month."},{"name":"min_data_gb","in":"query","required":false,"schema":{"type":"number","minimum":0},"description":"Minimum data."},{"name":"status","in":"query","required":false,"schema":{"type":"string","enum":["ranked","unverified","excluded"]},"description":"Row status."},{"name":"sort","in":"query","required":false,"schema":{"type":"string","enum":["price_aed_per_month","aed_per_gb","-data_gb","name"],"default":"price_aed_per_month"},"description":"Sort allowlist; a leading \"-\" means descending. Other values ⇒ 400 unsupported_sort."},{"$ref":"#/components/parameters/PageSize"},{"$ref":"#/components/parameters/Cursor"},{"$ref":"#/components/parameters/AcceptLanguage"},{"$ref":"#/components/parameters/IfNoneMatch"}],"responses":{"200":{"description":"Success. AED; unknown values are null, never 0. A deliberately paused dataset answers 200 with empty data.","headers":{"ETag":{"$ref":"#/components/headers/ETag"},"Cache-Control":{"$ref":"#/components/headers/CacheControlData"},"RateLimit-Policy":{"$ref":"#/components/headers/RateLimitPolicy"},"RateLimit":{"$ref":"#/components/headers/RateLimit"},"Content-Language":{"$ref":"#/components/headers/ContentLanguage"},"Vary":{"$ref":"#/components/headers/VaryAcceptLanguage"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TelecomPlanListResponse"}}}},"304":{"$ref":"#/components/responses/NotModified"},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"409":{"$ref":"#/components/responses/Conflict"},"429":{"$ref":"#/components/responses/TooManyRequests"},"503":{"$ref":"#/components/responses/ServiceUnavailable"}},"x-mcp-tool":true,"x-dataset":"telecom_plans","x-v1-equivalent":{"method":"GET","path":"/api/v1/mobile-internet-plans","tool":"get_mobile_internet_plans"}}},"/api/v2/telecom/plans/{plan_id}":{"get":{"operationId":"get_telecom_plan","tags":["telecom"],"summary":"One telecom plan","description":"Plan terms as published, with citation and collection time.","parameters":[{"name":"plan_id","in":"path","required":true,"schema":{"$ref":"#/components/schemas/RecordId"},"description":"Plan id."},{"$ref":"#/components/parameters/AcceptLanguage"},{"$ref":"#/components/parameters/IfNoneMatch"}],"responses":{"200":{"description":"Success. AED; unknown values are null, never 0. A deliberately paused dataset answers 200 with empty data.","headers":{"ETag":{"$ref":"#/components/headers/ETag"},"Cache-Control":{"$ref":"#/components/headers/CacheControlData"},"RateLimit-Policy":{"$ref":"#/components/headers/RateLimitPolicy"},"RateLimit":{"$ref":"#/components/headers/RateLimit"},"Content-Language":{"$ref":"#/components/headers/ContentLanguage"},"Vary":{"$ref":"#/components/headers/VaryAcceptLanguage"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TelecomPlanResponse"}}}},"304":{"$ref":"#/components/responses/NotModified"},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"404":{"$ref":"#/components/responses/NotFound"},"429":{"$ref":"#/components/responses/TooManyRequests"},"503":{"$ref":"#/components/responses/ServiceUnavailable"}},"x-mcp-tool":true,"x-dataset":"telecom_plans","x-v1-equivalent":{"method":"GET","path":"/api/v1/mobile-internet-plans","tool":"get_mobile_internet_plans"}}},"/api/v2/today":{"get":{"operationId":"get_today_highlights","tags":["today"],"summary":"Today's Dubai cost-of-living figures","description":"Fuel, a typical rent, tax savings and school fees in one call; each item names its own source and observation date (null when the source gives none).","parameters":[{"$ref":"#/components/parameters/AcceptLanguage"},{"$ref":"#/components/parameters/IfNoneMatch"}],"responses":{"200":{"description":"Success. AED; unknown values are null, never 0. A deliberately paused dataset answers 200 with empty data.","headers":{"ETag":{"$ref":"#/components/headers/ETag"},"Cache-Control":{"$ref":"#/components/headers/CacheControlData"},"RateLimit-Policy":{"$ref":"#/components/headers/RateLimitPolicy"},"RateLimit":{"$ref":"#/components/headers/RateLimit"},"Content-Language":{"$ref":"#/components/headers/ContentLanguage"},"Vary":{"$ref":"#/components/headers/VaryAcceptLanguage"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TodayItemListResponse"}}}},"304":{"$ref":"#/components/responses/NotModified"},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"429":{"$ref":"#/components/responses/TooManyRequests"},"503":{"$ref":"#/components/responses/ServiceUnavailable"}},"x-mcp-tool":true,"x-dataset":"today","x-v1-equivalent":{"method":"GET","path":"/api/v1/today","tool":"get_today"}}},"/api/v2/transport/commute-estimate":{"get":{"operationId":"estimate_car_commute_cost","tags":["transport"],"summary":"Monthly cost of a car commute (fuel + Salik)","description":"Same formula as the website (days per month = days per week × 52/12). Inputs are not personal data, so GET is allowed. Parking, Darb and car ownership not included.","parameters":[{"name":"km_per_day","in":"query","required":true,"schema":{"type":"number","minimum":0,"maximum":1000},"description":"Km per commuting day (both ways)."},{"name":"days_per_week","in":"query","required":true,"schema":{"type":"number","minimum":0,"maximum":7},"description":"Commuting days per week."},{"name":"l_per_100km","in":"query","required":true,"schema":{"type":"number","minimum":1,"maximum":40},"description":"Litres per 100 km."},{"name":"fuel","in":"query","required":true,"schema":{"type":"string","enum":["super98","special95","eplus91","diesel"]},"description":"Fuel grade."},{"name":"salik_per_day","in":"query","required":false,"schema":{"type":"integer","minimum":0,"maximum":30},"description":"Salik crossings per day at the Mon–Sat peak rate."},{"$ref":"#/components/parameters/AcceptLanguage"},{"$ref":"#/components/parameters/IfNoneMatch"}],"responses":{"200":{"description":"Success. AED; unknown values are null, never 0. A deliberately paused dataset answers 200 with empty data.","headers":{"ETag":{"$ref":"#/components/headers/ETag"},"Cache-Control":{"$ref":"#/components/headers/CacheControlData"},"RateLimit-Policy":{"$ref":"#/components/headers/RateLimitPolicy"},"RateLimit":{"$ref":"#/components/headers/RateLimit"},"Content-Language":{"$ref":"#/components/headers/ContentLanguage"},"Vary":{"$ref":"#/components/headers/VaryAcceptLanguage"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CommuteEstimateResponse"}}}},"304":{"$ref":"#/components/responses/NotModified"},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"429":{"$ref":"#/components/responses/TooManyRequests"},"503":{"$ref":"#/components/responses/ServiceUnavailable"}},"x-mcp-tool":true,"x-dataset":"commute_model","x-v1-equivalent":{"method":"GET","path":"/api/v1/commute","tool":"estimate_commute_cost"}}},"/api/v2/transport/commutes":{"get":{"operationId":"list_area_commute_routes","tags":["transport"],"summary":"Modelled car commutes from communities to job hubs","description":"Route distance and free-flow minutes from OpenStreetMap (OSRM, ODbL) and official fuel/toll tariffs. Peak travel time is not published officially: always null. Selective: emirate_id, from_area or to_hub_id.","parameters":[{"name":"emirate_id","in":"query","required":false,"schema":{"type":"string","enum":["dubai","abu_dhabi","sharjah","ajman","umm_al_quwain","ras_al_khaimah","fujairah"]},"description":"Emirate of the origin community."},{"name":"from_area","in":"query","required":false,"schema":{"type":"string","maxLength":120,"minLength":1},"description":"Origin community."},{"name":"to_hub_id","in":"query","required":false,"schema":{"type":"string","enum":["downtown_difc","internet_city_marina","jafza_dubai_south","dxb_deira"]},"description":"Job hub."},{"name":"sort","in":"query","required":false,"schema":{"type":"string","enum":["distance_km","car_monthly_aed","from_area"],"default":"distance_km"},"description":"Sort allowlist; a leading \"-\" means descending. Other values ⇒ 400 unsupported_sort."},{"$ref":"#/components/parameters/PageSize"},{"$ref":"#/components/parameters/Cursor"},{"$ref":"#/components/parameters/AcceptLanguage"},{"$ref":"#/components/parameters/IfNoneMatch"}],"responses":{"200":{"description":"Success. AED; unknown values are null, never 0. A deliberately paused dataset answers 200 with empty data.","headers":{"ETag":{"$ref":"#/components/headers/ETag"},"Cache-Control":{"$ref":"#/components/headers/CacheControlData"},"RateLimit-Policy":{"$ref":"#/components/headers/RateLimitPolicy"},"RateLimit":{"$ref":"#/components/headers/RateLimit"},"Content-Language":{"$ref":"#/components/headers/ContentLanguage"},"Vary":{"$ref":"#/components/headers/VaryAcceptLanguage"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AreaCommuteRouteListResponse"}}}},"304":{"$ref":"#/components/responses/NotModified"},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"409":{"$ref":"#/components/responses/Conflict"},"429":{"$ref":"#/components/responses/TooManyRequests"},"503":{"$ref":"#/components/responses/ServiceUnavailable"}},"x-mcp-tool":true,"x-dataset":"area_commutes","x-required-one-of":["emirate_id","from_area","to_hub_id"]}},"/api/v2/transport/fuel-prices":{"get":{"operationId":"get_fuel_prices","tags":["transport"],"summary":"UAE retail fuel prices of the current month","description":"Official monthly prices (AED per litre) as announced and reported by the cited publisher, change vs previous month, full-tank costs (50 and 70 L).","parameters":[{"$ref":"#/components/parameters/AcceptLanguage"},{"$ref":"#/components/parameters/IfNoneMatch"}],"responses":{"200":{"description":"Success. AED; unknown values are null, never 0. A deliberately paused dataset answers 200 with empty data.","headers":{"ETag":{"$ref":"#/components/headers/ETag"},"Cache-Control":{"$ref":"#/components/headers/CacheControlData"},"RateLimit-Policy":{"$ref":"#/components/headers/RateLimitPolicy"},"RateLimit":{"$ref":"#/components/headers/RateLimit"},"Content-Language":{"$ref":"#/components/headers/ContentLanguage"},"Vary":{"$ref":"#/components/headers/VaryAcceptLanguage"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/FuelPricesResponse"}}}},"304":{"$ref":"#/components/responses/NotModified"},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"429":{"$ref":"#/components/responses/TooManyRequests"},"503":{"$ref":"#/components/responses/ServiceUnavailable"}},"x-mcp-tool":true,"x-dataset":"fuel_prices","x-v1-equivalent":{"method":"GET","path":"/api/v1/fuel","tool":"get_fuel_prices"}}},"/api/v2/transport/fuel-prices/history":{"get":{"operationId":"list_fuel_price_history","tags":["transport"],"summary":"Monthly fuel price history","description":"One row per month; months without an official figure are listed in missing_months of the current-month response, never interpolated.","parameters":[{"name":"from_month","in":"query","required":false,"schema":{"$ref":"#/components/schemas/YearMonth"},"description":"First month (inclusive)."},{"name":"to_month","in":"query","required":false,"schema":{"$ref":"#/components/schemas/YearMonth"},"description":"Last month (inclusive)."},{"name":"sort","in":"query","required":false,"schema":{"type":"string","enum":["month","-month"],"default":"-month"},"description":"Sort allowlist; a leading \"-\" means descending. Other values ⇒ 400 unsupported_sort."},{"$ref":"#/components/parameters/PageSize"},{"$ref":"#/components/parameters/Cursor"},{"$ref":"#/components/parameters/AcceptLanguage"},{"$ref":"#/components/parameters/IfNoneMatch"}],"responses":{"200":{"description":"Success. AED; unknown values are null, never 0. A deliberately paused dataset answers 200 with empty data.","headers":{"ETag":{"$ref":"#/components/headers/ETag"},"Cache-Control":{"$ref":"#/components/headers/CacheControlData"},"RateLimit-Policy":{"$ref":"#/components/headers/RateLimitPolicy"},"RateLimit":{"$ref":"#/components/headers/RateLimit"},"Content-Language":{"$ref":"#/components/headers/ContentLanguage"},"Vary":{"$ref":"#/components/headers/VaryAcceptLanguage"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/FuelPriceHistoryResponse"}}}},"304":{"$ref":"#/components/responses/NotModified"},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"409":{"$ref":"#/components/responses/Conflict"},"429":{"$ref":"#/components/responses/TooManyRequests"},"503":{"$ref":"#/components/responses/ServiceUnavailable"}},"x-mcp-tool":true,"x-dataset":"fuel_prices","x-v1-equivalent":{"method":"GET","path":"/api/v1/fuel","tool":"get_fuel_prices"}}},"/api/v2/transport/parking":{"get":{"operationId":"get_dubai_parking_tariffs","tags":["transport"],"summary":"Dubai public parking rules (Parkin)","description":"Chargeable and peak hours, zones, average hourly tariff actually paid (as reported by Parkin), seasonal cards, multi-storey and grand-event rates.","parameters":[{"$ref":"#/components/parameters/AcceptLanguage"},{"$ref":"#/components/parameters/IfNoneMatch"}],"responses":{"200":{"description":"Success. AED; unknown values are null, never 0. A deliberately paused dataset answers 200 with empty data.","headers":{"ETag":{"$ref":"#/components/headers/ETag"},"Cache-Control":{"$ref":"#/components/headers/CacheControlData"},"RateLimit-Policy":{"$ref":"#/components/headers/RateLimitPolicy"},"RateLimit":{"$ref":"#/components/headers/RateLimit"},"Content-Language":{"$ref":"#/components/headers/ContentLanguage"},"Vary":{"$ref":"#/components/headers/VaryAcceptLanguage"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ParkingTariffsResponse"}}}},"304":{"$ref":"#/components/responses/NotModified"},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"429":{"$ref":"#/components/responses/TooManyRequests"},"503":{"$ref":"#/components/responses/ServiceUnavailable"}},"x-mcp-tool":true,"x-dataset":"parking_tariffs","x-v1-equivalent":{"method":"GET","path":"/api/v1/fuel","tool":"get_fuel_prices"}}},"/api/v2/transport/public-transport":{"get":{"operationId":"list_public_transport_fares","tags":["transport"],"summary":"Public transport fares (Dubai nol paused; Sharjah buses)","description":"Fares only where an official page states them. Dubai nol is paused while the official source is confirmed (row status paused).","parameters":[{"name":"emirate","in":"query","required":false,"schema":{"type":"string","enum":["dubai","abu_dhabi","sharjah","ajman","umm_al_quwain","ras_al_khaimah","fujairah"]},"description":"One emirate."},{"$ref":"#/components/parameters/AcceptLanguage"},{"$ref":"#/components/parameters/IfNoneMatch"}],"responses":{"200":{"description":"Success. AED; unknown values are null, never 0. A deliberately paused dataset answers 200 with empty data.","headers":{"ETag":{"$ref":"#/components/headers/ETag"},"Cache-Control":{"$ref":"#/components/headers/CacheControlData"},"RateLimit-Policy":{"$ref":"#/components/headers/RateLimitPolicy"},"RateLimit":{"$ref":"#/components/headers/RateLimit"},"Content-Language":{"$ref":"#/components/headers/ContentLanguage"},"Vary":{"$ref":"#/components/headers/VaryAcceptLanguage"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicTransportFareListResponse"}}}},"304":{"$ref":"#/components/responses/NotModified"},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"429":{"$ref":"#/components/responses/TooManyRequests"},"503":{"$ref":"#/components/responses/ServiceUnavailable"}},"x-mcp-tool":true,"x-dataset":"public_transport_fares","x-v1-equivalent":{"method":"GET","path":"/api/v1/taxi-fares","tool":"get_taxi_fares"}}},"/api/v2/transport/taxi-fares":{"get":{"operationId":"get_taxi_fares","tags":["transport"],"summary":"Dubai taxi tariff (DTC) and an optional trip estimate","description":"Street-hail and booked starting fares by time band, per-km, waiting and minimum fares, Sharjah surcharge; with km a one-trip estimate on the published tariff only (Salik and app surcharges excluded). Abu Dhabi taxis paused.","parameters":[{"name":"km","in":"query","required":false,"schema":{"type":"number","minimum":0.1,"maximum":300},"description":"Trip distance; adds an estimate."},{"name":"booking","in":"query","required":false,"schema":{"type":"string","enum":["street_day","street_night","ehail_offpeak","ehail_peak","ehail_night"],"description":"street_day: hail 06:00–22:00 (default)."},"description":"Booking type."},{"name":"wait_minutes","in":"query","required":false,"schema":{"type":"number","minimum":0,"maximum":180},"description":"Minutes waiting in traffic."},{"name":"to_sharjah","in":"query","required":false,"schema":{"type":"boolean"},"description":"Adds the published Sharjah surcharge."},{"$ref":"#/components/parameters/AcceptLanguage"},{"$ref":"#/components/parameters/IfNoneMatch"}],"responses":{"200":{"description":"Success. AED; unknown values are null, never 0. A deliberately paused dataset answers 200 with empty data.","headers":{"ETag":{"$ref":"#/components/headers/ETag"},"Cache-Control":{"$ref":"#/components/headers/CacheControlData"},"RateLimit-Policy":{"$ref":"#/components/headers/RateLimitPolicy"},"RateLimit":{"$ref":"#/components/headers/RateLimit"},"Content-Language":{"$ref":"#/components/headers/ContentLanguage"},"Vary":{"$ref":"#/components/headers/VaryAcceptLanguage"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TaxiFaresResponse"}}}},"304":{"$ref":"#/components/responses/NotModified"},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"429":{"$ref":"#/components/responses/TooManyRequests"},"503":{"$ref":"#/components/responses/ServiceUnavailable"}},"x-mcp-tool":true,"x-dataset":"taxi_fares","x-v1-equivalent":{"method":"GET","path":"/api/v1/taxi-fares","tool":"get_taxi_fares"}}},"/api/v2/transport/tolls":{"get":{"operationId":"list_toll_tariffs","tags":["transport"],"summary":"Road toll tariffs (Salik; Darb paused)","description":"Salik variable pricing by day and time band. Darb (Abu Dhabi) is paused while the official source is confirmed: its row carries status paused and no figures.","parameters":[{"name":"operator_id","in":"query","required":false,"schema":{"type":"string","enum":["salik","darb"]},"description":"One operator."},{"$ref":"#/components/parameters/AcceptLanguage"},{"$ref":"#/components/parameters/IfNoneMatch"}],"responses":{"200":{"description":"Success. AED; unknown values are null, never 0. A deliberately paused dataset answers 200 with empty data.","headers":{"ETag":{"$ref":"#/components/headers/ETag"},"Cache-Control":{"$ref":"#/components/headers/CacheControlData"},"RateLimit-Policy":{"$ref":"#/components/headers/RateLimitPolicy"},"RateLimit":{"$ref":"#/components/headers/RateLimit"},"Content-Language":{"$ref":"#/components/headers/ContentLanguage"},"Vary":{"$ref":"#/components/headers/VaryAcceptLanguage"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TollTariffListResponse"}}}},"304":{"$ref":"#/components/responses/NotModified"},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"429":{"$ref":"#/components/responses/TooManyRequests"},"503":{"$ref":"#/components/responses/ServiceUnavailable"}},"x-mcp-tool":true,"x-dataset":"road_tolls","x-v1-equivalent":{"method":"GET","path":"/api/v1/fuel","tool":"get_fuel_prices"}}},"/api/v2/utilities/dewa/bill-estimates":{"post":{"operationId":"estimate_dewa_bill","tags":["utilities"],"summary":"Estimate a monthly DEWA bill (household consumption)","description":"Consumption and rent are household data: POST body only, Cache-Control no-store, never in URLs. Deposits, sewerage and other bill items not included.","parameters":[{"$ref":"#/components/parameters/AcceptLanguage"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DewaBillRequest"}}}},"responses":{"200":{"description":"Success. AED; unknown values are null, never 0. A deliberately paused dataset answers 200 with empty data.","headers":{"Cache-Control":{"$ref":"#/components/headers/CacheControlNoStore"},"RateLimit-Policy":{"$ref":"#/components/headers/RateLimitPolicy"},"RateLimit":{"$ref":"#/components/headers/RateLimit"},"Content-Language":{"$ref":"#/components/headers/ContentLanguage"},"Vary":{"$ref":"#/components/headers/VaryAcceptLanguage"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DewaBillEstimateResponse"}}}},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"413":{"$ref":"#/components/responses/PayloadTooLarge"},"415":{"$ref":"#/components/responses/UnsupportedMediaType"},"429":{"$ref":"#/components/responses/TooManyRequests"},"503":{"$ref":"#/components/responses/ServiceUnavailable"}},"x-mcp-tool":true,"x-dataset":"dewa_tariff","x-v1-equivalent":{"method":"GET","path":"/api/v1/dewa","tool":"get_dewa_tariff"},"x-max-request-bytes":24576}},"/api/v2/utilities/dewa/tariff":{"get":{"operationId":"get_dewa_tariff","tags":["utilities"],"summary":"DEWA electricity and water slab tariff","description":"Slabs, fuel surcharge of the month, meter service charges as published, VAT, typical monthly bills and the housing-fee rate.","parameters":[{"$ref":"#/components/parameters/AcceptLanguage"},{"$ref":"#/components/parameters/IfNoneMatch"}],"responses":{"200":{"description":"Success. AED; unknown values are null, never 0. A deliberately paused dataset answers 200 with empty data.","headers":{"ETag":{"$ref":"#/components/headers/ETag"},"Cache-Control":{"$ref":"#/components/headers/CacheControlData"},"RateLimit-Policy":{"$ref":"#/components/headers/RateLimitPolicy"},"RateLimit":{"$ref":"#/components/headers/RateLimit"},"Content-Language":{"$ref":"#/components/headers/ContentLanguage"},"Vary":{"$ref":"#/components/headers/VaryAcceptLanguage"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DewaTariffResponse"}}}},"304":{"$ref":"#/components/responses/NotModified"},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"429":{"$ref":"#/components/responses/TooManyRequests"},"503":{"$ref":"#/components/responses/ServiceUnavailable"}},"x-mcp-tool":true,"x-dataset":"dewa_tariff","x-v1-equivalent":{"method":"GET","path":"/api/v1/dewa","tool":"get_dewa_tariff"}}}},"components":{"schemas":{"AedRange":{"type":"object","description":"Closed AED range from the source.","additionalProperties":false,"required":["min_aed","max_aed"],"properties":{"min_aed":{"$ref":"#/components/schemas/AmountAed","description":"Lowest amount."},"max_aed":{"$ref":"#/components/schemas/AmountAed","description":"Highest amount."}}},"AmountAed":{"type":"number","description":"Amount in AED (UAE dirham) as reported by the source, or computed by the documented formula. No VAT treatment is implied: the VAT basis is stated only where the source publishes it or a calculation declares it (e.g. telecom price_basis, DEWA vat_percent/vat_aed); otherwise it is unknown. The period (per month, per year, per litre…) is in the field name or description."},"AmountAedOrNull":{"type":["number","null"],"description":"Amount in AED as reported or computed (VAT basis unknown unless stated); null = unknown or not published, never 0 for unknown."},"ApiInfo":{"type":"object","additionalProperties":false,"required":["name","api_version","description","docs","openapi","mcp","v1","attribution"],"properties":{"name":{"type":"string","maxLength":80},"api_version":{"const":"2"},"description":{"type":"string","maxLength":500},"docs":{"type":"string","format":"uri","maxLength":2000},"openapi":{"type":"string","format":"uri","maxLength":2000},"mcp":{"type":"string","format":"uri","maxLength":2000},"v1":{"type":"object","additionalProperties":false,"required":["base_url","openapi","status","deprecation_on","sunset_on"],"properties":{"base_url":{"type":"string","format":"uri","maxLength":2000},"openapi":{"type":"string","format":"uri","maxLength":2000},"status":{"type":"string","enum":["live","deprecated"]},"deprecation_on":{"anyOf":[{"$ref":"#/components/schemas/CalendarDate"},{"type":"null"}]},"sunset_on":{"anyOf":[{"$ref":"#/components/schemas/CalendarDate"},{"type":"null"}],"description":"null: no sunset date is set (none is invented)."}}},"attribution":{"type":"string","maxLength":300}}},"ApiKeyConfirm":{"type":"object","additionalProperties":false,"required":["token"],"properties":{"token":{"type":"string","maxLength":200,"minLength":20,"description":"Token from the confirmation mail. Sent in the body, never in a URL that could be logged."}}},"ApiKeyIssued":{"type":"object","additionalProperties":false,"required":["kind","key_id","api_key","created_at","limits"],"properties":{"kind":{"const":"api_key"},"key_id":{"$ref":"#/components/schemas/Code"},"api_key":{"type":"string","maxLength":200,"description":"Shown once. Send it as X-API-Key on data calls only."},"created_at":{"$ref":"#/components/schemas/Timestamp"},"limits":{"type":"object","description":"Quota of the confirmed account, shared by its (at most 2) active keys; rotation keeps the same counters. Two keys never mean double quota.","additionalProperties":false,"required":["per_minute","per_day","scope","max_active_keys"],"properties":{"per_minute":{"const":60},"per_day":{"const":1500},"scope":{"const":"confirmed_account"},"max_active_keys":{"const":2}}}}},"ApiKeyRequest":{"type":"object","description":"Key request or management request: a confirmation link is mailed (double opt-in). No payment, no profile; outdated versions ⇒ 400 terms_version_outdated.","additionalProperties":false,"required":["email","purpose","terms_version","privacy_version"],"properties":{"email":{"type":"string","format":"email","maxLength":254},"purpose":{"type":"string","enum":["signup","manage"],"description":"signup: a new key is issued after confirmation; manage: a single-use management token is issued (rotate or revoke). Old keys are never sent by mail."},"terms_version":{"$ref":"#/components/schemas/DocumentVersion"},"privacy_version":{"$ref":"#/components/schemas/DocumentVersion"},"transfer_consent":{"type":["boolean","null"],"description":"Required and true only while the privacy notice in force asks for consent to transfer data outside the UAE (configurable); otherwise null or omitted. Missing when required ⇒ 400 consent_required."},"intended_use":{"type":["string","null"],"enum":["personal_project","app_or_website","ai_assistant_or_agent","research","journalism","other",null],"description":"Optional, bounded: no free text is collected."}}},"ApiKeyRequestAccepted":{"type":"object","description":"Always the same answer whether or not the address already has a key (no account enumeration).","additionalProperties":false,"required":["status","detail"],"properties":{"status":{"const":"pending_confirmation"},"detail":{"type":"string","maxLength":300}}},"ApiKeyRevoked":{"type":"object","additionalProperties":false,"required":["key_id","status","revoked_at"],"properties":{"key_id":{"$ref":"#/components/schemas/Code"},"status":{"const":"revoked"},"revoked_at":{"$ref":"#/components/schemas/Timestamp"}}},"AreaCommuteRoute":{"type":"object","description":"Modelled car commute (OSRM route on OpenStreetMap + official fuel and toll tariffs).","additionalProperties":false,"required":["emirate_id","from_area","to_hub_id","to_hub_name","distance_km","minutes_free_flow","minutes_peak","car","provenance"],"properties":{"emirate_id":{"type":"string","enum":["dubai","abu_dhabi","sharjah","ajman","umm_al_quwain","ras_al_khaimah","fujairah"]},"from_area":{"type":"string","maxLength":200},"to_hub_id":{"$ref":"#/components/schemas/Code"},"to_hub_name":{"type":"string","maxLength":200},"distance_km":{"type":"number","minimum":0},"minutes_free_flow":{"type":["integer","null"],"minimum":0},"minutes_peak":{"type":"null","description":"Peak travel time is not published by an official source: always null."},"car":{"type":["object","null"],"additionalProperties":false,"required":["monthly_aed","km_per_day","tolls_per_day","days_per_week","litres_per_100km","depart_times","fuel_aed","tolls_aed","parking","gates","crossings"],"properties":{"monthly_aed":{"$ref":"#/components/schemas/AmountAed","description":"Fuel + tolls per month."},"km_per_day":{"type":"number","minimum":0},"tolls_per_day":{"type":"number","minimum":0},"days_per_week":{"type":"integer","minimum":1,"maximum":7},"litres_per_100km":{"type":"number","minimum":1},"depart_times":{"type":"array","items":{"$ref":"#/components/schemas/TimeOfDay"},"maxItems":2},"fuel_aed":{"$ref":"#/components/schemas/AmountAed","description":"Per month."},"tolls_aed":{"$ref":"#/components/schemas/AmountAed","description":"Per month."},"parking":{"const":"not_included"},"gates":{"type":"array","items":{"type":"string","maxLength":200},"maxItems":20},"crossings":{"type":"array","items":{"type":"object","additionalProperties":false,"required":["gate","trip","at","aed"],"properties":{"gate":{"type":"string","maxLength":200},"trip":{"type":"string","enum":["morning","evening"]},"at":{"$ref":"#/components/schemas/TimeOfDay"},"aed":{"$ref":"#/components/schemas/AmountAed"}}},"maxItems":40}}},"provenance":{"$ref":"#/components/schemas/Provenance"}}},"AreaCommuteRouteListResponse":{"type":"object","additionalProperties":false,"required":["meta","data","links"],"properties":{"meta":{"$ref":"#/components/schemas/ResponseMeta"},"data":{"type":"array","items":{"$ref":"#/components/schemas/AreaCommuteRoute"},"maxItems":50},"links":{"$ref":"#/components/schemas/Links"}}},"AreaCostContext":{"type":"object","additionalProperties":false,"required":["rent_period","profile","assumptions","shared_monthly_aed","not_included"],"properties":{"rent_period":{"anyOf":[{"$ref":"#/components/schemas/Period"},{"type":"null"}]},"profile":{"type":"object","additionalProperties":false,"required":["property_type","bedrooms"],"properties":{"property_type":{"type":"string","enum":["apartment","villa"]},"bedrooms":{"type":"integer","minimum":0,"maximum":10}}},"assumptions":{"type":"object","additionalProperties":false,"required":["dewa_kwh_per_month","dewa_m3_per_month","transport","mobile_lines","mobile_plan","home_internet","min_contracts","include_school"],"properties":{"dewa_kwh_per_month":{"type":"number","minimum":0},"dewa_m3_per_month":{"type":"number","minimum":0},"transport":{"type":"string","maxLength":80},"mobile_lines":{"type":"integer","minimum":0},"mobile_plan":{"type":["string","null"],"maxLength":200},"home_internet":{"type":["string","null"],"maxLength":200},"min_contracts":{"type":"integer","minimum":1},"include_school":{"type":"boolean"}}},"shared_monthly_aed":{"type":"object","additionalProperties":false,"required":["dewa","transport","mobile","internet"],"properties":{"dewa":{"$ref":"#/components/schemas/AmountAedOrNull"},"transport":{"$ref":"#/components/schemas/AmountAedOrNull"},"mobile":{"$ref":"#/components/schemas/AmountAedOrNull"},"internet":{"$ref":"#/components/schemas/AmountAedOrNull"}}},"not_included":{"type":"array","items":{"type":"string","enum":["groceries","health_insurance","car_ownership","deposits","leisure"]},"maxItems":10}}},"AreaLivingCost":{"type":"object","additionalProperties":false,"required":["zone_id","name","communities","rent_monthly_aed","rent_p25_monthly_aed","rent_p75_monthly_aed","housing_fee_monthly_aed","total_monthly_aed","contracts","cheapest_school_monthly_aed","total_with_school_monthly_aed","open_in_browser","provenance"],"properties":{"rank":{"type":"integer","minimum":1},"cheapest_school_annual_aed":{"type":["number","null"],"minimum":0},"schools_with_fees":{"type":["integer","null"],"minimum":0},"zone_id":{"$ref":"#/components/schemas/RecordId"},"name":{"type":"string","maxLength":200},"communities":{"type":"array","items":{"type":"string","maxLength":200},"maxItems":50},"rent_monthly_aed":{"$ref":"#/components/schemas/AmountAedOrNull","description":"Median registered rent / 12."},"rent_p25_monthly_aed":{"$ref":"#/components/schemas/AmountAedOrNull"},"rent_p75_monthly_aed":{"$ref":"#/components/schemas/AmountAedOrNull"},"housing_fee_monthly_aed":{"$ref":"#/components/schemas/AmountAedOrNull"},"total_monthly_aed":{"$ref":"#/components/schemas/AmountAedOrNull","description":"Rent + housing fee + shared costs (see context)."},"contracts":{"type":"integer","minimum":0},"cheapest_school_monthly_aed":{"$ref":"#/components/schemas/AmountAedOrNull","description":"Cheapest KHDA tuition in the area / 12, with include_school."},"total_with_school_monthly_aed":{"$ref":"#/components/schemas/AmountAedOrNull"},"open_in_browser":{"type":["string","null"],"format":"uri","maxLength":2000},"provenance":{"$ref":"#/components/schemas/Provenance"}}},"AreaLivingCostListResponse":{"type":"object","additionalProperties":false,"required":["meta","context","data","links"],"properties":{"meta":{"$ref":"#/components/schemas/ResponseMeta"},"context":{"anyOf":[{"$ref":"#/components/schemas/AreaCostContext"},{"type":"null"}]},"data":{"type":"array","items":{"$ref":"#/components/schemas/AreaLivingCost"},"maxItems":50},"links":{"$ref":"#/components/schemas/Links"}}},"BusinessOwners":{"type":"object","description":"Business owners at home vs a Dubai mainland or free-zone company. Country-specific tax parameters are stated in assumptions (text), not as an untyped object. Estimate, not tax advice.","additionalProperties":false,"required":["status","tax_year","default_case","scenarios","component_labels","assumptions","not_modelled","leaving_rules","sources"],"properties":{"status":{"type":"string","enum":["complete","incomplete"]},"tax_year":{"type":["string","null"],"maxLength":20},"default_case":{"type":["string","null"],"maxLength":1000},"scenarios":{"type":"array","items":{"type":"object","additionalProperties":false,"required":["profit","profit_aed","corporate_tax","personal_tax","total_tax","net","effective_rate","choice","regime","dubai"],"properties":{"profit":{"type":"number","description":"Company profit per year, home currency."},"profit_aed":{"$ref":"#/components/schemas/AmountAedOrNull","description":"Same profit in AED."},"corporate_tax":{"type":["number","null"]},"personal_tax":{"type":["number","null"]},"total_tax":{"type":["number","null"]},"net":{"type":["number","null"]},"effective_rate":{"type":["number","null"],"minimum":0,"maximum":1},"choice":{"anyOf":[{"$ref":"#/components/schemas/Code"},{"type":"null"}]},"regime":{"anyOf":[{"$ref":"#/components/schemas/Code"},{"type":"null"}]},"dubai":{"type":"object","additionalProperties":false,"required":["mainland","free_zone"],"properties":{"mainland":{"$ref":"#/components/schemas/DubaiOwnerOutcome"},"free_zone":{"$ref":"#/components/schemas/DubaiOwnerOutcome"}}}}},"maxItems":10,"description":"Sole owner paying out all profit; home-currency amounts per year unless *_aed."},"component_labels":{"type":"array","items":{"type":"object","additionalProperties":false,"required":["component_id","label"],"properties":{"component_id":{"$ref":"#/components/schemas/Code"},"label":{"type":"string","maxLength":200}}},"maxItems":10},"assumptions":{"type":"array","items":{"type":"string","maxLength":1500},"maxItems":20},"not_modelled":{"type":"array","items":{"type":"string","maxLength":500},"maxItems":20},"leaving_rules":{"type":"array","items":{"type":"object","additionalProperties":false,"required":["rule_id","text","sources"],"properties":{"rule_id":{"$ref":"#/components/schemas/Code"},"text":{"type":"string","maxLength":2000},"sources":{"type":"array","items":{"$ref":"#/components/schemas/SourceDoc"},"maxItems":10}}},"maxItems":10},"sources":{"type":"array","items":{"$ref":"#/components/schemas/SourceDoc"},"maxItems":20}}},"CalendarDate":{"type":"string","format":"date","description":"Calendar date YYYY-MM-DD. Used by every *_on field: the day is known; a time is never invented."},"Code":{"type":"string","pattern":"^[a-z0-9]+(_[a-z0-9]+)*$","maxLength":80,"description":"snake_case code."},"CommuteEstimate":{"type":"object","additionalProperties":false,"required":["fuel_month","inputs","price_per_litre_aed","salik_rate_aed","days_per_month","litres_per_month","monthly_aed","annual_total_aed","missing","not_included","provenance"],"properties":{"salik_offpeak_rate_aed":{"type":["number","null"],"minimum":0},"calculation_basis":{"type":"object","additionalProperties":false,"required":["weeks_per_year","months_per_year","kilometres_per_consumption_unit"],"properties":{"weeks_per_year":{"type":"integer","minimum":1},"months_per_year":{"type":"integer","minimum":1},"kilometres_per_consumption_unit":{"type":"integer","minimum":1}}},"fuel_month":{"anyOf":[{"$ref":"#/components/schemas/YearMonth"},{"type":"null"}]},"inputs":{"type":"object","additionalProperties":false,"required":["km_per_day","days_per_week","l_per_100km","fuel","salik_per_day"],"properties":{"km_per_day":{"type":"number","minimum":0,"maximum":1000},"days_per_week":{"type":"number","minimum":0,"maximum":7},"l_per_100km":{"type":"number","minimum":1,"maximum":40},"fuel":{"type":"string","enum":["super98","special95","eplus91","diesel"]},"salik_per_day":{"type":"integer","minimum":0,"maximum":30}}},"price_per_litre_aed":{"$ref":"#/components/schemas/AmountAedOrNull"},"salik_rate_aed":{"$ref":"#/components/schemas/AmountAedOrNull","description":"Peak rate per crossing (Mon–Sat)."},"days_per_month":{"type":"number","minimum":0,"description":"days_per_week × 52 / 12."},"litres_per_month":{"type":"number","minimum":0},"monthly_aed":{"type":"object","additionalProperties":false,"required":["fuel","salik","total"],"properties":{"fuel":{"$ref":"#/components/schemas/AmountAedOrNull"},"salik":{"$ref":"#/components/schemas/AmountAedOrNull"},"total":{"$ref":"#/components/schemas/AmountAedOrNull"}}},"annual_total_aed":{"$ref":"#/components/schemas/AmountAedOrNull"},"missing":{"type":"array","items":{"type":"string","maxLength":80},"maxItems":10},"not_included":{"type":"array","items":{"type":"string","maxLength":200},"maxItems":10},"provenance":{"$ref":"#/components/schemas/Provenance"}}},"CommuteEstimateResponse":{"type":"object","additionalProperties":false,"required":["meta","data","links"],"properties":{"meta":{"$ref":"#/components/schemas/ResponseMeta"},"data":{"anyOf":[{"$ref":"#/components/schemas/CommuteEstimate"},{"type":"null"}]},"links":{"$ref":"#/components/schemas/Links"}}},"CompanyContext":{"type":"object","additionalProperties":false,"required":["mainland"],"properties":{"mainland":{"type":["object","null"],"additionalProperties":false,"required":["name","official_site","status","checked_at"],"properties":{"name":{"type":"string","maxLength":200},"official_site":{"type":["string","null"],"format":"uri","maxLength":2000},"status":{"type":"string","enum":["ok","unreadable","paused"]},"checked_at":{"anyOf":[{"$ref":"#/components/schemas/Timestamp"},{"type":"null"}]}}}}},"ComparisonLine":{"type":"object","additionalProperties":false,"required":["text","status","match","product","quantity","at_recommended_store","cheapest_seen","unresolved_reason","candidates","next_step"],"properties":{"text":{"type":"string","maxLength":120},"status":{"type":"string","enum":["compared","not_compared","unresolved"]},"match":{"type":["string","null"],"maxLength":40},"product":{"type":["object","null"],"additionalProperties":false,"required":["product_id","name","comparison","unit"],"properties":{"product_id":{"$ref":"#/components/schemas/RecordId"},"name":{"type":"string","maxLength":200},"comparison":{"type":"string","enum":["exact","equivalent"]},"unit":{"type":"string","enum":["each","kg","l"]}}},"quantity":{"type":["object","null"],"additionalProperties":false,"required":["value","unit","source","assumed"],"properties":{"value":{"type":"number","minimum":0},"unit":{"type":"string","enum":["each","kg","l"]},"source":{"type":"string","maxLength":40},"assumed":{"type":"boolean"}}},"at_recommended_store":{"anyOf":[{"$ref":"#/components/schemas/OfferAt"},{"type":"null"}]},"cheapest_seen":{"type":["object","null"],"additionalProperties":false,"required":["store_id","store_name","cost_aed"],"properties":{"store_id":{"$ref":"#/components/schemas/RecordId"},"store_name":{"type":"string","maxLength":200},"cost_aed":{"$ref":"#/components/schemas/AmountAed"}}},"unresolved_reason":{"type":["string","null"],"maxLength":80},"candidates":{"type":"array","items":{"type":"object","additionalProperties":false,"required":["product_id","name"],"properties":{"product_id":{"$ref":"#/components/schemas/RecordId"},"name":{"type":"string","maxLength":200}}},"maxItems":10},"next_step":{"type":["string","null"],"maxLength":300}}},"CostLine":{"type":"object","additionalProperties":false,"required":["line_id","label","monthly_aed","range_aed","assumption","source"],"properties":{"line_id":{"type":"string","enum":["rent","housing_fee","dewa","transport","mobile","internet","school"]},"label":{"type":"string","maxLength":80},"monthly_aed":{"$ref":"#/components/schemas/AmountAedOrNull"},"range_aed":{"type":["object","null"],"additionalProperties":false,"required":["low_aed","high_aed"],"properties":{"low_aed":{"$ref":"#/components/schemas/AmountAed"},"high_aed":{"$ref":"#/components/schemas/AmountAed"}}},"assumption":{"type":["string","null"],"maxLength":1000},"source":{"type":["object","null"],"additionalProperties":false,"required":["name","url","period_label"],"properties":{"name":{"type":"string","maxLength":300},"url":{"type":["string","null"],"format":"uri","maxLength":2000},"period_label":{"type":["string","null"],"maxLength":80}}}}},"DatasetMeta":{"type":"object","description":"Dataset-level metadata. stale and historical are independent: stale=true means the refresh of OUR copy failed and the last good copy is served; historical=true means the newest official figures refer to a period that has ended (e.g. KHDA fees of 2024-2025).","additionalProperties":false,"required":["dataset_id","status","notice","paused_since","observed_on","observed_at","published_on","published_at","compiled_at","reference_period","stale","historical","sources"],"properties":{"dataset_id":{"$ref":"#/components/schemas/Code"},"status":{"type":"string","enum":["ok","partial","paused","not_published"],"description":"ok; partial (some sources paused or not published, see row status); paused (deliberate: HTTP 200, data is empty, no Retry-After — do not retry; a paused source is never served from the last good copy, so stale is false); not_published (dataset not available yet: HTTP 200 with empty data, not 503). Pause policy applies per source and per component (row status)."},"notice":{"type":["string","null"],"maxLength":1000},"paused_since":{"anyOf":[{"$ref":"#/components/schemas/CalendarDate"},{"type":"null"}]},"observed_on":{"anyOf":[{"$ref":"#/components/schemas/CalendarDate"},{"type":"null"}]},"observed_at":{"anyOf":[{"$ref":"#/components/schemas/Timestamp"},{"type":"null"}]},"published_on":{"anyOf":[{"$ref":"#/components/schemas/CalendarDate"},{"type":"null"}]},"published_at":{"anyOf":[{"$ref":"#/components/schemas/Timestamp"},{"type":"null"}]},"compiled_at":{"anyOf":[{"$ref":"#/components/schemas/Timestamp"},{"type":"null"}]},"reference_period":{"anyOf":[{"$ref":"#/components/schemas/ReferencePeriod"},{"type":"null"}]},"stale":{"type":"boolean"},"historical":{"type":"boolean"},"sources":{"type":"array","items":{"$ref":"#/components/schemas/Source"},"maxItems":30,"description":"Full source objects (licence, conditions, attribution, pause status) of every row in this response: each row provenance.source_id resolves here and provenance.license_id equals that source licence id. No second request is needed."}}},"DeliveryRule":{"type":"object","description":"Delivery rule as published by the store. Unknown fees are null, never 0.","additionalProperties":false,"required":["scope","fee_min_aed","fee_max_aed","free_from_aed","free_from_inclusive","possibly_free_from_aed","possibly_free_from_inclusive","minimum_order_aed","notes","source_url","checked_at"],"properties":{"scope":{"type":"string","maxLength":40},"fee_min_aed":{"$ref":"#/components/schemas/AmountAedOrNull","description":"Lowest published delivery fee per order."},"fee_max_aed":{"$ref":"#/components/schemas/AmountAedOrNull","description":"Highest published delivery fee per order."},"free_from_aed":{"$ref":"#/components/schemas/AmountAedOrNull","description":"Order value from which delivery is free."},"free_from_inclusive":{"type":"boolean"},"possibly_free_from_aed":{"$ref":"#/components/schemas/AmountAedOrNull","description":"Order value above which one official page says delivery may be free (not guaranteed)."},"possibly_free_from_inclusive":{"type":["boolean","null"]},"minimum_order_aed":{"$ref":"#/components/schemas/AmountAedOrNull"},"notes":{"type":["string","null"],"maxLength":2000},"source_url":{"type":["string","null"],"format":"uri","maxLength":2000},"checked_at":{"anyOf":[{"$ref":"#/components/schemas/Timestamp"},{"type":"null"}]}}},"DewaBillEstimate":{"type":"object","additionalProperties":false,"required":["surcharge_month","electricity_fuel_surcharge_aed_per_kwh","water_fuel_surcharge_aed_per_m3","kwh","water_m3","electricity_aed","water_aed","meter_service_aed","subtotal_aed","vat_aed","housing_fee_aed","total_aed","not_included","provenance"],"properties":{"tariff":{"$ref":"#/components/schemas/DewaTariff"},"water_gallons":{"type":["number","null"],"minimum":0},"annual_rent_aed":{"type":["number","null"],"minimum":0},"housing_fee_percent":{"type":["number","null"],"minimum":0},"months_per_year":{"type":"integer","minimum":1},"surcharge_month":{"anyOf":[{"$ref":"#/components/schemas/YearMonth"},{"type":"null"}]},"electricity_fuel_surcharge_aed_per_kwh":{"$ref":"#/components/schemas/AmountAedOrNull","description":"Published electricity fuel surcharge for surcharge_month, AED per kWh; included in electricity_aed."},"water_fuel_surcharge_aed_per_m3":{"$ref":"#/components/schemas/AmountAedOrNull","description":"Published water fuel surcharge for surcharge_month, AED per cubic metre; included in water_aed."},"kwh":{"type":["number","null"],"minimum":0},"water_m3":{"type":["number","null"],"minimum":0},"electricity_aed":{"$ref":"#/components/schemas/AmountAedOrNull"},"water_aed":{"$ref":"#/components/schemas/AmountAedOrNull"},"meter_service_aed":{"$ref":"#/components/schemas/AmountAedOrNull"},"subtotal_aed":{"$ref":"#/components/schemas/AmountAedOrNull"},"vat_aed":{"$ref":"#/components/schemas/AmountAedOrNull"},"housing_fee_aed":{"$ref":"#/components/schemas/AmountAedOrNull","description":"Per month; null without annual_rent_aed."},"total_aed":{"$ref":"#/components/schemas/AmountAedOrNull","description":"Monthly bill estimate."},"not_included":{"type":["string","null"],"maxLength":500},"provenance":{"$ref":"#/components/schemas/Provenance"}}},"DewaBillEstimateResponse":{"type":"object","additionalProperties":false,"required":["meta","data","links"],"properties":{"meta":{"$ref":"#/components/schemas/ResponseMeta"},"data":{"anyOf":[{"$ref":"#/components/schemas/DewaBillEstimate"},{"type":"null"}]},"links":{"$ref":"#/components/schemas/Links"}}},"DewaBillRequest":{"type":"object","description":"Household consumption and rent: sent only in a POST body (never in the URL), response not stored.","additionalProperties":false,"required":["kwh"],"properties":{"kwh":{"type":"number","minimum":0,"maximum":1000000,"description":"Electricity per month."},"water_m3":{"type":["number","null"],"minimum":0,"maximum":1000000,"description":"Water per month in m³."},"water_gallons":{"type":["number","null"],"minimum":0,"maximum":100000000,"description":"Water per month in imperial gallons (alternative to water_m3)."},"annual_rent_aed":{"type":["number","null"],"minimum":0,"maximum":100000000,"description":"Adds the Dubai Municipality housing fee (5% of annual rent / 12)."}}},"DewaTariff":{"type":"object","additionalProperties":false,"required":["surcharge_month","vat_percent","electricity","water","housing_fee_rate_of_annual_rent","typical","not_included","provenance"],"properties":{"imperial_gallons_per_m3":{"type":"number","minimum":0},"surcharge_month":{"anyOf":[{"$ref":"#/components/schemas/YearMonth"},{"type":"null"}]},"vat_percent":{"type":["number","null"],"minimum":0,"maximum":100},"electricity":{"type":"object","additionalProperties":false,"required":["unit","slabs","fuel_surcharge_aed_per_kwh","meter_service_charges"],"properties":{"unit":{"const":"kWh per month"},"slabs":{"type":"array","items":{"type":"object","additionalProperties":false,"required":["from","to","aed_per_unit"],"properties":{"from":{"type":"number","minimum":0},"to":{"type":["number","null"],"minimum":0},"aed_per_unit":{"$ref":"#/components/schemas/AmountAed","description":"Per kWh."}}},"maxItems":10},"fuel_surcharge_aed_per_kwh":{"$ref":"#/components/schemas/AmountAedOrNull"},"meter_service_charges":{"type":"array","items":{"type":"object","additionalProperties":false,"required":["meter_type","amount_aed"],"properties":{"meter_type":{"type":"integer","minimum":1},"amount_aed":{"$ref":"#/components/schemas/AmountAed","description":"As published; the billing period is not stated in the source read."}}},"maxItems":10}}},"water":{"type":"object","additionalProperties":false,"required":["unit","slabs","fuel_surcharge_aed_per_m3","meter_service_charges"],"properties":{"unit":{"const":"m³ per month"},"slabs":{"type":"array","items":{"type":"object","additionalProperties":false,"required":["from","to","aed_per_unit"],"properties":{"from":{"type":"number","minimum":0},"to":{"type":["number","null"],"minimum":0},"aed_per_unit":{"$ref":"#/components/schemas/AmountAed","description":"Per m³."}}},"maxItems":10},"fuel_surcharge_aed_per_m3":{"$ref":"#/components/schemas/AmountAedOrNull"},"meter_service_charges":{"type":"array","items":{"type":"object","additionalProperties":false,"required":["meter_type","amount_aed"],"properties":{"meter_type":{"type":"integer","minimum":1},"amount_aed":{"$ref":"#/components/schemas/AmountAed","description":"As published."}}},"maxItems":10}}},"housing_fee_rate_of_annual_rent":{"type":["number","null"],"minimum":0,"maximum":1},"typical":{"type":"array","items":{"type":"object","additionalProperties":false,"required":["profile_id","kwh","m3","monthly_aed"],"properties":{"profile_id":{"type":"string","enum":["light","medium","heavy"]},"kwh":{"type":"number","minimum":0},"m3":{"type":"number","minimum":0},"monthly_aed":{"$ref":"#/components/schemas/AmountAedOrNull"}}},"maxItems":5},"not_included":{"type":["string","null"],"maxLength":500},"provenance":{"$ref":"#/components/schemas/Provenance"}}},"DewaTariffResponse":{"type":"object","additionalProperties":false,"required":["meta","data","links"],"properties":{"meta":{"$ref":"#/components/schemas/ResponseMeta"},"data":{"anyOf":[{"$ref":"#/components/schemas/DewaTariff"},{"type":"null"}]},"links":{"$ref":"#/components/schemas/Links"}}},"DocumentVersion":{"type":"string","pattern":"^[A-Za-z0-9._-]{1,40}$","description":"Version identifier printed on the terms or privacy page that was accepted."},"DubaiOwnerOutcome":{"type":"object","additionalProperties":false,"required":["tax_aed","tax","net","effective_rate","saving","saving_aed","saving_share"],"properties":{"tax_aed":{"$ref":"#/components/schemas/AmountAedOrNull","description":"Total tax in Dubai for this profit, per year."},"tax":{"type":["number","null"],"description":"Same, in the home currency."},"net":{"type":["number","null"],"description":"Net per year, home currency."},"effective_rate":{"type":["number","null"],"minimum":0,"maximum":1},"saving":{"type":["number","null"],"description":"Saving vs home per year, home currency."},"saving_aed":{"$ref":"#/components/schemas/AmountAedOrNull","description":"Saving vs home per year."},"saving_share":{"type":["number","null"],"minimum":0,"maximum":1}}},"ElectronicsModel":{"type":"object","additionalProperties":false,"required":["model_id","name","brand","category","storage","color","cheapest","saving_aed","saving_pct","offers","open_in_browser","provenance"],"properties":{"model_id":{"$ref":"#/components/schemas/RecordId"},"name":{"type":"string","maxLength":300},"brand":{"type":["string","null"],"maxLength":80},"category":{"anyOf":[{"$ref":"#/components/schemas/Code"},{"type":"null"}]},"storage":{"type":["string","null"],"maxLength":40},"color":{"type":["string","null"],"maxLength":40},"cheapest":{"type":["object","null"],"additionalProperties":false,"required":["store_id","price_aed","available","url"],"properties":{"store_id":{"$ref":"#/components/schemas/RecordId"},"price_aed":{"$ref":"#/components/schemas/AmountAed"},"available":{"type":["boolean","null"]},"url":{"type":["string","null"],"format":"uri","maxLength":2000}}},"saving_aed":{"$ref":"#/components/schemas/AmountAedOrNull"},"saving_pct":{"type":["number","null"],"minimum":0,"maximum":100},"offers":{"type":"array","items":{"type":"object","additionalProperties":false,"required":["store_id","store_name","price_aed","original_price_aed","available","seller","marketplace","title","url","observed_on","observed_at"],"properties":{"store_id":{"$ref":"#/components/schemas/RecordId"},"store_name":{"type":"string","maxLength":200},"price_aed":{"$ref":"#/components/schemas/AmountAedOrNull"},"original_price_aed":{"$ref":"#/components/schemas/AmountAedOrNull"},"available":{"type":["boolean","null"]},"seller":{"type":["string","null"],"maxLength":200},"marketplace":{"type":"boolean"},"title":{"type":["string","null"],"maxLength":300},"url":{"type":["string","null"],"format":"uri","maxLength":2000},"observed_on":{"anyOf":[{"$ref":"#/components/schemas/CalendarDate"},{"type":"null"}]},"observed_at":{"anyOf":[{"$ref":"#/components/schemas/Timestamp"},{"type":"null"}]}}},"maxItems":20},"open_in_browser":{"type":"string","format":"uri","maxLength":2000},"provenance":{"$ref":"#/components/schemas/Provenance"}}},"ElectronicsModelListResponse":{"type":"object","additionalProperties":false,"required":["meta","data","links"],"properties":{"meta":{"$ref":"#/components/schemas/ResponseMeta"},"data":{"type":"array","items":{"$ref":"#/components/schemas/ElectronicsModel"},"maxItems":50},"links":{"$ref":"#/components/schemas/Links"}}},"EmirateCostContext":{"type":"object","additionalProperties":false,"required":["consumption","hubs","paused_tolls","notes"],"properties":{"consumption":{"type":"object","additionalProperties":false,"required":["kwh","m3","home"],"properties":{"kwh":{"type":"number","minimum":0},"m3":{"type":"number","minimum":0},"home":{"type":"string","maxLength":40}}},"hubs":{"type":"array","items":{"type":"object","additionalProperties":false,"required":["hub_id","name"],"properties":{"hub_id":{"$ref":"#/components/schemas/Code"},"name":{"type":"string","maxLength":200}}},"maxItems":10},"paused_tolls":{"type":"array","items":{"type":"string","enum":["salik","darb"]},"maxItems":2},"notes":{"type":"object","additionalProperties":false,"required":["peak","rent","public_transport"],"properties":{"peak":{"type":"string","maxLength":1000},"rent":{"type":"string","maxLength":1000},"public_transport":{"type":"string","maxLength":1000}}}}},"EmirateCosts":{"type":"object","additionalProperties":false,"required":["emirate_id","name","rent","utilities","housing_fee","schools","intercity_buses","areas","provenance"],"properties":{"emirate_id":{"type":"string","enum":["dubai","abu_dhabi","sharjah","ajman","umm_al_quwain","ras_al_khaimah","fujairah"]},"name":{"type":"string","maxLength":80},"rent":{"type":"object","additionalProperties":false,"required":["status","note","period","attribution","medians","source_urls"],"properties":{"status":{"type":"string","enum":["ok","no_comparable_open_data","no_official_data_found"]},"note":{"type":["string","null"],"maxLength":1000},"period":{"anyOf":[{"$ref":"#/components/schemas/Period"},{"type":"null"}]},"attribution":{"type":["string","null"],"maxLength":3000},"medians":{"type":"array","items":{"type":"object","additionalProperties":false,"required":["area","property_type","bedrooms","median_monthly_aed","median_annual_aed","p25_annual_aed","p75_annual_aed","contracts"],"properties":{"area":{"type":"string","maxLength":200},"property_type":{"type":"string","enum":["apartment","villa"]},"bedrooms":{"type":"integer","minimum":0,"maximum":10},"median_monthly_aed":{"$ref":"#/components/schemas/AmountAed"},"median_annual_aed":{"$ref":"#/components/schemas/AmountAed"},"p25_annual_aed":{"$ref":"#/components/schemas/AmountAedOrNull"},"p75_annual_aed":{"$ref":"#/components/schemas/AmountAedOrNull"},"contracts":{"type":"integer","minimum":0}}},"maxItems":30},"source_urls":{"type":"array","items":{"$ref":"#/components/schemas/SourceLocator"},"maxItems":10}}},"utilities":{"type":"object","additionalProperties":false,"required":["provider","monthly_aed","electricity_aed","water_aed","basis","vat_note","calculated","missing","source_urls"],"properties":{"provider":{"type":"string","maxLength":200},"monthly_aed":{"$ref":"#/components/schemas/AmountAedOrNull","description":"Electricity + water for the example consumption; VAT treatment as stated in basis and vat_note."},"electricity_aed":{"$ref":"#/components/schemas/AmountAedOrNull"},"water_aed":{"$ref":"#/components/schemas/AmountAedOrNull"},"basis":{"type":"string","maxLength":500},"vat_note":{"type":["string","null"],"maxLength":300},"calculated":{"type":"boolean"},"missing":{"type":"array","items":{"type":"string","maxLength":80},"maxItems":10},"source_urls":{"type":"array","items":{"$ref":"#/components/schemas/SourceLocator"},"maxItems":10}}},"housing_fee":{"type":"object","additionalProperties":false,"required":["status","percent_of_annual_rent","min_aed","how","source_url"],"properties":{"status":{"type":"string","enum":["ok","partial","no_official_data_found"]},"percent_of_annual_rent":{"type":["number","null"],"minimum":0,"maximum":100},"min_aed":{"$ref":"#/components/schemas/AmountAedOrNull"},"how":{"type":["string","null"],"maxLength":1000},"source_url":{"anyOf":[{"$ref":"#/components/schemas/SourceLocator"},{"type":"null"}]}}},"schools":{"type":"object","additionalProperties":false,"required":["status","note"],"properties":{"status":{"type":"string","enum":["ok","no_official_open_data_found"]},"note":{"type":["string","null"],"maxLength":500}}},"intercity_buses":{"type":"array","items":{"type":"object","additionalProperties":false,"required":["route","from","to_dubai_station","fare_one_way_aed","minutes","frequency","source_url"],"properties":{"route":{"type":"string","maxLength":40},"from":{"type":"string","maxLength":200},"to_dubai_station":{"type":"string","maxLength":200},"fare_one_way_aed":{"$ref":"#/components/schemas/AmountAedOrNull"},"minutes":{"type":["integer","null"],"minimum":0},"frequency":{"type":["string","null"],"maxLength":100},"source_url":{"anyOf":[{"$ref":"#/components/schemas/SourceLocator"},{"type":"null"}]}}},"maxItems":20},"areas":{"type":"array","items":{"type":"object","additionalProperties":false,"required":["area_id","name","point","nearest_airport"],"properties":{"area_id":{"$ref":"#/components/schemas/RecordId"},"name":{"type":"string","maxLength":200},"point":{"$ref":"#/components/schemas/GeoPoint"},"nearest_airport":{"type":["object","null"],"additionalProperties":false,"required":["code","name","km"],"properties":{"code":{"type":"string","maxLength":3},"name":{"type":"string","maxLength":200},"km":{"type":"number","minimum":0}}}}},"maxItems":30},"provenance":{"$ref":"#/components/schemas/Provenance"}}},"EmirateCostsListResponse":{"type":"object","additionalProperties":false,"required":["meta","context","data","links"],"properties":{"meta":{"$ref":"#/components/schemas/ResponseMeta"},"context":{"anyOf":[{"$ref":"#/components/schemas/EmirateCostContext"},{"type":"null"}]},"data":{"type":"array","items":{"$ref":"#/components/schemas/EmirateCosts"},"maxItems":50},"links":{"$ref":"#/components/schemas/Links"}}},"EmirateCostsResponse":{"type":"object","additionalProperties":false,"required":["meta","context","data","links"],"properties":{"meta":{"$ref":"#/components/schemas/ResponseMeta"},"context":{"anyOf":[{"$ref":"#/components/schemas/EmirateCostContext"},{"type":"null"}]},"data":{"anyOf":[{"$ref":"#/components/schemas/EmirateCosts"},{"type":"null"}]},"links":{"$ref":"#/components/schemas/Links"}}},"FamilyIndexContext":{"type":"object","additionalProperties":false,"required":["dubai_corporate","fx"],"properties":{"dubai_corporate":{"type":"object","additionalProperties":false,"required":["bands","qualifying_free_zone_rate","small_business_relief","notes","sources"],"properties":{"bands":{"type":"array","items":{"type":"object","additionalProperties":false,"required":["up_to_aed","rate"],"properties":{"up_to_aed":{"$ref":"#/components/schemas/AmountAedOrNull","description":"Upper limit of the band; null = no limit."},"rate":{"type":"number","minimum":0,"maximum":1}}},"maxItems":5},"qualifying_free_zone_rate":{"type":"number","minimum":0,"maximum":1},"small_business_relief":{"type":"object","additionalProperties":false,"required":["revenue_up_to_aed","last_tax_period_ending"],"properties":{"revenue_up_to_aed":{"$ref":"#/components/schemas/AmountAed","description":"Revenue limit."},"last_tax_period_ending":{"$ref":"#/components/schemas/CalendarDate"}}},"notes":{"type":"array","items":{"type":"string","maxLength":1000},"maxItems":20},"sources":{"type":"array","items":{"$ref":"#/components/schemas/SourceDoc"},"maxItems":10}}},"fx":{"type":"object","additionalProperties":false,"required":["base","rates_on","source_title","source_url"],"properties":{"base":{"const":"AED"},"rates_on":{"$ref":"#/components/schemas/CalendarDate"},"source_title":{"type":"string","maxLength":300},"source_url":{"type":"string","format":"uri","maxLength":2000}}}}},"FamilyIndexEntry":{"type":"object","description":"Family index: what a typical employee — and a business owner — of a country keeps after tax at home vs in Dubai. Estimate, not tax advice.","additionalProperties":false,"required":["iso2","name","currency","tax_year","fx_aed_per_unit","employees","statistics","business_owners","provenance"],"properties":{"iso2":{"type":"string","maxLength":2},"name":{"type":"string","maxLength":80},"currency":{"type":"string","maxLength":3},"tax_year":{"type":["string","null"],"maxLength":20},"fx_aed_per_unit":{"type":["number","null"],"minimum":0},"employees":{"type":"array","items":{"type":"object","additionalProperties":false,"required":["scenario_id","label","statistic_id","household_status","children","available","gross","gross_aed","income_tax","social_contributions","net","saving","saving_monthly","saving_aed","saving_share"],"properties":{"scenario_id":{"$ref":"#/components/schemas/Code"},"label":{"type":"string","maxLength":200},"statistic_id":{"$ref":"#/components/schemas/Code"},"household_status":{"type":"string","enum":["single","married"]},"children":{"type":"integer","minimum":0},"available":{"type":"boolean"},"gross":{"type":["number","null"]},"gross_aed":{"$ref":"#/components/schemas/AmountAedOrNull"},"income_tax":{"type":["number","null"]},"social_contributions":{"type":["number","null"]},"net":{"type":["number","null"]},"saving":{"type":["number","null"]},"saving_monthly":{"type":["number","null"]},"saving_aed":{"$ref":"#/components/schemas/AmountAedOrNull"},"saving_share":{"type":["number","null"],"minimum":0,"maximum":1}}},"maxItems":10,"description":"Home-currency amounts per year (saving_monthly per month); *_aed in AED."},"statistics":{"type":"array","items":{"type":"object","additionalProperties":false,"required":["statistic_id","label","measure","value","annual_factor","period_label","basis","population","published_on","source","quote"],"properties":{"statistic_id":{"$ref":"#/components/schemas/Code"},"label":{"type":"string","maxLength":300},"measure":{"type":"string","maxLength":40},"value":{"type":"number"},"annual_factor":{"type":"number"},"period_label":{"type":"string","maxLength":80},"basis":{"type":"string","maxLength":40},"population":{"type":"string","maxLength":300},"published_on":{"anyOf":[{"$ref":"#/components/schemas/CalendarDate"},{"type":"null"}]},"source":{"$ref":"#/components/schemas/SourceDoc"},"quote":{"type":["string","null"],"maxLength":1000}}},"maxItems":10},"business_owners":{"anyOf":[{"$ref":"#/components/schemas/BusinessOwners"},{"type":"null"}]},"provenance":{"$ref":"#/components/schemas/Provenance"}}},"FamilyIndexListResponse":{"type":"object","additionalProperties":false,"required":["meta","context","data","links"],"properties":{"meta":{"$ref":"#/components/schemas/ResponseMeta"},"context":{"anyOf":[{"$ref":"#/components/schemas/FamilyIndexContext"},{"type":"null"}]},"data":{"type":"array","items":{"$ref":"#/components/schemas/FamilyIndexEntry"},"maxItems":50},"links":{"$ref":"#/components/schemas/Links"}}},"Fee":{"type":"object","additionalProperties":false,"required":["fee_id","quote","amount_aed","amount_max_aed","percent","when","alternative_id","optional"],"properties":{"fee_id":{"$ref":"#/components/schemas/Code"},"quote":{"type":"string","maxLength":1000,"description":"Official wording."},"amount_aed":{"$ref":"#/components/schemas/AmountAedOrNull"},"amount_max_aed":{"$ref":"#/components/schemas/AmountAedOrNull"},"percent":{"type":["number","null"],"minimum":0,"maximum":100},"when":{"type":["string","null"],"maxLength":200},"alternative_id":{"anyOf":[{"$ref":"#/components/schemas/Code"},{"type":"null"}]},"optional":{"type":"boolean"}}},"FeeCard":{"type":"object","additionalProperties":false,"required":["card_id","title","fees","total_from_abroad","total_inside_uae","official_total_aed","processing_time","notes","authority_source"],"properties":{"citation":{"type":"string","maxLength":500,"description":"Legal citation supplied by the common insurance fee card."},"effective_from":{"$ref":"#/components/schemas/CalendarDate"},"doubtful":{"type":"boolean","description":"The common fee card source is flagged doubtful by the publisher."},"card_id":{"$ref":"#/components/schemas/Code"},"title":{"type":"string","maxLength":200},"fees":{"type":"array","items":{"$ref":"#/components/schemas/Fee"},"maxItems":40},"total_from_abroad":{"anyOf":[{"$ref":"#/components/schemas/AedRange"},{"type":"null"}]},"total_inside_uae":{"anyOf":[{"$ref":"#/components/schemas/AedRange"},{"type":"null"}]},"official_total_aed":{"$ref":"#/components/schemas/AmountAedOrNull"},"processing_time":{"type":["string","null"],"maxLength":300},"notes":{"type":"array","items":{"type":"object","additionalProperties":false,"required":["note_id","quote"],"properties":{"note_id":{"$ref":"#/components/schemas/Code"},"quote":{"type":"string","maxLength":1000}}},"maxItems":20},"authority_source":{"type":["object","null"],"additionalProperties":false,"required":["authority","title","url"],"properties":{"authority":{"type":"string","maxLength":200},"title":{"type":"string","maxLength":500},"url":{"type":"string","format":"uri","maxLength":2000}}}}},"FreeZoneSetup":{"type":"object","additionalProperties":false,"required":["zone_id","name","emirate_id","official_site","published","packages","provenance"],"properties":{"zone_id":{"$ref":"#/components/schemas/RecordId"},"name":{"type":"string","maxLength":200},"emirate_id":{"type":["string","null"],"enum":["dubai","abu_dhabi","sharjah","ajman","umm_al_quwain","ras_al_khaimah","fujairah",null]},"official_site":{"type":["string","null"],"format":"uri","maxLength":2000},"published":{"type":"string","enum":["one_visa","partial","none","paused"],"description":"one_visa: packages published (at least one with a visa); none: no package price published; paused: not shown while permission is asked."},"packages":{"type":"array","items":{"type":"object","additionalProperties":false,"required":["name","visas_included","first_year_aed","monthly_aed","renewal_aed","qualifier","quote","source_url","retrieved_at"],"properties":{"name":{"type":"string","maxLength":300},"visas_included":{"type":["integer","null"],"minimum":0,"maximum":2},"first_year_aed":{"$ref":"#/components/schemas/AmountAedOrNull"},"monthly_aed":{"$ref":"#/components/schemas/AmountAedOrNull"},"renewal_aed":{"$ref":"#/components/schemas/AmountAedOrNull"},"qualifier":{"type":"string","enum":["exact","from"]},"quote":{"type":"string","maxLength":500,"description":"Official wording."},"source_url":{"type":"string","format":"uri","maxLength":2000},"retrieved_at":{"anyOf":[{"$ref":"#/components/schemas/Timestamp"},{"type":"null"}]}}},"maxItems":20},"provenance":{"$ref":"#/components/schemas/Provenance"}}},"FreeZoneSetupListResponse":{"type":"object","additionalProperties":false,"required":["meta","context","data","links"],"properties":{"meta":{"$ref":"#/components/schemas/ResponseMeta"},"context":{"anyOf":[{"$ref":"#/components/schemas/CompanyContext"},{"type":"null"}]},"data":{"type":"array","items":{"$ref":"#/components/schemas/FreeZoneSetup"},"maxItems":50},"links":{"$ref":"#/components/schemas/Links"}}},"FuelGradePrices":{"type":"object","description":"AED per litre by grade.","additionalProperties":false,"required":["super98","special95","eplus91","diesel"],"properties":{"super98":{"$ref":"#/components/schemas/AmountAedOrNull","description":"Per litre."},"special95":{"$ref":"#/components/schemas/AmountAedOrNull","description":"Per litre."},"eplus91":{"$ref":"#/components/schemas/AmountAedOrNull","description":"Per litre."},"diesel":{"$ref":"#/components/schemas/AmountAedOrNull","description":"Per litre."}}},"FuelPriceHistoryResponse":{"type":"object","additionalProperties":false,"required":["meta","data","links"],"properties":{"meta":{"$ref":"#/components/schemas/ResponseMeta"},"data":{"type":"array","items":{"$ref":"#/components/schemas/FuelPriceMonth"},"maxItems":50},"links":{"$ref":"#/components/schemas/Links"}}},"FuelPriceMonth":{"type":"object","additionalProperties":false,"required":["month","prices","provenance"],"properties":{"month":{"$ref":"#/components/schemas/YearMonth"},"prices":{"$ref":"#/components/schemas/FuelGradePrices"},"provenance":{"$ref":"#/components/schemas/Provenance"}}},"FuelContext":{"type":"object","additionalProperties":false,"required":["tolls","parking","public_transport"],"properties":{"tolls":{"type":"array","items":{"$ref":"#/components/schemas/TollTariff"}},"parking":{"anyOf":[{"$ref":"#/components/schemas/ParkingTariffs"},{"type":"null"}]},"public_transport":{"type":"array","items":{"$ref":"#/components/schemas/PublicTransportFare"}}}},"TransportReferenceContext":{"type":"object","additionalProperties":false,"required":["fuel"],"properties":{"fuel":{"$ref":"#/components/schemas/FuelPrices"}}},"FuelPrices":{"type":"object","description":"Official monthly retail fuel prices (UAE Fuel Price Committee), as reported by the cited publisher.","additionalProperties":false,"required":["month","unit","prices","previous","change","tank_costs","announcement","missing_months","provenance"],"properties":{"transport_context":{"$ref":"#/components/schemas/FuelContext"},"history_summary":{"type":"object","additionalProperties":false,"required":["tracked_months","from","to","missing_months"],"properties":{"tracked_months":{"type":"integer","minimum":0},"from":{"type":["string","null"]},"to":{"type":["string","null"]},"missing_months":{"type":"integer","minimum":0}}},"month":{"$ref":"#/components/schemas/YearMonth"},"unit":{"const":"AED per litre"},"prices":{"$ref":"#/components/schemas/FuelGradePrices"},"previous":{"type":["object","null"],"additionalProperties":false,"required":["month","prices"],"properties":{"month":{"$ref":"#/components/schemas/YearMonth"},"prices":{"$ref":"#/components/schemas/FuelGradePrices"}}},"change":{"anyOf":[{"$ref":"#/components/schemas/FuelGradePrices"},{"type":"null"}]},"tank_costs":{"type":"array","items":{"type":"object","additionalProperties":false,"required":["tank_litres","super98_aed","special95_aed","eplus91_aed","diesel_aed"],"properties":{"tank_litres":{"type":"integer","minimum":1},"super98_aed":{"$ref":"#/components/schemas/AmountAedOrNull","description":"Full tank."},"special95_aed":{"$ref":"#/components/schemas/AmountAedOrNull","description":"Full tank."},"eplus91_aed":{"$ref":"#/components/schemas/AmountAedOrNull","description":"Full tank."},"diesel_aed":{"$ref":"#/components/schemas/AmountAedOrNull","description":"Full tank."}}},"maxItems":5},"announcement":{"type":["object","null"],"additionalProperties":false,"required":["publisher","url","published_at"],"properties":{"publisher":{"type":"string","maxLength":200},"url":{"type":"string","format":"uri","maxLength":2000},"published_at":{"anyOf":[{"$ref":"#/components/schemas/Timestamp"},{"type":"null"}]}}},"missing_months":{"type":"array","items":{"$ref":"#/components/schemas/YearMonth"},"maxItems":200},"provenance":{"$ref":"#/components/schemas/Provenance"}}},"FuelPricesResponse":{"type":"object","additionalProperties":false,"required":["meta","data","links"],"properties":{"meta":{"$ref":"#/components/schemas/ResponseMeta"},"data":{"anyOf":[{"$ref":"#/components/schemas/FuelPrices"},{"type":"null"}]},"links":{"$ref":"#/components/schemas/Links"}}},"FxRates":{"type":"object","additionalProperties":false,"required":["base","unit","rates_on","published_label","rates","provenance"],"properties":{"base":{"const":"AED"},"unit":{"const":"AED per 1 unit of currency"},"rates_on":{"$ref":"#/components/schemas/CalendarDate"},"published_label":{"type":["string","null"],"maxLength":80,"description":"Update time as printed by CBUAE (local time text, not parsed)."},"rates":{"type":"array","items":{"type":"object","additionalProperties":false,"required":["currency","aed_per_unit"],"properties":{"currency":{"type":"string","pattern":"^[A-Z]{3}$"},"aed_per_unit":{"type":"number","minimum":0}}},"maxItems":200},"provenance":{"$ref":"#/components/schemas/Provenance"}}},"FxRatesResponse":{"type":"object","additionalProperties":false,"required":["meta","data","links"],"properties":{"meta":{"$ref":"#/components/schemas/ResponseMeta"},"data":{"anyOf":[{"$ref":"#/components/schemas/FxRates"},{"type":"null"}]},"links":{"$ref":"#/components/schemas/Links"}}},"GeoPoint":{"type":"object","description":"WGS84 point. approximate=true when it is the centre of a community, not the exact address.","additionalProperties":false,"required":["lat","lon","approximate"],"properties":{"lat":{"type":"number","minimum":-90,"maximum":90},"lon":{"type":"number","minimum":-180,"maximum":180},"approximate":{"type":"boolean"}}},"GradeFee":{"type":"object","additionalProperties":false,"required":["grade","annual_fee_aed"],"properties":{"grade":{"type":"string","maxLength":30,"description":"Grade label as published by KHDA (Year ≠ Grade)."},"annual_fee_aed":{"$ref":"#/components/schemas/AmountAed","description":"Annual tuition as published."}}},"GroceryComparison":{"type":"object","description":"Typed comparison result. The v1 untyped `advice`, `compared`, `not_compared` and `not_found` objects are replaced by `items`.","additionalProperties":false,"required":["outcome","confidence","single_product_mode","catalog_compiled_at","area","recommended_store","ranking","items","below_minimum_stores","browser_handoff_truncated"],"properties":{"outcome":{"type":"string","enum":["estimated","provisional","insufficient","single_store","empty","blocked"],"description":"single_store: only one store has prices for the list, so there is no ranking."},"confidence":{"type":"string","enum":["high","medium","low","none"]},"single_product_mode":{"type":"boolean"},"catalog_compiled_at":{"anyOf":[{"$ref":"#/components/schemas/Timestamp"},{"type":"null"}]},"area":{"type":"object","additionalProperties":false,"required":["ok","reason","value"],"properties":{"ok":{"type":"boolean"},"reason":{"type":["string","null"],"maxLength":40},"value":{"type":"string","maxLength":80}}},"recommended_store":{"anyOf":[{"$ref":"#/components/schemas/StoreTotal"},{"type":"null"}]},"ranking":{"type":"array","items":{"$ref":"#/components/schemas/StoreTotal"},"maxItems":20},"items":{"type":"array","items":{"$ref":"#/components/schemas/ComparisonLine"},"maxItems":40},"below_minimum_stores":{"type":"array","items":{"type":"object","additionalProperties":false,"required":["store_id","store_name","minimum_order_aed","subtotal_aed","shortfall_aed"],"properties":{"store_id":{"$ref":"#/components/schemas/RecordId"},"store_name":{"type":"string","maxLength":200},"minimum_order_aed":{"$ref":"#/components/schemas/AmountAed"},"subtotal_aed":{"$ref":"#/components/schemas/AmountAed"},"shortfall_aed":{"$ref":"#/components/schemas/AmountAed"}}},"maxItems":20},"browser_handoff_truncated":{"type":"boolean"}}},"GroceryComparisonRequest":{"type":"object","additionalProperties":false,"required":["items"],"properties":{"items":{"type":"array","items":{"type":"string","maxLength":120,"minLength":1},"minItems":1,"maxItems":40},"area":{"type":["string","null"],"maxLength":80,"description":"Dubai community for delivery estimates, e.g. \"Jumeirah Park\"."}}},"GroceryComparisonResponse":{"type":"object","additionalProperties":false,"required":["meta","data","links"],"properties":{"meta":{"$ref":"#/components/schemas/ResponseMeta"},"data":{"anyOf":[{"$ref":"#/components/schemas/GroceryComparison"},{"type":"null"}]},"links":{"$ref":"#/components/schemas/Links"}}},"GroceryOffer":{"type":"object","additionalProperties":false,"required":["store_id","store_name","title","price_aed","unit_price_aed","unit","pack_quantity","sale_mode","comparison","availability","freshness","url","provenance"],"properties":{"store_id":{"$ref":"#/components/schemas/RecordId"},"store_name":{"type":"string","maxLength":200},"title":{"type":"string","maxLength":300,"description":"Title as shown by the store."},"price_aed":{"$ref":"#/components/schemas/AmountAed","description":"Price of one pack (or of pack_quantity by weight)."},"unit_price_aed":{"$ref":"#/components/schemas/AmountAedOrNull","description":"Price per kg, per litre or per piece."},"unit":{"type":"string","enum":["each","kg","l"]},"pack_quantity":{"type":"number","minimum":0,"description":"Size of ONE pack in `unit`."},"sale_mode":{"type":"string","enum":["pack","weight"]},"comparison":{"type":"string","enum":["exact","equivalent"],"description":"exact: same product; equivalent: an explicit substitute of the same kind."},"availability":{"type":"string","enum":["available","unavailable","unknown"]},"freshness":{"type":"string","enum":["fresh","stale","future","invalid"],"description":"Age check of the observation against the 36-hour window used by the website."},"url":{"type":["string","null"],"format":"uri","maxLength":2000},"provenance":{"$ref":"#/components/schemas/Provenance"}}},"GroceryOfferListResponse":{"type":"object","additionalProperties":false,"required":["meta","data","links"],"properties":{"meta":{"$ref":"#/components/schemas/ResponseMeta"},"data":{"type":"array","items":{"$ref":"#/components/schemas/GroceryOffer"},"maxItems":50},"links":{"$ref":"#/components/schemas/Links"}}},"GroceryProduct":{"type":"object","additionalProperties":false,"required":["product_id","name","comparison","unit","default_quantity","offers_count","lowest_price_aed","page_url","open_in_browser","provenance"],"properties":{"offers":{"type":"array","items":{"$ref":"#/components/schemas/GroceryOffer"}},"product_id":{"$ref":"#/components/schemas/RecordId"},"name":{"type":"string","maxLength":200},"comparison":{"type":"string","enum":["exact","equivalent"]},"unit":{"type":"string","enum":["each","kg","l"]},"default_quantity":{"type":["number","null"],"minimum":0,"description":"Quantity proposed for a shopping list, in `unit` (v1 size.quantity)."},"offers_count":{"type":"integer","minimum":0},"lowest_price_aed":{"$ref":"#/components/schemas/AmountAedOrNull","description":"Cheapest current offer (fresh and available)."},"page_url":{"type":["string","null"],"format":"uri","maxLength":2000},"open_in_browser":{"type":"string","format":"uri","maxLength":2000},"provenance":{"$ref":"#/components/schemas/Provenance"}}},"GroceryProductDetail":{"type":"object","additionalProperties":false,"required":["product_id","name","comparison","unit","default_quantity","page_url","open_in_browser","offers","price_history","provenance"],"properties":{"product_id":{"$ref":"#/components/schemas/RecordId"},"name":{"type":"string","maxLength":200},"comparison":{"type":"string","enum":["exact","equivalent"]},"unit":{"type":"string","enum":["each","kg","l"]},"default_quantity":{"type":["number","null"],"minimum":0},"page_url":{"type":["string","null"],"format":"uri","maxLength":2000},"open_in_browser":{"type":"string","format":"uri","maxLength":2000},"offers":{"type":"array","items":{"$ref":"#/components/schemas/GroceryOffer"},"maxItems":50},"price_history":{"type":"object","additionalProperties":false,"required":["status","note","points"],"properties":{"status":{"type":"string","enum":["available","not_published"],"description":"not_published: the published index holds basket totals, never presented as product history."},"note":{"type":"string","maxLength":500},"points":{"type":"array","items":{"$ref":"#/components/schemas/PriceHistoryPoint"},"maxItems":200}}},"provenance":{"$ref":"#/components/schemas/Provenance"}}},"GroceryProductListResponse":{"type":"object","additionalProperties":false,"required":["meta","data","links"],"properties":{"meta":{"$ref":"#/components/schemas/ResponseMeta"},"data":{"type":"array","items":{"$ref":"#/components/schemas/GroceryProduct"},"maxItems":50},"links":{"$ref":"#/components/schemas/Links"}}},"GroceryProductResponse":{"type":"object","additionalProperties":false,"required":["meta","data","links"],"properties":{"meta":{"$ref":"#/components/schemas/ResponseMeta"},"data":{"anyOf":[{"$ref":"#/components/schemas/GroceryProductDetail"},{"type":"null"}]},"links":{"$ref":"#/components/schemas/Links"}}},"GroceryStore":{"type":"object","additionalProperties":false,"required":["store_id","name","url","kind","integrated","coverage_note","minimum_order_aed","minimum_order_source_url","delivery_rule","delivery_rule_status","delivery_rule_reason","provenance"],"properties":{"store_id":{"$ref":"#/components/schemas/RecordId"},"name":{"type":"string","maxLength":200},"url":{"type":["string","null"],"format":"uri","maxLength":2000},"kind":{"type":"string","enum":["retailer","marketplace","aggregator"]},"integrated":{"type":"boolean"},"coverage_note":{"type":["string","null"],"maxLength":2000},"minimum_order_aed":{"$ref":"#/components/schemas/AmountAedOrNull","description":"Minimum order value used for comparisons."},"minimum_order_source_url":{"type":["string","null"],"format":"uri","maxLength":2000},"delivery_rule":{"anyOf":[{"$ref":"#/components/schemas/DeliveryRule"},{"type":"null"}]},"delivery_rule_status":{"type":"string","enum":["valid","stale","invalid","none"],"description":"none: no published rule; stale: rule older than 30 days."},"delivery_rule_reason":{"type":["string","null"],"maxLength":300},"provenance":{"$ref":"#/components/schemas/Provenance"}}},"GroceryStoreListResponse":{"type":"object","additionalProperties":false,"required":["meta","data","links"],"properties":{"meta":{"$ref":"#/components/schemas/ResponseMeta"},"data":{"type":"array","items":{"$ref":"#/components/schemas/GroceryStore"},"maxItems":50},"links":{"$ref":"#/components/schemas/Links"}}},"GroceryStoreResponse":{"type":"object","additionalProperties":false,"required":["meta","data","links"],"properties":{"meta":{"$ref":"#/components/schemas/ResponseMeta"},"data":{"anyOf":[{"$ref":"#/components/schemas/GroceryStore"},{"type":"null"}]},"links":{"$ref":"#/components/schemas/Links"}}},"HealthInsuranceScope":{"type":"object","description":"Rules from official texts, each with article and source. No insurer prices. Not legal advice.","additionalProperties":false,"required":["scope_id","emirates","status","notice","paused_since","facts","not_published","provenance"],"properties":{"scope_id":{"$ref":"#/components/schemas/Code"},"emirates":{"type":"array","items":{"type":"string","enum":["dubai","abu_dhabi","sharjah","ajman","umm_al_quwain","ras_al_khaimah","fujairah"]},"maxItems":7},"status":{"type":"string","enum":["ok","paused"]},"notice":{"type":["string","null"],"maxLength":500},"paused_since":{"anyOf":[{"$ref":"#/components/schemas/CalendarDate"},{"type":"null"}]},"facts":{"type":"array","items":{"type":"object","additionalProperties":false,"required":["fact_id","text","amount_aed","legal_source"],"properties":{"fact_id":{"$ref":"#/components/schemas/Code"},"text":{"type":"string","maxLength":1000},"amount_aed":{"type":["object","null"],"additionalProperties":false,"required":["min","max"],"properties":{"min":{"$ref":"#/components/schemas/AmountAedOrNull"},"max":{"$ref":"#/components/schemas/AmountAedOrNull"}}},"legal_source":{"type":["object","null"],"additionalProperties":false,"required":["title","publisher","url","article","document_date","doubtful"],"properties":{"title":{"type":"string","maxLength":500},"publisher":{"type":["string","null"],"maxLength":300},"url":{"type":["string","null"],"format":"uri","maxLength":2000},"article":{"type":["string","null"],"maxLength":80},"document_date":{"type":["string","null"],"maxLength":20,"description":"As printed (may be a year only)."},"doubtful":{"type":"boolean"}}}}},"maxItems":40},"not_published":{"type":"array","items":{"type":"string","maxLength":300},"maxItems":10},"provenance":{"$ref":"#/components/schemas/Provenance"}}},"HealthInsuranceScopeListResponse":{"type":"object","additionalProperties":false,"required":["meta","data","links"],"properties":{"meta":{"$ref":"#/components/schemas/ResponseMeta"},"data":{"type":"array","items":{"$ref":"#/components/schemas/HealthInsuranceScope"},"maxItems":50},"links":{"$ref":"#/components/schemas/Links"}}},"HouseholdCostContext":{"type":"object","additionalProperties":false,"required":["month","groceries_reference","not_included"],"properties":{"month_start_on":{"type":["string","null"],"format":"date"},"month":{"anyOf":[{"$ref":"#/components/schemas/YearMonth"},{"type":"null"}]},"groceries_reference":{"type":["object","null"],"additionalProperties":false,"required":["total_aed","products","basket_size","note","sources"],"properties":{"total_aed":{"$ref":"#/components/schemas/AmountAedOrNull"},"products":{"type":"integer","minimum":0},"basket_size":{"type":"integer","minimum":0},"note":{"type":"string","maxLength":1000},"sources":{"type":"array","items":{"type":"object","additionalProperties":false,"required":["name","date"],"properties":{"name":{"type":"string","maxLength":300},"date":{"anyOf":[{"$ref":"#/components/schemas/CalendarDate"},{"type":"null"}]}}},"maxItems":10}}},"not_included":{"type":"array","items":{"type":"string","enum":["groceries","health_insurance","car_ownership","deposits","leisure"]},"maxItems":10}}},"HouseholdCostProfile":{"type":"object","additionalProperties":false,"required":["profile_id","label","covers","fixed_monthly_costs_aed","lines","provenance"],"properties":{"profile_id":{"type":"string","enum":["single","couple","family4"]},"label":{"type":"string","maxLength":200},"covers":{"type":"string","maxLength":300},"fixed_monthly_costs_aed":{"$ref":"#/components/schemas/AmountAedOrNull","description":"Fixed costs only; never the full cost of living."},"lines":{"type":"array","items":{"$ref":"#/components/schemas/CostLine"},"maxItems":10},"provenance":{"$ref":"#/components/schemas/Provenance"}}},"HouseholdCostProfileListResponse":{"type":"object","additionalProperties":false,"required":["meta","context","data","links"],"properties":{"meta":{"$ref":"#/components/schemas/ResponseMeta"},"context":{"$ref":"#/components/schemas/HouseholdCostContext"},"data":{"type":"array","items":{"$ref":"#/components/schemas/HouseholdCostProfile"},"maxItems":50},"links":{"$ref":"#/components/schemas/Links"}}},"HousingZone":{"type":"object","additionalProperties":false,"required":["zone_id","name","name_ar","communities","communities_ar","rent_contracts","sale_transactions","open_in_browser","provenance"],"properties":{"zone_id":{"$ref":"#/components/schemas/RecordId"},"name":{"type":"string","maxLength":200},"name_ar":{"type":["string","null"],"maxLength":200},"communities":{"type":"array","items":{"type":"string","maxLength":200},"maxItems":50},"communities_ar":{"type":"array","items":{"type":"string","maxLength":200},"maxItems":50},"rent_contracts":{"type":["integer","null"],"minimum":0},"sale_transactions":{"type":["integer","null"],"minimum":0},"open_in_browser":{"type":["string","null"],"format":"uri","maxLength":2000},"provenance":{"$ref":"#/components/schemas/Provenance"}}},"HousingZoneDetail":{"type":"object","additionalProperties":false,"required":["zone_id","name","name_ar","communities","communities_ar","rent_contracts","sale_transactions","open_in_browser","rents","sales","method","provenance"],"properties":{"zone_id":{"$ref":"#/components/schemas/RecordId"},"name":{"type":"string","maxLength":200},"name_ar":{"type":["string","null"],"maxLength":200},"communities":{"type":"array","items":{"type":"string","maxLength":200},"maxItems":50},"communities_ar":{"type":"array","items":{"type":"string","maxLength":200},"maxItems":50},"rent_contracts":{"type":["integer","null"],"minimum":0},"sale_transactions":{"type":["integer","null"],"minimum":0},"open_in_browser":{"type":["string","null"],"format":"uri","maxLength":2000},"rents":{"type":"array","items":{"$ref":"#/components/schemas/RentMedian"},"maxItems":30},"sales":{"type":"array","items":{"$ref":"#/components/schemas/SaleMedian"},"maxItems":60},"method":{"type":["string","null"],"maxLength":1000},"provenance":{"$ref":"#/components/schemas/Provenance"}}},"HousingZoneListResponse":{"type":"object","additionalProperties":false,"required":["meta","data","links"],"properties":{"meta":{"$ref":"#/components/schemas/ResponseMeta"},"data":{"type":"array","items":{"$ref":"#/components/schemas/HousingZone"},"maxItems":50},"links":{"$ref":"#/components/schemas/Links"}}},"HousingZoneResponse":{"type":"object","additionalProperties":false,"required":["meta","data","links"],"properties":{"meta":{"$ref":"#/components/schemas/ResponseMeta"},"data":{"anyOf":[{"$ref":"#/components/schemas/HousingZoneDetail"},{"type":"null"}]},"links":{"$ref":"#/components/schemas/Links"}}},"KeyManagementRequest":{"type":"object","additionalProperties":false,"required":["management_token"],"properties":{"management_token":{"type":"string","maxLength":200,"minLength":20,"description":"From a confirmed purpose=manage request. Sent in the body, never in a URL."}}},"License":{"type":"object","description":"Licence or terms of one source, as stated by the source. There is no licence covering all data of this API.","additionalProperties":false,"required":["license_id","name","url","status","conditions","note"],"properties":{"license_id":{"$ref":"#/components/schemas/Code"},"name":{"type":["string","null"],"maxLength":200},"url":{"type":["string","null"],"format":"uri","maxLength":2000},"status":{"type":"string","enum":["confirmed","restricted","unconfirmed","paused"],"description":"Normative. confirmed: a published open licence or terms that allow per-query display with attribution (conditions listed). restricted: published terms allow use only under the listed conditions (e.g. non-commercial, unaltered); the API stays free and shows the data unaltered. unconfirmed: no terms confirmed; figures are shown per query with attribution and link only, no licence is implied or granted, never redistributed in bulk. paused: we stopped showing this source (e.g. waiting for permission); its rows are not served, not even from the last good copy."},"conditions":{"type":"array","items":{"type":"string","enum":["attribution_required","non_commercial","preserve_original_data","share_alike","derived_aggregates_only"]},"maxItems":10,"description":"Conditions stated by the licence or terms; their scope (e.g. share-alike only for adapted material) is in note. Empty when status is unconfirmed or paused (nothing is assumed)."},"note":{"type":["string","null"],"maxLength":1000}}},"Links":{"type":"object","additionalProperties":false,"required":["self","next","open_in_browser","docs"],"properties":{"self":{"type":"string","format":"uri","maxLength":2000},"next":{"type":["string","null"],"format":"uri","maxLength":2000},"open_in_browser":{"type":["string","null"],"format":"uri","maxLength":2000},"docs":{"type":"string","format":"uri","maxLength":2000}}},"ManagementTokenIssued":{"type":"object","description":"Issued by confirming a purpose=manage request. Lets the owner of the confirmed address rotate or revoke the key once.","additionalProperties":false,"required":["kind","management_token","expires_at","single_use","allowed_actions"],"properties":{"kind":{"const":"management_token"},"management_token":{"type":"string","maxLength":200,"description":"Single use. Not an API key: it never authorises data calls."},"expires_at":{"$ref":"#/components/schemas/Timestamp"},"single_use":{"const":true},"allowed_actions":{"type":"array","items":{"type":"string","enum":["rotate","revoke"]},"maxItems":2}}},"OfferAt":{"type":"object","description":"Pack chosen by the comparison engine at one store for one list line.","additionalProperties":false,"required":["store_id","store_name","title","pack_quantity","unit","packs","sale_mode","price_aed","cost_aed","purchased_quantity","unit_price_aed","estimated","observed_on","observed_at","url"],"properties":{"store_id":{"$ref":"#/components/schemas/RecordId"},"store_name":{"type":"string","maxLength":200},"title":{"type":"string","maxLength":300},"pack_quantity":{"type":"number","minimum":0},"unit":{"type":"string","enum":["each","kg","l"]},"packs":{"type":["integer","null"],"minimum":1},"sale_mode":{"type":"string","enum":["pack","weight"]},"price_aed":{"$ref":"#/components/schemas/AmountAed","description":"Price per pack."},"cost_aed":{"$ref":"#/components/schemas/AmountAed","description":"packs × price_aed (or prorated by weight)."},"purchased_quantity":{"type":"number","minimum":0},"unit_price_aed":{"$ref":"#/components/schemas/AmountAedOrNull"},"estimated":{"type":"boolean"},"observed_on":{"anyOf":[{"$ref":"#/components/schemas/CalendarDate"},{"type":"null"}]},"observed_at":{"anyOf":[{"$ref":"#/components/schemas/Timestamp"},{"type":"null"}]},"url":{"type":["string","null"],"format":"uri","maxLength":2000}}},"OfficialShopPrice":{"type":"object","description":"Official shop prices from the UAE Ministry of Economy and Tourism (Dubai branches, identical variants, figures unaltered).","additionalProperties":false,"required":["product_id","name","category","brand","size","chains","low_branch_rows","excluded_rows","provenance"],"properties":{"product_id":{"$ref":"#/components/schemas/RecordId"},"name":{"type":"string","maxLength":200},"category":{"type":"string","enum":["bread","chicken","cooking_oil","dairy","eggs","legumes","rice","sugar"]},"brand":{"type":["string","null"],"maxLength":120},"size":{"type":"object","additionalProperties":false,"required":["quantity","unit"],"properties":{"quantity":{"type":"number","minimum":0},"unit":{"type":"string","enum":["g","ml","pc"]}}},"chains":{"type":"array","items":{"type":"object","additionalProperties":false,"required":["chain_id","chain_name","min_price_aed","median_price_aed","branches","single_branch"],"properties":{"chain_id":{"type":"string","enum":["al_maya","carrefour","emirates_coop","lulu","nesto","safeer","spinneys","union_coop"]},"chain_name":{"type":"string","maxLength":80},"min_price_aed":{"$ref":"#/components/schemas/AmountAed","description":"Lowest branch price reported by MOET."},"median_price_aed":{"$ref":"#/components/schemas/AmountAed","description":"Median of the Dubai branches reported."},"branches":{"type":"integer","minimum":1},"single_branch":{"type":"boolean"}}},"maxItems":8},"low_branch_rows":{"type":"integer","minimum":0},"excluded_rows":{"type":"integer","minimum":0},"provenance":{"$ref":"#/components/schemas/Provenance"}}},"OfficialShopPriceListResponse":{"type":"object","additionalProperties":false,"required":["meta","data","links"],"properties":{"meta":{"$ref":"#/components/schemas/ResponseMeta"},"data":{"type":"array","items":{"$ref":"#/components/schemas/OfficialShopPrice"},"maxItems":50},"links":{"$ref":"#/components/schemas/Links"}}},"OnlineReference":{"type":"object","additionalProperties":false,"required":["title","merchant","price_aed","url","relevance","provenance"],"properties":{"title":{"type":"string","maxLength":300},"merchant":{"type":"string","maxLength":120},"price_aed":{"$ref":"#/components/schemas/AmountAed","description":"Indicative."},"url":{"type":"string","format":"uri","maxLength":2000},"relevance":{"type":"number","minimum":0,"maximum":1},"provenance":{"$ref":"#/components/schemas/Provenance"}}},"OnlineReferenceListResponse":{"type":"object","additionalProperties":false,"required":["meta","data","links"],"properties":{"meta":{"$ref":"#/components/schemas/ResponseMeta"},"data":{"type":"array","items":{"$ref":"#/components/schemas/OnlineReference"},"maxItems":50},"links":{"$ref":"#/components/schemas/Links"}}},"PageMeta":{"type":"object","description":"Snapshot-bound cursor pagination: page_size default 20, max 50, result window 200. An expired cursor or a snapshot that is no longer served answers 409 (cursor_expired / snapshot_changed): start again without cursor. A cursor used with other filters, sort or page_size answers 400 cursor_invalid.","additionalProperties":false,"required":["page_size","returned","total","result_window","snapshot_id","has_more","next_cursor","cursor_ttl_s"],"properties":{"page_size":{"type":"integer","minimum":1,"maximum":50},"returned":{"type":"integer","minimum":0,"maximum":50},"total":{"type":"integer","minimum":0,"description":"Matches for this query in this snapshot, before the result window is applied."},"result_window":{"const":200,"description":"At most 200 rows can be reached for one query (all pages together): selective questions, not a bulk export (legal decision on open datasets ON HOLD)."},"snapshot_id":{"type":"string","maxLength":80,"description":"Dataset snapshot every page of this query is read from. A refresh never shifts or duplicates rows inside one cursor chain."},"has_more":{"type":"boolean"},"next_cursor":{"type":["string","null"],"maxLength":512,"description":"Opaque. Bound to snapshot_id, filters, sort, page_size, locale and an expiry; pass it unchanged as `cursor`."},"cursor_ttl_s":{"type":["integer","null"],"minimum":1,"description":"Seconds next_cursor stays valid; null when there is no next page."}}},"ParkingTariffs":{"type":"object","additionalProperties":false,"required":["emirate","operator_name","effective_on","chargeable_hours","peak_hours","off_peak_hours","free_days","zones","posted_hourly_aed","posted_hourly_note","average_paid_per_hour","seasonal_cards","multi_storey","grand_events","provenance"],"properties":{"emirate":{"type":"string","enum":["dubai","abu_dhabi","sharjah","ajman","umm_al_quwain","ras_al_khaimah","fujairah"]},"operator_name":{"type":"string","maxLength":300},"effective_on":{"anyOf":[{"$ref":"#/components/schemas/CalendarDate"},{"type":"null"}]},"chargeable_hours":{"type":"array","items":{"$ref":"#/components/schemas/TimeRange"},"maxItems":4},"peak_hours":{"type":"array","items":{"$ref":"#/components/schemas/TimeRange"},"maxItems":4},"off_peak_hours":{"type":"array","items":{"$ref":"#/components/schemas/TimeRange"},"maxItems":4},"free_days":{"type":"string","maxLength":200},"zones":{"type":"array","items":{"type":"object","additionalProperties":false,"required":["code","kind","premium_code"],"properties":{"code":{"type":"string","maxLength":4},"kind":{"type":"string","enum":["on_street","off_street"]},"premium_code":{"type":["string","null"],"maxLength":4}}},"maxItems":10},"posted_hourly_aed":{"type":"null","description":"Posted per-zone hourly tariff: not readable from an official source, so null (see posted_hourly_note)."},"posted_hourly_note":{"type":"string","maxLength":1000},"average_paid_per_hour":{"type":["object","null"],"additionalProperties":false,"required":["period","compared_with","what","by_zone","all_zones_aed","previous_all_zones_aed"],"properties":{"period":{"type":"string","maxLength":40},"compared_with":{"type":"string","maxLength":40},"what":{"type":"string","maxLength":300},"by_zone":{"type":"array","items":{"type":"object","additionalProperties":false,"required":["zones","aed","previous_aed"],"properties":{"zones":{"type":"string","maxLength":20},"aed":{"$ref":"#/components/schemas/AmountAed","description":"Average actually paid per hour."},"previous_aed":{"$ref":"#/components/schemas/AmountAedOrNull"}}},"maxItems":10},"all_zones_aed":{"$ref":"#/components/schemas/AmountAedOrNull"},"previous_all_zones_aed":{"$ref":"#/components/schemas/AmountAedOrNull"}}},"seasonal_cards":{"type":["object","null"],"additionalProperties":false,"required":["as_of","options"],"properties":{"as_of":{"$ref":"#/components/schemas/CalendarDate"},"options":{"type":"array","items":{"type":"object","additionalProperties":false,"required":["option_id","zones","prices"],"properties":{"option_id":{"$ref":"#/components/schemas/Code"},"zones":{"type":"string","maxLength":40},"prices":{"type":"array","items":{"type":"object","additionalProperties":false,"required":["months","aed"],"properties":{"months":{"type":"integer","minimum":1,"maximum":12},"aed":{"$ref":"#/components/schemas/AmountAed","description":"Card price for that many months."}}},"maxItems":6}}},"maxItems":6}}},"multi_storey":{"type":["object","null"],"additionalProperties":false,"required":["aed_per_hour","chargeable","max_aed_over_8_hours_in_24"],"properties":{"aed_per_hour":{"$ref":"#/components/schemas/AmountAed"},"chargeable":{"type":"string","maxLength":200},"max_aed_over_8_hours_in_24":{"$ref":"#/components/schemas/AmountAedOrNull"}}},"grand_events":{"type":["object","null"],"additionalProperties":false,"required":["aed_per_hour","hours","where"],"properties":{"aed_per_hour":{"$ref":"#/components/schemas/AmountAed"},"hours":{"type":"array","items":{"$ref":"#/components/schemas/TimeRange"},"maxItems":4},"where":{"type":"string","maxLength":300}}},"provenance":{"$ref":"#/components/schemas/Provenance"}}},"ParkingTariffsResponse":{"type":"object","additionalProperties":false,"required":["meta","data","links"],"properties":{"context":{"$ref":"#/components/schemas/TransportReferenceContext"},"meta":{"$ref":"#/components/schemas/ResponseMeta"},"data":{"anyOf":[{"$ref":"#/components/schemas/ParkingTariffs"},{"type":"null"}]},"links":{"$ref":"#/components/schemas/Links"}}},"Period":{"type":"object","description":"Reference period of aggregated figures (inclusive dates).","additionalProperties":false,"required":["from","to","months"],"properties":{"from":{"$ref":"#/components/schemas/CalendarDate"},"to":{"$ref":"#/components/schemas/CalendarDate"},"months":{"type":["integer","null"],"minimum":1,"maximum":120}}},"PriceHistoryPoint":{"type":"object","additionalProperties":false,"required":["date","price_aed","store_id"],"properties":{"date":{"$ref":"#/components/schemas/CalendarDate"},"price_aed":{"$ref":"#/components/schemas/AmountAed","description":"Observed price."},"store_id":{"anyOf":[{"$ref":"#/components/schemas/RecordId"},{"type":"null"}]}}},"Problem":{"type":"object","description":"RFC 9457 problem details (application/problem+json). A deliberately paused dataset is never an error: it is HTTP 200 with meta.dataset.status = paused.","additionalProperties":false,"required":["type","title","status","code","detail","instance","request_id","retryable","retry_after_s","invalid_params","docs","attribution"],"properties":{"type":{"type":"string","format":"uri","maxLength":2000},"title":{"type":"string","maxLength":200},"status":{"type":"integer","minimum":400,"maximum":599},"code":{"type":"string","enum":["invalid_arguments","invalid_query","filter_required","unsupported_sort","window_exceeded","cursor_invalid","cursor_expired","snapshot_changed","invalid_json","content_type","body_too_large","not_found","method_not_allowed","country_not_found","country_not_supported","rate_limited","invalid_api_key","api_key_revoked","confirmation_invalid","management_token_invalid","terms_version_outdated","consent_required","key_limit_reached","access_unavailable","quota_unavailable","capacity","data_unavailable","internal_error"]},"detail":{"type":"string","maxLength":1000},"instance":{"type":["string","null"],"maxLength":500},"request_id":{"type":"string","pattern":"^[A-Za-z0-9_-]{8,64}$","description":"Correlates with server logs (which never hold raw IP, body or token)."},"retryable":{"type":"boolean","description":"true only for 429 and 503 (with Retry-After); false for every 4xx validation, cursor or not-found error."},"retry_after_s":{"type":["integer","null"],"minimum":0},"invalid_params":{"type":"array","items":{"type":"object","additionalProperties":false,"required":["name","reason"],"properties":{"name":{"type":"string","maxLength":80},"reason":{"type":"string","maxLength":300}}},"maxItems":20},"docs":{"type":"string","format":"uri","maxLength":2000},"attribution":{"type":"string","maxLength":300}}},"Provenance":{"type":"object","description":"Row-level provenance. *_on = calendar date, *_at = logged instant; when only the day is known the *_at field is null. observed = when the figure was seen on the source; published = official publication by the source; retrieved = when our collector fetched it. stale = served from the last good copy after a failed refresh (cache semantics, not age of the source data).","additionalProperties":false,"required":["source_id","license_id","source_url","observed_on","observed_at","published_on","published_at","retrieved_at","stale","status","paused_since","flags"],"properties":{"source_id":{"$ref":"#/components/schemas/Code"},"license_id":{"$ref":"#/components/schemas/Code"},"source_url":{"type":["string","null"],"format":"uri","maxLength":2000},"observed_on":{"anyOf":[{"$ref":"#/components/schemas/CalendarDate"},{"type":"null"}]},"observed_at":{"anyOf":[{"$ref":"#/components/schemas/Timestamp"},{"type":"null"}]},"published_on":{"anyOf":[{"$ref":"#/components/schemas/CalendarDate"},{"type":"null"}]},"published_at":{"anyOf":[{"$ref":"#/components/schemas/Timestamp"},{"type":"null"}]},"retrieved_at":{"anyOf":[{"$ref":"#/components/schemas/Timestamp"},{"type":"null"}]},"stale":{"type":"boolean"},"status":{"type":"string","enum":["ok","paused","unverified","not_published"],"description":"ok; paused (deliberate, do not retry); unverified (shown but not checked against the source); not_published (the source does not publish this figure)."},"paused_since":{"anyOf":[{"$ref":"#/components/schemas/CalendarDate"},{"type":"null"}]},"flags":{"type":"array","items":{"type":"string","enum":["doubtful","calculated","vat_added","single_branch","low_branch_count","estimated_weight","promo","approximate_location","historical_period"]},"maxItems":9}}},"PublicTransportFare":{"type":"object","additionalProperties":false,"required":["operator_id","operator_name","emirate","status","notice","paused_since","fares","service_area","provenance"],"properties":{"operator_id":{"type":"string","enum":["rta_nol","srta_bus","srta_bus_on_demand"]},"operator_name":{"type":"string","maxLength":300},"emirate":{"type":"string","enum":["dubai","abu_dhabi","sharjah","ajman","umm_al_quwain","ras_al_khaimah","fujairah"]},"status":{"type":"string","enum":["ok","paused"]},"notice":{"type":["string","null"],"maxLength":500},"paused_since":{"anyOf":[{"$ref":"#/components/schemas/CalendarDate"},{"type":"null"}]},"fares":{"type":"array","items":{"type":"object","additionalProperties":false,"required":["fare_id","label","aed","per"],"properties":{"fare_id":{"$ref":"#/components/schemas/Code"},"label":{"type":"string","maxLength":200},"aed":{"$ref":"#/components/schemas/AmountAed"},"per":{"type":"string","enum":["ticket","month","card","passenger"]}}},"maxItems":20},"service_area":{"type":["string","null"],"maxLength":300},"provenance":{"$ref":"#/components/schemas/Provenance"}}},"PublicTransportFareListResponse":{"type":"object","additionalProperties":false,"required":["meta","data","links"],"properties":{"context":{"$ref":"#/components/schemas/TransportReferenceContext"},"meta":{"$ref":"#/components/schemas/ResponseMeta"},"data":{"type":"array","items":{"$ref":"#/components/schemas/PublicTransportFare"},"maxItems":50},"links":{"$ref":"#/components/schemas/Links"}}},"RecordId":{"type":"string","pattern":"^[a-z0-9][a-z0-9._-]{0,119}$","description":"Opaque record identifier copied from the published dataset (today kebab-case slugs shared with website URLs). Do not parse it. Codes from closed sets, field names and operationIds are snake_case."},"ReferencePeriod":{"type":"object","description":"Period the figures refer to (not when they were read).","additionalProperties":false,"required":["unit","label","from","to"],"properties":{"unit":{"type":"string","enum":["month","rolling_12_months","academic_year","tax_year","quarter","year","day"],"description":"What the period is."},"label":{"type":"string","maxLength":80,"description":"As published, e.g. \"2024-2025\", \"2026-10\", \"2026/27\"."},"from":{"anyOf":[{"$ref":"#/components/schemas/CalendarDate"},{"type":"null"}]},"to":{"anyOf":[{"$ref":"#/components/schemas/CalendarDate"},{"type":"null"}]}}},"RelocationEstimate":{"type":"object","description":"Estimate, not tax advice: salary income only, full-year resident, one job.","additionalProperties":false,"required":["estimate","disclaimer","country","household","gross_annual","home","dubai","fx","dubai_monthly_costs_aed","savings","transport_reference","notices","country_notes","not_modelled","assumptions","provenance"],"properties":{"estimate":{"const":true},"disclaimer":{"type":"string","maxLength":500},"country":{"type":"object","additionalProperties":false,"required":["iso2","name","currency","tax_year","tax_year_period","variant","variant_label"],"properties":{"iso2":{"type":"string","maxLength":2},"name":{"type":"string","maxLength":80},"currency":{"type":"string","maxLength":3},"tax_year":{"type":["string","null"],"maxLength":20},"tax_year_period":{"type":["string","null"],"maxLength":80},"variant":{"anyOf":[{"$ref":"#/components/schemas/Code"},{"type":"null"}]},"variant_label":{"type":["string","null"],"maxLength":200}}},"household":{"type":"object","additionalProperties":false,"required":["status","children"],"properties":{"status":{"type":"string","enum":["single","married"]},"children":{"type":"integer","minimum":0,"maximum":10}}},"gross_annual":{"type":"object","additionalProperties":false,"required":["amount","currency","aed"],"properties":{"amount":{"type":"number"},"currency":{"type":"string","maxLength":3},"aed":{"$ref":"#/components/schemas/AmountAedOrNull"}}},"home":{"type":"object","description":"Amounts in `currency` (home), per year unless named monthly.","additionalProperties":false,"required":["currency","net_annual","net_monthly","income_tax","social_contributions","effective_rate","breakdown","net_annual_aed"],"properties":{"effective_rate_percent":{"type":"number","minimum":0},"currency":{"type":"string","maxLength":3},"net_annual":{"type":"number"},"net_monthly":{"type":"number"},"income_tax":{"type":"number"},"social_contributions":{"type":"number"},"effective_rate":{"type":"number","minimum":0,"maximum":1},"breakdown":{"type":"array","items":{"type":"object","additionalProperties":false,"required":["component_id","label","kind","amount"],"properties":{"component_id":{"$ref":"#/components/schemas/Code"},"label":{"type":"string","maxLength":200},"kind":{"type":"string","maxLength":40},"amount":{"type":"number"}}},"maxItems":30},"net_annual_aed":{"$ref":"#/components/schemas/AmountAedOrNull"}}},"dubai":{"type":"object","additionalProperties":false,"required":["gross_annual_aed","net_annual_aed","net_monthly_aed","income_tax_aed"],"properties":{"gross_annual_aed":{"$ref":"#/components/schemas/AmountAed"},"net_annual_aed":{"$ref":"#/components/schemas/AmountAed"},"net_monthly_aed":{"$ref":"#/components/schemas/AmountAed"},"income_tax_aed":{"const":0}}},"fx":{"type":"object","additionalProperties":false,"required":["aed_per_unit","rates_on","source"],"properties":{"aed_per_unit":{"type":["number","null"],"minimum":0},"rates_on":{"anyOf":[{"$ref":"#/components/schemas/CalendarDate"},{"type":"null"}]},"source":{"type":["string","null"],"maxLength":300}}},"dubai_monthly_costs_aed":{"type":"object","additionalProperties":false,"required":["rent","school","groceries","utilities","transport","health"],"properties":{"rent":{"$ref":"#/components/schemas/AmountAedOrNull"},"school":{"$ref":"#/components/schemas/AmountAedOrNull","description":"Not modelled: null."},"groceries":{"$ref":"#/components/schemas/AmountAedOrNull"},"utilities":{"$ref":"#/components/schemas/AmountAedOrNull"},"transport":{"$ref":"#/components/schemas/AmountAedOrNull"},"health":{"$ref":"#/components/schemas/AmountAedOrNull","description":"Not modelled: null."}}},"savings":{"type":"object","description":"All in AED.","additionalProperties":false,"required":["home_monthly_net","dubai_monthly_net","net_gain_monthly","net_gain_annual","dubai_monthly_costs","missing_costs","costs_complete","dubai_monthly_savings","dubai_annual_savings","home_monthly_savings","home_annual_savings","savings_difference_monthly","savings_difference_annual","withheld_reason"],"properties":{"home_monthly_net":{"$ref":"#/components/schemas/AmountAedOrNull"},"dubai_monthly_net":{"$ref":"#/components/schemas/AmountAedOrNull"},"net_gain_monthly":{"$ref":"#/components/schemas/AmountAedOrNull"},"net_gain_annual":{"$ref":"#/components/schemas/AmountAedOrNull"},"dubai_monthly_costs":{"$ref":"#/components/schemas/AmountAedOrNull"},"missing_costs":{"type":"array","items":{"type":"string","enum":["rent","school","groceries","utilities","transport","health"]},"maxItems":6},"costs_complete":{"type":"boolean"},"dubai_monthly_savings":{"$ref":"#/components/schemas/AmountAedOrNull"},"dubai_annual_savings":{"$ref":"#/components/schemas/AmountAedOrNull"},"home_monthly_savings":{"$ref":"#/components/schemas/AmountAedOrNull"},"home_annual_savings":{"$ref":"#/components/schemas/AmountAedOrNull"},"savings_difference_monthly":{"$ref":"#/components/schemas/AmountAedOrNull"},"savings_difference_annual":{"$ref":"#/components/schemas/AmountAedOrNull"},"withheld_reason":{"type":["string","null"],"enum":["rent_unknown",null]}}},"transport_reference":{"type":["object","null"],"additionalProperties":false,"required":["car_monthly_aed","km_per_day","salik_per_day","public_transport_min_aed","public_transport_max_aed","fuel_month"],"properties":{"car_monthly_aed":{"$ref":"#/components/schemas/AmountAed"},"km_per_day":{"type":"number","minimum":0},"salik_per_day":{"type":"integer","minimum":0},"public_transport_min_aed":{"$ref":"#/components/schemas/AmountAed"},"public_transport_max_aed":{"$ref":"#/components/schemas/AmountAed"},"fuel_month":{"$ref":"#/components/schemas/YearMonth"}}},"notices":{"type":"array","items":{"type":"string","maxLength":1000},"maxItems":20},"country_notes":{"type":"array","items":{"type":"string","maxLength":1000},"maxItems":20},"not_modelled":{"type":"array","items":{"type":"string","maxLength":500},"maxItems":20},"assumptions":{"type":"array","items":{"type":"string","maxLength":1000},"maxItems":20},"provenance":{"$ref":"#/components/schemas/Provenance"}}},"RelocationEstimateResponse":{"type":"object","additionalProperties":false,"required":["meta","data","links"],"properties":{"meta":{"$ref":"#/components/schemas/ResponseMeta"},"data":{"anyOf":[{"$ref":"#/components/schemas/RelocationEstimate"},{"type":"null"}]},"links":{"$ref":"#/components/schemas/Links"}}},"RelocationRequest":{"type":"object","description":"Personal financial data: POST body only, never logged in URLs, response Cache-Control: no-store.","additionalProperties":false,"required":["country","gross_annual"],"properties":{"country":{"type":"string","maxLength":60,"minLength":2,"description":"Home country: ISO 3166-1 alpha-2 (GB, US, IN…) or English name."},"gross_annual":{"type":"number","exclusiveMinimum":0,"maximum":10000000000000,"description":"Gross annual salary in `currency` (default: the home country currency)."},"currency":{"type":["string","null"],"pattern":"^[A-Z]{3}$"},"household":{"type":["object","null"],"additionalProperties":false,"required":[],"properties":{"status":{"type":"string","enum":["single","married"]},"children":{"type":"integer","minimum":0,"maximum":10}}},"area":{"type":["string","null"],"maxLength":80},"bedrooms":{"type":["integer","null"],"minimum":0,"maximum":10},"property_type":{"type":["string","null"],"enum":["apartment","villa",null]},"variant":{"type":["string","null"],"maxLength":40},"dubai_gross_annual_aed":{"type":["number","null"],"exclusiveMinimum":0,"maximum":10000000000000},"home_monthly_costs":{"type":["number","null"],"minimum":0,"maximum":10000000000000,"description":"Current monthly spending at home, in `currency`."}}},"RentMedian":{"type":"object","description":"Registered Ejari rent contracts (DLD open data), not asking prices.","additionalProperties":false,"required":["zone_id","zone_name","property_type","bedrooms","contracts","median_annual_aed","p25_annual_aed","p75_annual_aed","median_monthly_aed","new_contracts","renewals","provenance"],"properties":{"display_monthly_aed":{"type":["number","null"],"minimum":0},"zone_id":{"$ref":"#/components/schemas/RecordId"},"zone_name":{"type":"string","maxLength":200},"property_type":{"type":"string","enum":["apartment","villa"]},"bedrooms":{"type":"integer","minimum":0,"maximum":10,"description":"0 = studio."},"contracts":{"type":"integer","minimum":10,"description":"Registered contracts in the period (n ≥ 10)."},"median_annual_aed":{"$ref":"#/components/schemas/AmountAed","description":"Median annual rent."},"p25_annual_aed":{"$ref":"#/components/schemas/AmountAedOrNull"},"p75_annual_aed":{"$ref":"#/components/schemas/AmountAedOrNull"},"median_monthly_aed":{"$ref":"#/components/schemas/AmountAedOrNull","description":"median_annual_aed / 12."},"new_contracts":{"anyOf":[{"$ref":"#/components/schemas/RentSplit"},{"type":"null"}]},"renewals":{"anyOf":[{"$ref":"#/components/schemas/RentSplit"},{"type":"null"}]},"provenance":{"$ref":"#/components/schemas/Provenance"}}},"RentMedianListResponse":{"type":"object","additionalProperties":false,"required":["meta","data","links"],"properties":{"context":{"type":"object","additionalProperties":false,"required":["zone","rents","sales"],"properties":{"zone":{"$ref":"#/components/schemas/HousingZone"},"rents":{"type":"array","items":{"$ref":"#/components/schemas/RentMedian"}},"sales":{"type":"array","items":{"$ref":"#/components/schemas/SaleMedian"}}}},"meta":{"$ref":"#/components/schemas/ResponseMeta"},"data":{"type":"array","items":{"$ref":"#/components/schemas/RentMedian"},"maxItems":50},"links":{"$ref":"#/components/schemas/Links"}}},"RentSplit":{"type":"object","additionalProperties":false,"required":["contracts","median_annual_aed","p25_annual_aed","p75_annual_aed"],"properties":{"contracts":{"type":["integer","null"],"minimum":0},"median_annual_aed":{"$ref":"#/components/schemas/AmountAedOrNull"},"p25_annual_aed":{"$ref":"#/components/schemas/AmountAedOrNull"},"p75_annual_aed":{"$ref":"#/components/schemas/AmountAedOrNull"}}},"ResidenceContext":{"type":"object","additionalProperties":false,"required":["unknown_costs"],"properties":{"common_fees":{"type":"array","items":{"$ref":"#/components/schemas/FeeCard"}},"common_paused":{"type":"array","items":{"type":"object","additionalProperties":false,"required":["title","authority","paused_since"],"properties":{"title":{"type":"string"},"authority":{"type":["string","null"]},"paused_since":{"type":["string","null"]}}}},"unknown_costs":{"type":"array","items":{"type":"object","additionalProperties":false,"required":["cost_id","reason","authority","url"],"properties":{"cost_id":{"$ref":"#/components/schemas/Code"},"reason":{"type":"string","enum":["authority_blocked","not_official","not_on_official_card","paused_permission","unknown"]},"authority":{"type":["string","null"],"maxLength":200},"url":{"type":["string","null"],"format":"uri","maxLength":2000}}},"maxItems":30}}},"ResidenceFeeItem":{"type":"object","description":"Fee every resident meets (medical test, health insurance, Emirates ID…). Paused items name the authority, without figures.","additionalProperties":false,"required":["item_id","title","status","authority","url","paused_since","card","provenance"],"properties":{"item_id":{"$ref":"#/components/schemas/Code"},"title":{"type":"string","maxLength":200},"status":{"type":"string","enum":["ok","paused"]},"authority":{"type":["string","null"],"maxLength":200},"url":{"type":["string","null"],"format":"uri","maxLength":2000},"paused_since":{"anyOf":[{"$ref":"#/components/schemas/CalendarDate"},{"type":"null"}]},"card":{"anyOf":[{"$ref":"#/components/schemas/FeeCard"},{"type":"null"}]},"provenance":{"$ref":"#/components/schemas/Provenance"}}},"ResidenceFeeItemListResponse":{"type":"object","additionalProperties":false,"required":["meta","context","data","links"],"properties":{"meta":{"$ref":"#/components/schemas/ResponseMeta"},"context":{"anyOf":[{"$ref":"#/components/schemas/ResidenceContext"},{"type":"null"}]},"data":{"type":"array","items":{"$ref":"#/components/schemas/ResidenceFeeItem"},"maxItems":50},"links":{"$ref":"#/components/schemas/Links"}}},"ResidenceRoute":{"type":"object","additionalProperties":false,"required":["route_id","title","description","payer","payer_note","validity","steps","paused_steps","requirements","provenance"],"properties":{"route_id":{"type":"string","enum":["employment","family","golden","remote","freelance","investor"]},"title":{"type":"string","maxLength":200},"description":{"type":"string","maxLength":500},"payer":{"type":["string","null"],"enum":["employer","sponsor","self",null]},"payer_note":{"type":["string","null"],"maxLength":500},"validity":{"type":["string","null"],"maxLength":500},"steps":{"type":"array","items":{"$ref":"#/components/schemas/FeeCard"},"maxItems":10},"paused_steps":{"type":"array","items":{"type":"object","additionalProperties":false,"required":["step_id","title","authority","url","paused_since"],"properties":{"step_id":{"type":"string","enum":["work_permit","entry_permit","residence","renewal"]},"title":{"type":"string","maxLength":200},"authority":{"type":["string","null"],"maxLength":200},"url":{"type":["string","null"],"format":"uri","maxLength":2000},"paused_since":{"anyOf":[{"$ref":"#/components/schemas/CalendarDate"},{"type":"null"}]}}},"maxItems":10},"requirements":{"type":"array","items":{"type":"object","additionalProperties":false,"required":["requirement_id","quote"],"properties":{"requirement_id":{"$ref":"#/components/schemas/Code"},"quote":{"type":"string","maxLength":1000}}},"maxItems":20},"provenance":{"$ref":"#/components/schemas/Provenance"}}},"ResidenceRouteListResponse":{"type":"object","additionalProperties":false,"required":["meta","context","data","links"],"properties":{"meta":{"$ref":"#/components/schemas/ResponseMeta"},"context":{"anyOf":[{"$ref":"#/components/schemas/ResidenceContext"},{"type":"null"}]},"data":{"type":"array","items":{"$ref":"#/components/schemas/ResidenceRoute"},"maxItems":50},"links":{"$ref":"#/components/schemas/Links"}}},"ResidenceRouteResponse":{"type":"object","additionalProperties":false,"required":["meta","data","links"],"properties":{"context":{"$ref":"#/components/schemas/ResidenceContext"},"meta":{"$ref":"#/components/schemas/ResponseMeta"},"data":{"anyOf":[{"$ref":"#/components/schemas/ResidenceRoute"},{"type":"null"}]},"links":{"$ref":"#/components/schemas/Links"}}},"ResponseMeta":{"type":"object","additionalProperties":false,"required":["api_version","content_language","generated_at","currency","attribution","disclaimer","dataset","page"],"properties":{"api_version":{"const":"2"},"content_language":{"type":"string","enum":["en","ar","es"],"description":"Language actually used for labels, notices and errors (same as the Content-Language header; visible to MCP clients). Phase 1 serves English. Translation scope (later phases): API labels, notices and error texts only, and only once a reviewed translation exists; source facts are never translated (KHDA school names and grade labels, official quotes, store titles, source and licence texts stay as published). Without an approved translation the answer falls back to en and says so in Content-Language / meta.content_language; no ar/es completeness is promised."},"generated_at":{"$ref":"#/components/schemas/Timestamp"},"currency":{"const":"AED","description":"Every *_aed field is in UAE dirham as reported by the source or computed by the documented formula, with no implied VAT treatment (stated only where the source or the calculation declares it). Other currencies are named explicitly (e.g. relocation home figures)."},"attribution":{"type":"string","maxLength":2000,"description":"Text to show with the figures (cite as \"Source: Brainy Prices, prices.brainy.ae, <date>; data from …\")."},"disclaimer":{"type":["string","null"],"maxLength":1000},"dataset":{"$ref":"#/components/schemas/DatasetMeta"},"page":{"anyOf":[{"$ref":"#/components/schemas/PageMeta"},{"type":"null"}]}}},"SaleMedian":{"type":"object","description":"Registered sales (DLD open data).","additionalProperties":false,"required":["zone_id","zone_name","property_type","bedrooms","market","transactions","median_price_aed","p25_price_aed","p75_price_aed","median_aed_per_sqft","p25_aed_per_sqft","p75_aed_per_sqft","provenance"],"properties":{"zone_id":{"$ref":"#/components/schemas/RecordId"},"zone_name":{"type":"string","maxLength":200},"property_type":{"type":"string","enum":["apartment","villa"]},"bedrooms":{"type":"integer","minimum":0,"maximum":10},"market":{"type":"string","enum":["ready","off_plan"]},"transactions":{"type":["integer","null"],"minimum":0},"median_price_aed":{"$ref":"#/components/schemas/AmountAedOrNull"},"p25_price_aed":{"$ref":"#/components/schemas/AmountAedOrNull"},"p75_price_aed":{"$ref":"#/components/schemas/AmountAedOrNull"},"median_aed_per_sqft":{"$ref":"#/components/schemas/AmountAedOrNull"},"p25_aed_per_sqft":{"$ref":"#/components/schemas/AmountAedOrNull"},"p75_aed_per_sqft":{"$ref":"#/components/schemas/AmountAedOrNull"},"provenance":{"$ref":"#/components/schemas/Provenance"}}},"SaleMedianListResponse":{"type":"object","additionalProperties":false,"required":["meta","data","links"],"properties":{"context":{"type":"object","additionalProperties":false,"required":["zone","rents","sales"],"properties":{"zone":{"$ref":"#/components/schemas/HousingZone"},"rents":{"type":"array","items":{"$ref":"#/components/schemas/RentMedian"}},"sales":{"type":"array","items":{"$ref":"#/components/schemas/SaleMedian"}}}},"meta":{"$ref":"#/components/schemas/ResponseMeta"},"data":{"type":"array","items":{"$ref":"#/components/schemas/SaleMedian"},"maxItems":50},"links":{"$ref":"#/components/schemas/Links"}}},"School":{"type":"object","description":"KHDA tuition as published (tuition only; transport, uniforms, books and discounts excluded).","additionalProperties":false,"required":["school_id","name","area","curricula","rating","academic_year","fees","annual_fee_range","grade_fee_aed","website","source_url","distance_km","location_approximate","bus","uniforms_status","open_in_browser","provenance"],"properties":{"school_id":{"$ref":"#/components/schemas/RecordId"},"name":{"type":"string","maxLength":300},"area":{"type":["string","null"],"maxLength":120},"curricula":{"type":"array","items":{"type":"string","maxLength":80},"maxItems":10},"rating":{"type":["string","null"],"maxLength":40,"description":"Inspection rating label exactly as published by KHDA (preserved, not translated)."},"academic_year":{"type":["string","null"],"maxLength":20},"fees":{"type":"array","items":{"$ref":"#/components/schemas/GradeFee"},"maxItems":30},"annual_fee_range":{"anyOf":[{"$ref":"#/components/schemas/AedRange"},{"type":"null"}]},"grade_fee_aed":{"$ref":"#/components/schemas/AmountAedOrNull","description":"Fee of the `grade` filter, when given."},"website":{"type":["string","null"],"format":"uri","maxLength":2000},"source_url":{"type":["string","null"],"format":"uri","maxLength":2000},"distance_km":{"type":["number","null"],"minimum":0},"location_approximate":{"type":["boolean","null"]},"bus":{"anyOf":[{"$ref":"#/components/schemas/SchoolBus"},{"type":"null"}]},"uniforms_status":{"type":"string","enum":["available","paused","not_published"]},"open_in_browser":{"type":"string","format":"uri","maxLength":2000},"provenance":{"$ref":"#/components/schemas/Provenance"}}},"SchoolBus":{"type":"object","additionalProperties":false,"required":["operator","academic_year","zones","source_url"],"properties":{"operator":{"type":"string","maxLength":200},"academic_year":{"type":"string","maxLength":20},"zones":{"type":"array","items":{"type":"object","additionalProperties":false,"required":["zone","annual_aed","areas"],"properties":{"zone":{"type":"integer","minimum":1},"annual_aed":{"$ref":"#/components/schemas/AmountAed","description":"Per child per academic year as published."},"areas":{"type":"array","items":{"type":"string","maxLength":120},"maxItems":100}}},"maxItems":20},"source_url":{"type":"string","format":"uri","maxLength":2000}}},"SchoolFeePolicy":{"type":"object","additionalProperties":false,"description":"School fee rules announced after the KHDA open-data year (for example a fee cap or no increase), each with its publisher, announcement date, primary URL and verbatim quote. They are not applied to any published fee.","required":["note","rules"],"properties":{"note":{"type":["string","null"],"maxLength":1000},"rules":{"type":"array","minItems":1,"maxItems":10,"items":{"type":"object","additionalProperties":false,"required":["id","academic_year","kind","cap_pct","announced","publisher","url","quote","summary"],"properties":{"id":{"$ref":"#/components/schemas/RecordId"},"academic_year":{"type":"string","pattern":"^20\\d\\d-20\\d\\d$"},"kind":{"type":"string","enum":["cap","no-increase"],"description":"As published. cap: increases allowed up to cap_pct; no-increase: no fee increase for that academic year."},"cap_pct":{"type":["number","null"],"exclusiveMinimum":0,"maximum":100,"description":"Maximum increase in percent; null unless kind is cap."},"announced":{"$ref":"#/components/schemas/CalendarDate"},"publisher":{"type":"string","maxLength":200},"url":{"type":"string","format":"uri","maxLength":2000},"quote":{"type":"string","maxLength":2000,"description":"Verbatim quote from the announcement."},"summary":{"type":"string","maxLength":500,"description":"One sentence that names the publisher and the announcement date."}}}}}},"SchoolListResponse":{"type":"object","additionalProperties":false,"required":["meta","data","links"],"properties":{"fee_policy":{"description":"Fee rules announced after the KHDA open-data year, quoted from the publisher with date and primary URL. Context only; never applied to any KHDA figure. Null when not published or not valid.","anyOf":[{"$ref":"#/components/schemas/SchoolFeePolicy"},{"type":"null"}]},"context":{"type":"object","additionalProperties":false,"required":["search"],"properties":{"search":{"type":"object","additionalProperties":false,"required":["total_schools","near","radius_km","unlocated"],"properties":{"displayed_count":{"type":"integer","minimum":0},"remaining_count":{"type":"integer","minimum":0},"returned_remaining_count":{"type":"integer","minimum":0},"total_schools":{"type":"integer","minimum":0},"near":{"type":["string","null"]},"radius_km":{"type":["number","null"]},"unlocated":{"type":["integer","null"],"minimum":0}}}}},"meta":{"$ref":"#/components/schemas/ResponseMeta"},"data":{"type":"array","items":{"$ref":"#/components/schemas/School"},"maxItems":50},"links":{"$ref":"#/components/schemas/Links"}}},"SchoolResponse":{"type":"object","additionalProperties":false,"required":["meta","data","links"],"properties":{"fee_policy":{"description":"Fee rules announced after the KHDA open-data year, quoted from the publisher with date and primary URL. Context only; never applied to any KHDA figure. Null when not published or not valid.","anyOf":[{"$ref":"#/components/schemas/SchoolFeePolicy"},{"type":"null"}]},"context":{"type":"object","additionalProperties":false,"required":["search"],"properties":{"search":{"type":"object","additionalProperties":false,"required":["total_schools","near","radius_km","unlocated"],"properties":{"displayed_count":{"type":"integer","minimum":0},"remaining_count":{"type":"integer","minimum":0},"returned_remaining_count":{"type":"integer","minimum":0},"total_schools":{"type":"integer","minimum":0},"near":{"type":["string","null"]},"radius_km":{"type":["number","null"]},"unlocated":{"type":["integer","null"],"minimum":0}}}}},"meta":{"$ref":"#/components/schemas/ResponseMeta"},"data":{"anyOf":[{"$ref":"#/components/schemas/School"},{"type":"null"}]},"links":{"$ref":"#/components/schemas/Links"}}},"ShopperReport":{"type":"object","description":"Moderated shopper report (receipt). Not checked against the store website; no zone or quantity is published.","additionalProperties":false,"required":["report_id","product_id","store_id","purchased_on","unit_price_aed","promo","moderation_status","provenance"],"properties":{"report_id":{"type":"string","pattern":"^[a-z0-9]{12}$"},"product_id":{"$ref":"#/components/schemas/RecordId"},"store_id":{"$ref":"#/components/schemas/RecordId"},"purchased_on":{"$ref":"#/components/schemas/CalendarDate"},"unit_price_aed":{"$ref":"#/components/schemas/AmountAed","description":"Price of one pack from the receipt."},"promo":{"type":"boolean"},"moderation_status":{"const":"accepted","description":"Only moderated, accepted reports are published."},"provenance":{"$ref":"#/components/schemas/Provenance"}}},"ShopperReportListResponse":{"type":"object","additionalProperties":false,"required":["meta","data","links"],"properties":{"meta":{"$ref":"#/components/schemas/ResponseMeta"},"data":{"type":"array","items":{"$ref":"#/components/schemas/ShopperReport"},"maxItems":50},"links":{"$ref":"#/components/schemas/Links"}}},"Source":{"type":"object","description":"One upstream source and the terms under which its figures are shown.","additionalProperties":false,"required":["source_id","name","publisher","url","terms_url","license","attribution","status","paused_since","notice","dataset_ids"],"properties":{"source_id":{"$ref":"#/components/schemas/Code"},"name":{"type":"string","maxLength":300},"publisher":{"type":["string","null"],"maxLength":300},"url":{"type":["string","null"],"format":"uri","maxLength":2000},"terms_url":{"type":["string","null"],"format":"uri","maxLength":2000},"license":{"$ref":"#/components/schemas/License"},"attribution":{"type":"string","maxLength":2000,"description":"Exact attribution text to show with figures from this source."},"status":{"type":"string","enum":["ok","paused","unreadable","not_published"],"description":"paused: deliberately not shown (e.g. waiting for permission); unreadable: official page could not be read; not_published: no official figure exists."},"paused_since":{"anyOf":[{"$ref":"#/components/schemas/CalendarDate"},{"type":"null"}]},"notice":{"type":["string","null"],"maxLength":1000},"dataset_ids":{"type":"array","items":{"$ref":"#/components/schemas/Code"},"maxItems":20}}},"SourceDoc":{"type":"object","description":"Official document read, with the day it was read.","additionalProperties":false,"required":["title","url","accessed_on"],"properties":{"title":{"type":"string","maxLength":300},"url":{"type":"string","format":"uri","maxLength":2000},"accessed_on":{"anyOf":[{"$ref":"#/components/schemas/CalendarDate"},{"type":"null"}]}}},"SourceListResponse":{"type":"object","additionalProperties":false,"required":["meta","data","links"],"properties":{"meta":{"$ref":"#/components/schemas/ResponseMeta"},"data":{"type":"array","items":{"$ref":"#/components/schemas/Source"},"maxItems":50},"links":{"$ref":"#/components/schemas/Links"}}},"SourceLocator":{"type":"string","maxLength":2000,"pattern":"^https?://","description":"URL as recorded by the collector; it may be followed by a short note in parentheses (e.g. which tab of the page)."},"SourceResponse":{"type":"object","additionalProperties":false,"required":["meta","data","links"],"properties":{"meta":{"$ref":"#/components/schemas/ResponseMeta"},"data":{"$ref":"#/components/schemas/Source"},"links":{"$ref":"#/components/schemas/Links"}}},"StoreTotal":{"type":"object","additionalProperties":false,"required":["store_id","store_name","url","covered","of","subtotal_aed","fee_known","fee_min_aed","fee_max_aed","fee_partial","total_min_aed","total_max_aed","free","free_from_aed","free_from_inclusive","order_charge_aed","minimum_order_aed","below_minimum","shortfall_aed","ship_reason","unit","unit_price_aed","offer"],"properties":{"store_id":{"$ref":"#/components/schemas/RecordId"},"store_name":{"type":"string","maxLength":200},"url":{"type":["string","null"],"format":"uri","maxLength":2000},"covered":{"type":"integer","minimum":0},"of":{"type":"integer","minimum":0},"subtotal_aed":{"$ref":"#/components/schemas/AmountAed","description":"Products only."},"fee_known":{"type":"boolean"},"fee_min_aed":{"$ref":"#/components/schemas/AmountAedOrNull"},"fee_max_aed":{"$ref":"#/components/schemas/AmountAedOrNull"},"fee_partial":{"type":"boolean"},"total_min_aed":{"$ref":"#/components/schemas/AmountAedOrNull"},"total_max_aed":{"$ref":"#/components/schemas/AmountAedOrNull"},"free":{"type":"boolean"},"free_from_aed":{"$ref":"#/components/schemas/AmountAedOrNull"},"free_from_inclusive":{"type":"boolean"},"order_charge_aed":{"$ref":"#/components/schemas/AmountAedOrNull","description":"Fixed per-order charge included in the totals (e.g. bags)."},"minimum_order_aed":{"$ref":"#/components/schemas/AmountAedOrNull"},"below_minimum":{"type":"boolean"},"shortfall_aed":{"$ref":"#/components/schemas/AmountAedOrNull"},"ship_reason":{"type":["string","null"],"enum":["no_zone","outside_dubai","no_policy","policy_stale","policy_invalid","fee_below_threshold_unknown","checkout_unconfirmed",null]},"unit":{"type":["string","null"],"enum":["each","kg","l",null]},"unit_price_aed":{"$ref":"#/components/schemas/AmountAedOrNull","description":"Single-product mode only."},"offer":{"anyOf":[{"$ref":"#/components/schemas/OfferAt"},{"type":"null"}]}}},"TaxCountryModel":{"type":"object","description":"Which home-country tax models the relocation estimate supports, with their official sources. No personal data.","additionalProperties":false,"required":["iso2","name","currency","status","incomplete_reason","tax_year","tax_year_period","variants","sources","provenance"],"properties":{"iso2":{"type":"string","maxLength":2},"name":{"type":"string","maxLength":80},"currency":{"type":"string","maxLength":3},"status":{"type":"string","enum":["complete","incomplete"]},"incomplete_reason":{"type":["string","null"],"maxLength":3000},"tax_year":{"type":["string","null"],"maxLength":20},"tax_year_period":{"type":["string","null"],"maxLength":80},"variants":{"type":"array","items":{"type":"object","additionalProperties":false,"required":["variant_id","label"],"properties":{"variant_id":{"$ref":"#/components/schemas/Code"},"label":{"type":"string","maxLength":200}}},"maxItems":10},"sources":{"type":"array","items":{"type":"object","additionalProperties":false,"required":["title","url","accessed_on"],"properties":{"title":{"type":"string","maxLength":300},"url":{"type":"string","format":"uri","maxLength":2000},"accessed_on":{"anyOf":[{"$ref":"#/components/schemas/CalendarDate"},{"type":"null"}]}}},"maxItems":30},"provenance":{"$ref":"#/components/schemas/Provenance"}}},"TaxCountryModelListResponse":{"type":"object","additionalProperties":false,"required":["meta","data","links"],"properties":{"meta":{"$ref":"#/components/schemas/ResponseMeta"},"data":{"type":"array","items":{"$ref":"#/components/schemas/TaxCountryModel"},"maxItems":50},"links":{"$ref":"#/components/schemas/Links"}}},"TaxiBand":{"type":"object","additionalProperties":false,"required":["from","to","aed"],"properties":{"from":{"$ref":"#/components/schemas/TimeOfDay"},"to":{"$ref":"#/components/schemas/TimeOfDay"},"aed":{"$ref":"#/components/schemas/AmountAed","description":"Starting fare in this band."}}},"TaxiFares":{"type":"object","additionalProperties":false,"required":["operator_name","street_hail_starting_aed","ehail_starting_aed","per_km_aed","minimum_fare_aed","waiting_per_minute_aed","sharjah_surcharge_aed","trip","abu_dhabi","not_included","provenance"],"properties":{"sharjah_taxi_notice":{"type":["string","null"],"maxLength":1000},"public_transport":{"type":"array","items":{"$ref":"#/components/schemas/PublicTransportFare"}},"operator_name":{"type":"string","maxLength":200},"street_hail_starting_aed":{"type":"array","items":{"$ref":"#/components/schemas/TaxiBand"},"maxItems":6},"ehail_starting_aed":{"type":"object","additionalProperties":false,"required":["weekdays","friday","weekends"],"properties":{"weekdays":{"type":"array","items":{"$ref":"#/components/schemas/TaxiBand"},"maxItems":12},"friday":{"type":"array","items":{"$ref":"#/components/schemas/TaxiBand"},"maxItems":12},"weekends":{"type":"array","items":{"$ref":"#/components/schemas/TaxiBand"},"maxItems":12}}},"per_km_aed":{"$ref":"#/components/schemas/AmountAedOrNull"},"minimum_fare_aed":{"type":"object","additionalProperties":false,"required":["street","ehail"],"properties":{"street":{"$ref":"#/components/schemas/AmountAedOrNull"},"ehail":{"$ref":"#/components/schemas/AmountAedOrNull"}}},"waiting_per_minute_aed":{"$ref":"#/components/schemas/AmountAedOrNull"},"sharjah_surcharge_aed":{"$ref":"#/components/schemas/AmountAedOrNull"},"trip":{"anyOf":[{"$ref":"#/components/schemas/TaxiTrip"},{"type":"null"}]},"abu_dhabi":{"type":"object","additionalProperties":false,"required":["status","notice","paused_since"],"properties":{"status":{"type":"string","enum":["ok","paused"]},"notice":{"type":["string","null"],"maxLength":500},"paused_since":{"anyOf":[{"$ref":"#/components/schemas/CalendarDate"},{"type":"null"}]}}},"not_included":{"type":["string","null"],"maxLength":500},"provenance":{"$ref":"#/components/schemas/Provenance"}}},"TaxiFaresResponse":{"type":"object","additionalProperties":false,"required":["meta","data","links"],"properties":{"meta":{"$ref":"#/components/schemas/ResponseMeta"},"data":{"anyOf":[{"$ref":"#/components/schemas/TaxiFares"},{"type":"null"}]},"links":{"$ref":"#/components/schemas/Links"}}},"TaxiTrip":{"type":"object","additionalProperties":false,"required":["km","booking","wait_minutes","to_sharjah","starting_aed","distance_aed","waiting_aed","surcharge_aed","minimum_aed","minimum_applied","total_aed"],"properties":{"km":{"type":"number","minimum":0.1,"maximum":300},"booking":{"type":"string","enum":["street_day","street_night","ehail_offpeak","ehail_peak","ehail_night"]},"wait_minutes":{"type":"number","minimum":0,"maximum":180},"to_sharjah":{"type":"boolean"},"starting_aed":{"$ref":"#/components/schemas/AmountAed"},"distance_aed":{"$ref":"#/components/schemas/AmountAed"},"waiting_aed":{"$ref":"#/components/schemas/AmountAed"},"surcharge_aed":{"$ref":"#/components/schemas/AmountAed"},"minimum_aed":{"$ref":"#/components/schemas/AmountAed"},"minimum_applied":{"type":"boolean"},"total_aed":{"$ref":"#/components/schemas/AmountAed","description":"Published tariff only; Salik and app surcharges excluded."}}},"TelecomPlan":{"type":"object","additionalProperties":false,"required":["plan_id","operator","category","name","status","excluded_reason","price_aed_per_month","price_basis","regular_aed_per_month","promo_months","upfront_aed","days","aed_per_day","data_gb","unlimited_data","local_minutes","intl_minutes","speed_mbps","contract_months","aed_per_gb","url","citation","provenance"],"properties":{"plan_id":{"$ref":"#/components/schemas/RecordId"},"operator":{"type":"string","maxLength":80},"category":{"type":"string","enum":["mobile_postpaid","mobile_prepaid","home_internet"]},"name":{"type":"string","maxLength":200},"status":{"type":"string","enum":["ranked","unverified","excluded"],"description":"ranked: price shown and comparable per month; unverified: price not shown on a page we can read (never ranked); excluded: not comparable per month (e.g. tourist SIM by days)."},"excluded_reason":{"type":["string","null"],"maxLength":300},"price_aed_per_month":{"$ref":"#/components/schemas/AmountAedOrNull","description":"Per month. VAT treatment as stated by price_basis and the dataset basis published by the source (today: 5% VAT included)."},"price_basis":{"type":["string","null"],"enum":["published_with_vat","calculated_vat_added",null]},"regular_aed_per_month":{"$ref":"#/components/schemas/AmountAedOrNull"},"promo_months":{"type":["integer","null"],"minimum":0},"upfront_aed":{"$ref":"#/components/schemas/AmountAedOrNull"},"days":{"type":["integer","null"],"minimum":1},"aed_per_day":{"$ref":"#/components/schemas/AmountAedOrNull"},"data_gb":{"type":["number","null"],"minimum":0},"unlimited_data":{"type":["boolean","null"]},"local_minutes":{"type":["number","null"],"minimum":0},"intl_minutes":{"type":["number","null"],"minimum":0},"speed_mbps":{"type":["number","null"],"minimum":0},"contract_months":{"type":["number","null"],"minimum":0},"aed_per_gb":{"$ref":"#/components/schemas/AmountAedOrNull"},"url":{"type":["string","null"],"format":"uri","maxLength":2000},"citation":{"type":["string","null"],"maxLength":1000},"provenance":{"$ref":"#/components/schemas/Provenance"}}},"TelecomPlanListResponse":{"type":"object","additionalProperties":false,"required":["meta","data","links"],"properties":{"meta":{"$ref":"#/components/schemas/ResponseMeta"},"data":{"type":"array","items":{"$ref":"#/components/schemas/TelecomPlan"},"maxItems":50},"links":{"$ref":"#/components/schemas/Links"}}},"TelecomPlanResponse":{"type":"object","additionalProperties":false,"required":["meta","data","links"],"properties":{"meta":{"$ref":"#/components/schemas/ResponseMeta"},"data":{"anyOf":[{"$ref":"#/components/schemas/TelecomPlan"},{"type":"null"}]},"links":{"$ref":"#/components/schemas/Links"}}},"TimeOfDay":{"type":"string","pattern":"^([01][0-9]|2[0-3]):[0-5][0-9]$","description":"Local Dubai time of day HH:MM (UTC+4), as printed by the source. Not an instant."},"TimeRange":{"type":"object","description":"Local time range; `to` may be earlier than `from` when it crosses midnight.","additionalProperties":false,"required":["from","to"],"properties":{"from":{"$ref":"#/components/schemas/TimeOfDay"},"to":{"$ref":"#/components/schemas/TimeOfDay"}}},"Timestamp":{"type":"string","format":"date-time","description":"RFC 3339 instant. Used by every *_at field and only when a system actually logged that instant (a midnight placeholder is not an instant)."},"TodayContext":{"type":"object","additionalProperties":false,"required":["date","lead","post","image"],"properties":{"date":{"$ref":"#/components/schemas/CalendarDate"},"lead":{"anyOf":[{"$ref":"#/components/schemas/Code"},{"type":"null"}]},"post":{"type":["string","null"],"maxLength":600,"description":"Ready-to-share text (may contain line breaks)."},"image":{"type":["string","null"],"format":"uri","maxLength":2000}}},"TodayFuelValues":{"type":"object","additionalProperties":false,"required":["month","super98","special95","eplus91","diesel","previous_month","previous_super98","pct_super98"],"properties":{"month":{"$ref":"#/components/schemas/YearMonth"},"super98":{"$ref":"#/components/schemas/AmountAed","description":"Per litre."},"special95":{"$ref":"#/components/schemas/AmountAed","description":"Per litre."},"eplus91":{"$ref":"#/components/schemas/AmountAed","description":"Per litre."},"diesel":{"$ref":"#/components/schemas/AmountAed","description":"Per litre."},"previous_month":{"$ref":"#/components/schemas/YearMonth"},"previous_super98":{"$ref":"#/components/schemas/AmountAed","description":"Per litre."},"pct_super98":{"type":"number"}}},"TodayItem":{"type":"object","additionalProperties":false,"required":["item_id","text","url","source_label","observed_on","values","provenance"],"properties":{"item_id":{"type":"string","enum":["fuel","rent","tax_savings","school_fees"]},"text":{"type":"string","maxLength":1000},"url":{"type":["string","null"],"format":"uri","maxLength":2000},"source_label":{"type":["string","null"],"maxLength":500},"observed_on":{"anyOf":[{"$ref":"#/components/schemas/CalendarDate"},{"type":"null"}]},"values":{"oneOf":[{"$ref":"#/components/schemas/TodayFuelValues"},{"$ref":"#/components/schemas/TodayRentValues"},{"$ref":"#/components/schemas/TodayTaxSavingsValues"},{"$ref":"#/components/schemas/TodaySchoolFeesValues"}]},"provenance":{"$ref":"#/components/schemas/Provenance"}}},"TodayItemListResponse":{"type":"object","additionalProperties":false,"required":["meta","context","data","links"],"properties":{"meta":{"$ref":"#/components/schemas/ResponseMeta"},"context":{"anyOf":[{"$ref":"#/components/schemas/TodayContext"},{"type":"null"}]},"data":{"type":"array","items":{"$ref":"#/components/schemas/TodayItem"},"maxItems":50},"links":{"$ref":"#/components/schemas/Links"}}},"TodayRentValues":{"type":"object","additionalProperties":false,"required":["zone","zone_id","bedrooms","median_annual_aed","p25_annual_aed","p75_annual_aed","contracts","from","to"],"properties":{"zone":{"type":"string","maxLength":200},"zone_id":{"$ref":"#/components/schemas/RecordId"},"bedrooms":{"type":"integer","minimum":0},"median_annual_aed":{"$ref":"#/components/schemas/AmountAed"},"p25_annual_aed":{"$ref":"#/components/schemas/AmountAedOrNull"},"p75_annual_aed":{"$ref":"#/components/schemas/AmountAedOrNull"},"contracts":{"type":"integer","minimum":0},"from":{"$ref":"#/components/schemas/CalendarDate"},"to":{"$ref":"#/components/schemas/CalendarDate"}}},"TodaySchoolFeesValues":{"type":"object","additionalProperties":false,"required":["schools","lowest_aed","highest_aed","academic_year"],"properties":{"schools":{"type":"integer","minimum":0},"lowest_aed":{"$ref":"#/components/schemas/AmountAed","description":"Per year."},"highest_aed":{"$ref":"#/components/schemas/AmountAed","description":"Per year."},"academic_year":{"type":"string","maxLength":20}}},"TodayTaxSavingsValues":{"type":"object","additionalProperties":false,"required":["country","currency","saving_local","saving_aed","statistic","period_label","tax_year"],"properties":{"country":{"type":"string","maxLength":2},"currency":{"type":"string","maxLength":3},"saving_local":{"type":"number"},"saving_aed":{"$ref":"#/components/schemas/AmountAed","description":"Per year."},"statistic":{"type":"string","maxLength":500},"period_label":{"type":"string","maxLength":40},"tax_year":{"type":"string","maxLength":20}}},"TollTariff":{"type":"object","additionalProperties":false,"required":["operator_id","operator_name","emirate","status","notice","paused_since","effective_on","gate_count","gates_named","schedule","notes","provenance"],"properties":{"operator_id":{"type":"string","enum":["salik","darb"]},"operator_name":{"type":"string","maxLength":300},"emirate":{"type":"string","enum":["dubai","abu_dhabi","sharjah","ajman","umm_al_quwain","ras_al_khaimah","fujairah"]},"status":{"type":"string","enum":["ok","paused"]},"notice":{"type":["string","null"],"maxLength":500},"paused_since":{"anyOf":[{"$ref":"#/components/schemas/CalendarDate"},{"type":"null"}]},"effective_on":{"anyOf":[{"$ref":"#/components/schemas/CalendarDate"},{"type":"null"}]},"gate_count":{"type":["integer","null"],"minimum":0},"gates_named":{"type":"array","items":{"type":"object","additionalProperties":false,"required":["name","road","opened_on"],"properties":{"name":{"type":"string","maxLength":200},"road":{"type":["string","null"],"maxLength":200},"opened_on":{"anyOf":[{"$ref":"#/components/schemas/CalendarDate"},{"type":"null"}]}}},"maxItems":50},"schedule":{"type":"array","items":{"type":"object","additionalProperties":false,"required":["days","period","hours","aed_per_crossing"],"properties":{"days":{"type":"string","enum":["mon_sat","sun"]},"period":{"type":"string","enum":["peak","off_peak","late_night"]},"hours":{"type":"array","items":{"$ref":"#/components/schemas/TimeRange"},"maxItems":4},"aed_per_crossing":{"$ref":"#/components/schemas/AmountAed","description":"Per gate crossing."}}},"maxItems":12},"notes":{"type":"array","items":{"type":"string","maxLength":1000},"maxItems":10},"provenance":{"$ref":"#/components/schemas/Provenance"}}},"TollTariffListResponse":{"type":"object","additionalProperties":false,"required":["meta","data","links"],"properties":{"context":{"$ref":"#/components/schemas/TransportReferenceContext"},"meta":{"$ref":"#/components/schemas/ResponseMeta"},"data":{"type":"array","items":{"$ref":"#/components/schemas/TollTariff"},"maxItems":50},"links":{"$ref":"#/components/schemas/Links"}}},"UniformItem":{"type":"object","additionalProperties":false,"required":["item_id","name","supplier_id","price_aed","price_kind","availability","grades","sizes_count","url","plain_alternative","provenance"],"properties":{"item_id":{"$ref":"#/components/schemas/RecordId"},"name":{"type":"string","maxLength":300},"supplier_id":{"$ref":"#/components/schemas/RecordId"},"price_aed":{"$ref":"#/components/schemas/AmountAedOrNull"},"price_kind":{"type":"string","enum":["catalogue","from","unverified"]},"availability":{"type":"string","enum":["in_stock","out_of_stock","unknown"]},"grades":{"type":"array","items":{"type":"string","maxLength":30},"maxItems":30},"sizes_count":{"type":"integer","minimum":0},"url":{"type":["string","null"],"format":"uri","maxLength":2000},"plain_alternative":{"type":["object","null"],"additionalProperties":false,"required":["from_aed","store_name","offers"],"properties":{"from_aed":{"$ref":"#/components/schemas/AmountAed"},"store_name":{"type":"string","maxLength":200},"offers":{"type":"integer","minimum":0}}},"provenance":{"$ref":"#/components/schemas/Provenance"}}},"UniformItemListResponse":{"type":"object","additionalProperties":false,"required":["meta","data","links"],"properties":{"meta":{"$ref":"#/components/schemas/ResponseMeta"},"data":{"type":"array","items":{"$ref":"#/components/schemas/UniformItem"},"maxItems":50},"links":{"$ref":"#/components/schemas/Links"}}},"YearMonth":{"type":"string","pattern":"^[0-9]{4}-(0[1-9]|1[0-2])$","description":"Calendar month YYYY-MM."}},"parameters":{"PageSize":{"name":"page_size","in":"query","required":false,"schema":{"type":"integer","minimum":1,"maximum":50,"default":20},"description":"Rows per page (default 20, max 50)."},"Cursor":{"name":"cursor","in":"query","required":false,"schema":{"type":"string","minLength":1,"maxLength":512},"description":"Opaque meta.page.next_cursor of the previous page. Bound to the dataset snapshot, filters, sort, page_size, locale and an expiry; mismatch ⇒ 400 cursor_invalid; expired or snapshot no longer served ⇒ 409 cursor_expired / snapshot_changed. All pages of one query together never exceed the result window of 200 rows (400 window_exceeded). Not a bulk export."},"AcceptLanguage":{"name":"Accept-Language","in":"header","required":false,"schema":{"type":"string","maxLength":200},"description":"Optional HTTP language preferences (RFC 9110), e.g. \"ar, en;q=0.8\". Supported: en (default and fallback), ar, es. The chosen language is part of the ETag and of the cursor binding. Phase 1 serves English. Translation scope (later phases): API labels, notices and error texts only, and only once a reviewed translation exists; source facts are never translated (KHDA school names and grade labels, official quotes, store titles, source and licence texts stay as published). Without an approved translation the answer falls back to en and says so in Content-Language / meta.content_language; no ar/es completeness is promised."},"IfNoneMatch":{"name":"If-None-Match","in":"header","required":false,"schema":{"type":"string","maxLength":200},"description":"ETag of a previous answer. A 304 still counts against the quota."}},"headers":{"ETag":{"description":"Proposed strong validator of the dataset version, the query and the chosen language (v1 sends none: evidence fuel_conditional.json got 200 to If-None-Match).","schema":{"type":"string"}},"ContentLanguage":{"description":"Language actually served (en, ar or es); en when no approved translation exists for the requested language.","schema":{"type":"string","enum":["en","ar","es"]}},"VaryAcceptLanguage":{"description":"Always \"Accept-Language\" on data answers: the representation depends on the requested language (caching stays private).","schema":{"type":"string","const":"Accept-Language"}},"CacheControlData":{"description":"Data GET: private, max-age=30 for anonymous and keyed calls (same value as v1 today). A cached or 304 answer is not a way around the quota.","schema":{"type":"string"}},"CacheControlNoStore":{"description":"POST calculations, access lifecycle and errors: no-store.","schema":{"type":"string"}},"RateLimitPolicy":{"description":"IETF draft-ietf-httpapi-ratelimit-headers-11 (May 2026) RateLimit-Policy. Policies: \"anon-minute\";q=30;w=60 and \"anon-day\";q=500;w=86400 per IP (IPv6 /64); \"key-minute\";q=60;w=60 and \"key-day\";q=1500;w=86400 per confirmed account, shared by its at most 2 active keys (rotation does not renew the quota). Enforced across all instances (shared counter), free, no paid tier. Every call to a data operation counts, including 304, paused answers and validation errors. Anonymous counters are keyed by HMAC(shared secret, IP or IPv6 /64 + UTC window) and expire at window end + 48 h; no raw IP, request body or token is stored in quota counters or logs. Semantics owned by ACCESS.md.","schema":{"type":"string"}},"RateLimit":{"description":"IETF draft-11 RateLimit: remaining quota r and seconds to reset t for the policy named. Not the legacy X-RateLimit-Limit/Remaining. Never carries an account id, key id or e-mail.","schema":{"type":"string"}},"RetryAfter":{"description":"Seconds to wait. Sent only on 429 and on a genuine outage (503); never on a deliberate pause.","schema":{"type":"integer","minimum":0}}},"responses":{"BadRequest":{"description":"Invalid parameters, filters, sort or window (codes invalid_arguments, invalid_query, filter_required, unsupported_sort, window_exceeded, invalid_json). Counts against the quota.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"headers":{"Cache-Control":{"$ref":"#/components/headers/CacheControlNoStore"},"Content-Language":{"$ref":"#/components/headers/ContentLanguage"},"RateLimit-Policy":{"$ref":"#/components/headers/RateLimitPolicy"},"RateLimit":{"$ref":"#/components/headers/RateLimit"}}},"NotFound":{"description":"Unknown resource or record id.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"headers":{"Cache-Control":{"$ref":"#/components/headers/CacheControlNoStore"},"Content-Language":{"$ref":"#/components/headers/ContentLanguage"},"RateLimit-Policy":{"$ref":"#/components/headers/RateLimitPolicy"},"RateLimit":{"$ref":"#/components/headers/RateLimit"}}},"PayloadTooLarge":{"description":"Request body over 24 KiB (body_too_large).","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"headers":{"Cache-Control":{"$ref":"#/components/headers/CacheControlNoStore"},"Content-Language":{"$ref":"#/components/headers/ContentLanguage"},"RateLimit-Policy":{"$ref":"#/components/headers/RateLimitPolicy"},"RateLimit":{"$ref":"#/components/headers/RateLimit"}}},"UnsupportedMediaType":{"description":"Body must be application/json (content_type).","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"headers":{"Cache-Control":{"$ref":"#/components/headers/CacheControlNoStore"},"Content-Language":{"$ref":"#/components/headers/ContentLanguage"},"RateLimit-Policy":{"$ref":"#/components/headers/RateLimitPolicy"},"RateLimit":{"$ref":"#/components/headers/RateLimit"}}},"Unprocessable":{"description":"Valid request that cannot be answered without guessing (country_not_supported: incomplete official tax data).","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"headers":{"Cache-Control":{"$ref":"#/components/headers/CacheControlNoStore"},"Content-Language":{"$ref":"#/components/headers/ContentLanguage"},"RateLimit-Policy":{"$ref":"#/components/headers/RateLimitPolicy"},"RateLimit":{"$ref":"#/components/headers/RateLimit"}}},"Unauthorized":{"description":"invalid_api_key / api_key_revoked: an X-API-Key was sent on a data call and is not valid (anonymous calls need no key); management_token_invalid: missing, expired or already used management token.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"headers":{"Cache-Control":{"$ref":"#/components/headers/CacheControlNoStore"},"Content-Language":{"$ref":"#/components/headers/ContentLanguage"},"RateLimit-Policy":{"$ref":"#/components/headers/RateLimitPolicy"},"RateLimit":{"$ref":"#/components/headers/RateLimit"}}},"TooManyRequests":{"description":"Quota exceeded (rate_limited).","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"headers":{"Cache-Control":{"$ref":"#/components/headers/CacheControlNoStore"},"Content-Language":{"$ref":"#/components/headers/ContentLanguage"},"RateLimit-Policy":{"$ref":"#/components/headers/RateLimitPolicy"},"RateLimit":{"$ref":"#/components/headers/RateLimit"},"Retry-After":{"$ref":"#/components/headers/RetryAfter"}}},"ServiceUnavailable":{"description":"Genuine outage, retryable with Retry-After: data_unavailable (no good copy of a non-paused dataset), quota_unavailable (shared quota store unreachable: fail closed), capacity (instance capacity), access_unavailable (key requests closed while the operator, mail provider or privacy notice are not defined: fail closed). A deliberate pause is never 503.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"headers":{"Cache-Control":{"$ref":"#/components/headers/CacheControlNoStore"},"Content-Language":{"$ref":"#/components/headers/ContentLanguage"},"RateLimit-Policy":{"$ref":"#/components/headers/RateLimitPolicy"},"RateLimit":{"$ref":"#/components/headers/RateLimit"},"Retry-After":{"$ref":"#/components/headers/RetryAfter"}}},"Conflict":{"description":"Data: the cursor expired or its snapshot is no longer served (cursor_expired, snapshot_changed): start again without cursor. Access: the account already has 2 active keys (key_limit_reached): revoke one first. Not retryable as is.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"headers":{"Cache-Control":{"$ref":"#/components/headers/CacheControlNoStore"},"Content-Language":{"$ref":"#/components/headers/ContentLanguage"},"RateLimit-Policy":{"$ref":"#/components/headers/RateLimitPolicy"},"RateLimit":{"$ref":"#/components/headers/RateLimit"}}},"NotModified":{"description":"Not modified (If-None-Match matched for the same query and language). Counts against the quota like any call.","headers":{"ETag":{"$ref":"#/components/headers/ETag"},"Cache-Control":{"$ref":"#/components/headers/CacheControlData"},"Content-Language":{"$ref":"#/components/headers/ContentLanguage"},"Vary":{"$ref":"#/components/headers/VaryAcceptLanguage"},"RateLimit-Policy":{"$ref":"#/components/headers/RateLimitPolicy"},"RateLimit":{"$ref":"#/components/headers/RateLimit"}}}},"securitySchemes":{"api_key":{"type":"apiKey","in":"header","name":"X-API-Key","description":"Optional free key for DATA calls only: 60/min and 1,500/day per confirmed account, shared by its at most 2 active keys (no extra quota for a second key; rotation does not renew it). Never sent in a URL; never accepted for key management (that uses a single-use management_token in the body). Anonymous access needs no key."}}},"x-status":"proposal","x-limits":{"anonymous":{"per_minute":30,"per_day":500,"key":"HMAC(shared secret, IP or IPv6 /64 + UTC window); counters expire at window end + 48 h"},"api_key":{"per_minute":60,"per_day":1500,"scope":"per confirmed account, shared by at most 2 active keys; rotation keeps the counters","header":"X-API-Key","rate_limit_headers":"policy names only; never an account id, key id or e-mail"},"counted":"every call to a data operation, including 304, paused answers and validation errors","mcp_discovery":"initialize/notifications/tools-list limits are separate (MCP.md, ACCESS.md) and not part of this document","request_body_max_bytes":24576,"response_max_bytes":262144,"compare_max_items":40,"pagination":{"style":"snapshot-bound opaque cursor","default_page_size":20,"max_page_size":50,"result_window":200,"legal_status":"on_hold"},"served_openapi_json":"without examples and x-evidence-* annotations (fits the 256 KiB response limit)"},"x-cache":{"data_get":"Cache-Control: private, max-age=30 (anonymous and keyed); ETag + If-None-Match → 304 (still counted)","post_and_access":"Cache-Control: no-store"},"x-v1-compatibility":{"base_url":"https://prices.brainy.ae/api/v1","openapi":"https://prices.brainy.ae/api/v1/openapi.json","status":"live","deprecation_header":"Deprecation (RFC 9745), future date set at v2 GA","deprecation_on":null,"sunset_on":null,"mapping":"each operation has x-v1-equivalent (null for new resources)"},"x-mcp":{"tools":"every public read-only data or calculation operation with x-mcp-tool: true becomes one tool named after its operationId; info, openapi and key lifecycle are excluded","owner":"MCP.md (root)"},"x-license-registry":{"dubai_open_data_licence":{"status":"confirmed","conditions":["attribution_required","share_alike"],"name":"Dubai Open Data Licence","url":"https://data.dubai/documents/20117/0/Open+Data+License+-+English+%284%29.pdf/b4116590-0abb-ee75-5d74-ca33eca79b64","applies_to":["dld_open_data"],"share_alike_scope":"Adapted Material only (clause 3.3.1); Work Product excluded (3.3.1, 3.5.1)","archived_text":"handoffs/property-20261001/research/open-data-license-en.txt","note":"Dubai Open Data Licence, archived English text handoffs/property-20261001/research/open-data-license-en.txt. Attribution (3.2.1): name the originator, keep its copyright notice and link the original material where reasonably practicable; no association of a Work Product with DLD or the Dubai Government (3.2.2). Share-alike applies ONLY to Adapted Material (translation, arrangement, adaptation or modification of the Information): it is made available under this same licence (3.3.1). A Work Product is not required to be (3.3.1) and may be licensed or sold (3.5.1). Third parties get no additional or different terms on this Information (3.1.1). It covers DLD figures only, not this API as a whole (no global SPDX)."},"khda_open_data_terms":{"status":"restricted","conditions":["attribution_required","non_commercial","preserve_original_data"],"url":"https://web.khda.gov.ae/en/Resources/KHDA-data-statistics","note":"KHDA open data: free of charge; not intended for profit. Attribute KHDA and preserve original source data.","applies_to":["khda_open_data"]},"odbl_1_0":{"status":"confirmed","conditions":["attribution_required","share_alike"],"name":"Open Database License (ODbL)","url":"https://opendatacommons.org/licenses/odbl/","applies_to":["osm_contributors","osm_osrm"]},"source_terms_unconfirmed":{"status":"unconfirmed","conditions":[],"note":"No terms confirmed: per-query display with attribution and a link only; no licence implied; no bulk redistribution."},"source_paused":{"status":"paused","conditions":[],"note":"Source deliberately not shown (permission requested or legal review): rows are not served, not even from the last good copy."},"mixed_sources":{"status":"unconfirmed","conditions":[],"note":"Derived figure (model or comparison): every input source keeps its own terms; see meta.dataset.sources."}},"x-datasets":{"grocery_catalog":"search_grocery_products, get_grocery_product, list_grocery_product_offers","grocery_delivery_rules":"list_grocery_stores, get_grocery_store","grocery_comparison":"compare_grocery_list","official_shop_prices":"list_official_shop_prices","shopper_reports":"list_shopper_reports","online_price_references":"find_online_price_references (paused)","school_fees":"search_schools, get_school","school_uniforms":"list_school_uniform_items (paused)","registered_property":"search_housing_zones, get_housing_zone, list_registered_rent_medians, list_registered_sale_medians","fuel_prices":"get_fuel_prices, list_fuel_price_history","road_tolls":"list_toll_tariffs (Darb paused)","parking_tariffs":"get_dubai_parking_tariffs","public_transport_fares":"list_public_transport_fares (nol paused)","taxi_fares":"get_taxi_fares","commute_model":"estimate_car_commute_cost","area_commutes":"list_area_commute_routes","dewa_tariff":"get_dewa_tariff, estimate_dewa_bill","telecom_plans":"search_telecom_plans, get_telecom_plan","area_living_costs":"rank_areas_by_living_cost","household_cost_profiles":"list_household_cost_profiles","emirate_costs":"list_emirate_living_costs, get_emirate_living_costs","relocation_estimate":"estimate_move_to_dubai (POST, private)","tax_models":"list_tax_country_models","family_index":"list_family_index_entries","fx_rates":"get_cbuae_fx_rates","residence_fees":"list_residence_routes, get_residence_route, list_common_residence_fees","company_setup":"list_free_zone_company_setups","health_insurance_rules":"list_health_insurance_rules","electronics_prices":"search_electronics_models (paused)","today":"get_today_highlights","sources":"list_data_sources, get_data_source"}}