# Emirates Auction — UAE government auctions: cars, number plates, property, surplus

> Every Emirates Auction sale this engine can read, with the site's own live lot count for the ones running right now. This is the calendar you call first: it tells you which `auction` slugs have lots today (measured 2026-10-06: motors 984, general-items 166, Fujairah plates 80, Dubai property 26, 261 plates in all), which are between sessions, and which are bidder-restricted.
> ReefAPI engine `emirates-auction` · 6 endpoints · clean JSON, no scraping or browsers to manage.

## How to call
- **Endpoint:** `POST https://api.reefapi.com/emirates-auction/v1/<action>` with a JSON body.
- **Auth:** header `x-api-key: <YOUR_REEFAPI_KEY>` — create one free (1,000 credits, no card): https://reefapi.com/signup
- **Response (every call):** `{ ok: boolean, data: ..., meta: { record_count, credits, ... }, error: { code, message } }` — branch on `ok`. Failed calls are free except verified SHEIN NOT_FOUND on product/detail and price (4 credits).
- **One key + one shared credit pool** across every ReefAPI API. Per-call credits are listed on each endpoint below.
- **Use it from an AI agent (MCP):** connect `https://api.reefapi.com/mcp` (remote streamable-http). Send the key as `Authorization: Bearer <key>`, or put it in the URL (`?key=<key>`) when the client has no header field, as ChatGPT does.

## Endpoints

### POST https://api.reefapi.com/emirates-auction/v1/auctions — 1 credit
Every Emirates Auction sale this engine can read, with the site's own live lot count for the ones running right now. This is the calendar you call first: it tells you which `auction` slugs have lots today (measured 2026-10-06: motors 984, general-items 166, Fujairah plates 80, Dubai property 26, 261 plates in all), which are between sessions, and which are bidder-restricted.

**Parameters:**
- `language` (enum, optional, default "en") — Language of the auction names. [one of: en, ar]

**Returns:** `{summary, rows[]}`. Each row: auction (the slug `search` takes), auction_type_id, title, lot_kind, classification, emirate, live_lot_count, is_live, url. `summary` carries the server time, the timezone and the total live lot count across all sales.

**Example request body:**
```json
{
  "language": "en"
}
```

### POST https://api.reefapi.com/emirates-auction/v1/search — 2 credits
Lots in one Emirates Auction sale, filtered the way the site itself filters them. Works across every lot kind: cars and machinery, number plates, property, police and customs surplus, jewellery, ships, space for rent. Every auction row carries the live high bid, the bid count, the minimum next bid and the close time resolved to Asia/Dubai (+04:00) alongside the source's raw string — because on an auction a bare 'price' is not an answer.

**Parameters:**
- `auction` (enum, required) — Which Emirates Auction sale to read. Either the slug (`motors`, `plates-sharjah`, `properties`, `general-items`, `jewellery-watches`, `for-rent` …) or the site's own numeric `AuctionTypeId` (motors = 4, Dubai property = 9, Sharjah plates = 23). Call the `auctions` action first to see which sales are live right now and how many lots each one holds. [one of: motors, motors-physical, properties, general-items, dubai-police-items, abu-dhabi-police, jewellery-watches, ships, dubai-customs, dubai-dates, expo, for-rent, etisalat-numbers, emirates-skywards, plates-abu-dhabi, plates-uae, plates-dubai, plates-jet-ski, plates-fujairah-online, plates-sharjah, plates-ajman, plates-rak, plates-uaq, plates-fujairah, plates-abu-dhabi-physical, plates-sharjah-physical, plates-ajman-physical]
- `query` (string, optional) — Free-text keyword, passed to the site's own `SearchKey`. It really filters (measured: `toyota` 107 of 984 vehicles, `rolls royce` 3). Arabic works too — the site is bilingual; set `language: ar` to get Arabic titles back as well. For plates, put the plate NUMBER here (or use the dedicated `plate_search` action).
- `sort` (enum, optional, default "ending_soonest") — Result order. `ending_soonest` is the site's own default. Only these orders are offered because only these were measured to actually reorder the result — the source accepts other column names and silently ignores them. [one of: ending_soonest, ending_latest, price_low, price_high, fewest_bids, most_bids, year_oldest, year_newest, featured]
- `page` (integer, optional, default 1) — 1-based page. Walking past the last page returns 0 rows with `has_more: false` rather than repeating the last page.
- `max_results` (integer, optional, default 40) — Rows per page, 1-200 (default 40).
- `price_min` (number, optional) — Lowest current price, in AED.
- `price_max` (number, optional) — Highest current price, in AED.
- `category_ids` (array, optional) — Numeric category ids from the `filters` action (`motors`: Bikes 2, Buses, Machinery…; `properties`: Apartment 2, Studio…). Use `filters` to get the ids with their live counts.
- `make_ids` (array, optional) — Vehicle make ids from `filters` (`motors` only). 104 makes at capture.
- `model_ids` (array, optional) — Vehicle model ids from `filters` (`motors` only). 430 models at capture.
- `type_ids` (array, optional) — Vehicle body-type ids from `filters` (`motors` only), e.g. Saloon, Van.
- `year_min` (integer, optional) — Oldest model year (`motors`). Live range at capture: 1967-2026.
- `year_max` (integer, optional) — Newest model year (`motors`).
- `mileage_min` (integer, optional) — Lowest odometer reading in km (`motors`).
- `mileage_max` (integer, optional) — Highest odometer reading in km (`motors`).
- `area_min` (number, optional) — Smallest built area in square FEET (`properties` — the site's own area filter is in ft²).
- `area_max` (number, optional) — Largest built area in square feet (`properties`).
- `emirates` (array, optional) — Emirate names exactly as the `filters` action lists them (`Dubai`, `Sharjah`, `Ajman`, `Abu Dhabi` …). Applies to `properties`, `for-rent` and the surplus sales; the plate sales are already per-emirate.
- `ownership` (array, optional) — Property ownership type (`properties` only). [one of: Freehold, GCC, Leasehold]
- `providers` (array, optional) — Seller / provider names as `filters` lists them (surplus sales).
- `plate_codes` (array, optional) — Plate code letters/digits as `filters` lists them (plate sales).
- `plate_digits` (array, optional) — How many digits the plate number has, e.g. `2`, `3`, `5` (plate sales).
- `plate_patterns` (array, optional) — The site's own plate pattern labels — X/Y/Z stand for repeating digit groups, so `XYZZZ` is one digit followed by a triple. 35 patterns were live in the Sharjah sale at capture. 🔴 Only a pattern the `filters` action lists for THAT sale matches: `XYZZZ` returned 5 plates, `XXYY` returned 0 across all ten sales.
- `end_dates` (array, optional) — Closing-day buckets exactly as the `filters` action publishes them (`EndDate` values such as `2026-10-06T00:00:00`, labelled Today / Tomorrow / …).
- `language` (enum, optional, default "en") — Language of the titles, categories and labels the source returns. [one of: en, ar]
- `verify_count` (boolean, optional, default false) — Ask the source's OWN facet endpoint how many lots the SAME filter matches and publish it as `summary.source_filtered_count`, with `count_disagrees: true` when the two numbers differ — a second witness on every filter. Off by default because that extra call carries the whole facet sheet (measured 38-93 KB on `motors`, 4-6 KB on the smaller sales).

**Returns:** `{summary, rows[]}`. `summary` = {auction, auction_type_id, auction_name, lot_kind, total_results, source_filtered_count, count_disagrees, returned, page, page_size, last_page, has_more, auction_running, auction_ends_at, server_time, timezone, utc_offset_hours, clock_drift_seconds, filters_applied, sort}. Each row: lot_id, lot_number, title, subtitle, url, auction, auction_type_id, auction_name, lot_kind, classification, sale_type, current_price (the LIVE HIGH BID on a bidding lot), price_display, price_basis, price_disagrees, currency, bid_count, min_increment, minimum_next_bid, start_price, ends_at (ISO-8601 with +04:00), ends_at_local (the source's raw naive string), ends_at_display, seconds_remaining, source_seconds_remaining, ended, starts_at, images[], tags[]. 🔴 SURFACE-SCOPED BY DESIGN: a plate DIRECT-SALE row carries no clock and no bid state (that sale has none), so bid_count / min_increment / minimum_next_bid / ends_at* / seconds_remaining / ended / images are absent there rather than null; `emirate` appears only where the source publishes it (property, rental) or where the sale itself is an emirate (plates). Vehicles add year, odometer_km, odometer_display, specs_region, has_360_view, view_360_url. Plates add plate_number, plate_code, plate_digits, plate_label, plate_status_code. Property adds property_type, area_sqm, area_sqft, bedrooms, bathrooms, living_rooms, office_rooms, address, latitude, longitude, ownership, reopen_price, description, subtitle, land_use, is_physical_auction. There is NO reserve flag: this source does not publish one (see `min_increment` / `minimum_next_bid` / `reopen_price` instead).

**Example request body:**
```json
{
  "auction": "motors",
  "sort": "ending_soonest",
  "max_results": 20
}
```

### POST https://api.reefapi.com/emirates-auction/v1/detail — 1 credit
The full sheet for one lot: the complete label/value spec table, every feature and condition bullet the sale publishes, the document links (a vehicle's inspection-report PDF, the terms), the whole photo gallery, the 360° viewer, the provider, the live bid state and the close time. Takes the `lot_id` and the `auction` a `search` row came from.

**Parameters:**
- `auction` (enum, required) — Which Emirates Auction sale to read. Either the slug (`motors`, `plates-sharjah`, `properties`, `general-items`, `jewellery-watches`, `for-rent` …) or the site's own numeric `AuctionTypeId` (motors = 4, Dubai property = 9, Sharjah plates = 23). Call the `auctions` action first to see which sales are live right now and how many lots each one holds. [one of: motors, motors-physical, properties, general-items, dubai-police-items, abu-dhabi-police, jewellery-watches, ships, dubai-customs, dubai-dates, expo, for-rent, etisalat-numbers, emirates-skywards, plates-abu-dhabi, plates-uae, plates-dubai, plates-jet-ski, plates-fujairah-online, plates-sharjah, plates-ajman, plates-rak, plates-uaq, plates-fujairah, plates-abu-dhabi-physical, plates-sharjah-physical, plates-ajman-physical]
- `lot_id` (integer, required) — The lot's `lot_id` from a `search` row (the site calls it `Id`). It is only valid inside its own auction, so `auction` must match the row you took it from. Lot ids are short-lived: a lot disappears when its auction closes, and closed auctions are not exposed, so take a fresh id from `search` or `ending_today` rather than reusing one.
- `language` (enum, optional, default "en") — Language of the labels and values. [one of: en, ar]

**Returns:** One object: every `search` row field, plus specs{} (the label/value table, paired per row so a blank value cannot shift into the next label), features[] {group, text}, documents[] {title, url}, images[], provider, yard, description, vat_applies, inspection_report_url, canonical_url, similar_lots[], deposit{} (the deposit bands the sale requires), and the same server_time / timezone witnesses as `search`.

### POST https://api.reefapi.com/emirates-auction/v1/plate_search — 3 credits
🔑 THE PLATE SURFACE. Search UAE vehicle number plates across EVERY plate sale Emirates Auction has open — Sharjah, Ajman, Ras Al Khaimah, Umm Al Quwain and Fujairah direct sale plus the Abu Dhabi / UAE / Dubai / jet-ski bidding auctions — in one call, by plate number, code, digit count or pattern. UAE plates are a market of their own (short and repeating-digit plates trade for millions of dirhams) and no other engine in this catalogue covers it. Sales with no session open are reported in `summary.auctions_closed`, not hidden.

**Parameters:**
- `query` (string, optional) — The plate number, or part of it. Blank returns every plate on sale, cheapest first.
- `plate_codes` (array, optional) — Plate code(s), e.g. `3`, `A`, `AA` (see `filters`).
- `plate_digits` (array, optional) — Digit count, e.g. `2` for a two-digit plate.
- `plate_patterns` (array, optional) — The site's pattern labels (`XYZZZ`, `XYZX`, `XYZYX` …). `filters` lists the live ones per sale.
- `price_min` (number, optional) — Lowest price in AED.
- `price_max` (number, optional) — Highest price in AED.
- `emirates` (array, optional) — Limit the fan-out to these emirates (`Sharjah`, `Ajman`, `Ras Al Khaimah`, `Umm Al Quwain`, `Fujairah`, `Abu Dhabi`, `Dubai`, `UAE`). Omit to search all.
- `sort` (enum, optional, default "price_low") — Order inside each sale before the results are merged. [one of: ending_soonest, ending_latest, price_low, price_high, fewest_bids, most_bids, year_oldest, year_newest, featured]
- `max_results` (integer, optional, default 60) — Total plates to return across all sales.
- `language` (enum, optional, default "en") — Language of the labels. [one of: en, ar]

**Returns:** `{summary, rows[]}`. `summary` = {total_results, returned, auctions_searched[], auctions_closed[] (answered with no lots at all = no session open), auctions_no_match[] (open, but nothing matched the filter — a DIFFERENT answer, never merged with the first), auctions_restricted[], auctions_unreached[], price_range, server_time, timezone, filters_applied}. Each row is a plate: plate_number, plate_code, plate_digits, plate_label, emirate, auction, auction_type_id, sale_type (`direct_sale` for the buy-now emirates, `bidding_auction` for the online sales), current_price, price_basis, currency, bid_count, min_increment, minimum_next_bid, ends_at, ends_at_local, seconds_remaining, url.

**Example request body:**
```json
{
  "plate_digits": [
    "5"
  ],
  "sort": "price_low",
  "max_results": 40
}
```

### POST https://api.reefapi.com/emirates-auction/v1/ending_today — 2 credits
Every lot closing TODAY across all of Emirates Auction, in one call, newest deadline first — the sweep a bidder actually runs each morning. Each row names its own sale (`auction_name`, `auction_type_id`) so a mixed feed stays attributable, and carries the same bid state and resolved close time as `search`. Measured 361-375 lots on 2026-10-06.

**Parameters:**
- `query` (string, optional) — Free-text keyword over the lots closing today.
- `price_min` (number, optional) — Lowest current price in AED.
- `price_max` (number, optional) — Highest current price in AED.
- `sort` (enum, optional, default "ending_soonest") — Result order. [one of: ending_soonest, ending_latest, price_low, price_high, fewest_bids, most_bids, year_oldest, year_newest, featured]
- `page` (integer, optional, default 1) — 1-based page.
- `max_results` (integer, optional, default 40) — Rows per page, 1-200.
- `language` (enum, optional, default "en") — Language of the titles. [one of: en, ar]

**Returns:** `{summary, rows[]}` in the same shape as `search`, with every row tagged with the sale it belongs to. `summary.min_end_date` is the next close of the day, both raw and resolved.

**Example request body:**
```json
{
  "sort": "ending_soonest",
  "max_results": 20
}
```

### POST https://api.reefapi.com/emirates-auction/v1/filters — 1 credit
The sale's own facet sheet AND its count oracle: every category, vehicle make and model, body type, plate code, plate pattern, digit count, emirate, ownership type, provider and closing-day bucket that is LIVE in that sale, each with the number of lots behind it, plus the price / year / mileage / area sliders. Pass the same filters you would pass to `search` and the answer is the source's own count for that exact combination — the cheap way to size a query before you page through it, and the ids `search` expects.

**Parameters:**
- `auction` (enum, required) — Which Emirates Auction sale to read. Either the slug (`motors`, `plates-sharjah`, `properties`, `general-items`, `jewellery-watches`, `for-rent` …) or the site's own numeric `AuctionTypeId` (motors = 4, Dubai property = 9, Sharjah plates = 23). Call the `auctions` action first to see which sales are live right now and how many lots each one holds. [one of: motors, motors-physical, properties, general-items, dubai-police-items, abu-dhabi-police, jewellery-watches, ships, dubai-customs, dubai-dates, expo, for-rent, etisalat-numbers, emirates-skywards, plates-abu-dhabi, plates-uae, plates-dubai, plates-jet-ski, plates-fujairah-online, plates-sharjah, plates-ajman, plates-rak, plates-uaq, plates-fujairah, plates-abu-dhabi-physical, plates-sharjah-physical, plates-ajman-physical]
- `query` (string, optional) — Free-text keyword, passed to the site's own `SearchKey`. It really filters (measured: `toyota` 107 of 984 vehicles, `rolls royce` 3). Arabic works too — the site is bilingual; set `language: ar` to get Arabic titles back as well. For plates, put the plate NUMBER here (or use the dedicated `plate_search` action).
- `price_min` (number, optional) — Lowest current price, in AED.
- `price_max` (number, optional) — Highest current price, in AED.
- `category_ids` (array, optional) — Numeric category ids from the `filters` action (`motors`: Bikes 2, Buses, Machinery…; `properties`: Apartment 2, Studio…). Use `filters` to get the ids with their live counts.
- `make_ids` (array, optional) — Vehicle make ids from `filters` (`motors` only). 104 makes at capture.
- `model_ids` (array, optional) — Vehicle model ids from `filters` (`motors` only). 430 models at capture.
- `type_ids` (array, optional) — Vehicle body-type ids from `filters` (`motors` only), e.g. Saloon, Van.
- `year_min` (integer, optional) — Oldest model year (`motors`). Live range at capture: 1967-2026.
- `year_max` (integer, optional) — Newest model year (`motors`).
- `mileage_min` (integer, optional) — Lowest odometer reading in km (`motors`).
- `mileage_max` (integer, optional) — Highest odometer reading in km (`motors`).
- `area_min` (number, optional) — Smallest built area in square FEET (`properties` — the site's own area filter is in ft²).
- `area_max` (number, optional) — Largest built area in square feet (`properties`).
- `emirates` (array, optional) — Emirate names exactly as the `filters` action lists them (`Dubai`, `Sharjah`, `Ajman`, `Abu Dhabi` …). Applies to `properties`, `for-rent` and the surplus sales; the plate sales are already per-emirate.
- `ownership` (array, optional) — Property ownership type (`properties` only). [one of: Freehold, GCC, Leasehold]
- `providers` (array, optional) — Seller / provider names as `filters` lists them (surplus sales).
- `plate_codes` (array, optional) — Plate code letters/digits as `filters` lists them (plate sales).
- `plate_digits` (array, optional) — How many digits the plate number has, e.g. `2`, `3`, `5` (plate sales).
- `plate_patterns` (array, optional) — The site's own plate pattern labels — X/Y/Z stand for repeating digit groups, so `XYZZZ` is one digit followed by a triple. 35 patterns were live in the Sharjah sale at capture. 🔴 Only a pattern the `filters` action lists for THAT sale matches: `XYZZZ` returned 5 plates, `XXYY` returned 0 across all ten sales.
- `end_dates` (array, optional) — Closing-day buckets exactly as the `filters` action publishes them (`EndDate` values such as `2026-10-06T00:00:00`, labelled Today / Tomorrow / …).
- `language` (enum, optional, default "en") — Language of the titles, categories and labels the source returns. [one of: en, ar]

**Returns:** `{summary, facets}`. `summary` = {auction, auction_type_id, total_results (the source's count for the filter you passed), filters_applied, server_time, timezone}. `facets` holds the live option lists — categories[], makes[], models[], types[], plate_codes[], plate_patterns[], plate_digit_counts[], emirates[], ownership[], providers[], end_dates[] (each {id, title, count}) — and sliders{price, year, mileage, area} with {from, to, step}.

**Example request body:**
```json
{
  "auction": "motors"
}
```

## At scale
- **Volume:** 5M+ requests a day, measured at 60 requests a second across the fleet with no
  central bottleneck. Per-key limits are raised for high-volume accounts; volume pricing on request.
- **Missing a source:** tell us a site we do not cover and it becomes an engine. A customer asked
  for bestprice.gr on 21 Sep 2026 and it was in the catalog on 22 Sep.
- **Support:** 2 minute median time from a question in the live chat to the first answer. Setup
  help included, no support tier to buy.
- **One key, one credit pool** across every API. No per-site plans, no separate subscriptions.

## More
- Try it live, no code: https://reefapi.com/playground?engine=emirates-auction
- Human docs page: https://reefapi.com/docs/emirates-auction
- Overview page: https://reefapi.com/emirates-auction-api
- Every ReefAPI API in one file (for your AI): https://reefapi.com/llms-full.txt
