---
title: "Search the observed Dubai grocery catalogue by name, brand or identifier. Returns exact/equivalent matches and dated offers in AED. This does not run a live web search. Generic estimates, when present, are labelled and never store prices."
method: GET
path: "/api/v1/products"
---

# Search the observed Dubai grocery catalogue by name, brand or identifier. Returns exact/equivalent matches and dated offers in AED. This does not run a live web search. Generic estimates, when present, are labelled and never store prices.

`GET /api/v1/products`

## Request

- Base URL: `https://prices.brainy.ae`
- URL: `https://prices.brainy.ae/api/v1/products`
- Auth: none declared

## Query parameters

- `q` string, required

## Response `200`

Success. All money is AED; unknown values are null.

- object
  - `currency` 'AED', required
  - `observed_at` string, nullable, required
  - `stale` boolean, required
  - `attribution` string, required
  - `open_in_browser` string, uri, required
  - `query` string, required
  - `count` integer, required
  - `products` object[], required
    - `id` string, required
    - `name` string, required
    - `unit` 'each' | 'kg' | 'l', required
    - `size` object, required
      - `quantity` number, nullable, required
      - `unit` string, required
    - `comparison` 'exact' | 'equivalent', required
    - `page` string, uri, nullable, required
    - `open_in_browser` string, uri, required
    - `offers` object[], required
      - `store_id` string, required
      - `store` string, required
      - `title` string, required
      - `price_aed` number, nullable, required: AED, rounded to two decimal places. Unknown amounts are null.
      - `unit_price_aed` number, nullable, required: AED, rounded to two decimal places. Unknown amounts are null.
      - `unit` string, required
      - `pack_quantity` number, required
      - `sale_mode` 'pack' | 'weight', required
      - `url` string, uri, nullable, required
      - `observed_at` string, required
      - `comparison` 'exact' | 'equivalent', required
      - `status` string, required
      - `available` boolean, required
    - `estimate` object
      - `kind` 'estimate', required
      - `value_aed` number, required
      - `range_aed` object, required
        - `low_aed` number, required
        - `high_aed` number, required
      - `method` 'official_same_product' | 'own_last_observed' | 'official_category' | 'category_median' | 'shopper_reports', required
      - `basis` object, required
        - `source_ids` string[], required
        - `product_match` 'same_product' | 'same_category', required
        - `observations` integer, required
        - `observed_from` string, date, required
        - `observed_to` string, date, required
        - `note` string, nullable, required
        - `sources` object[], required
          - `source_id` string, required
          - `name` string, required
          - `url` string, uri, nullable, required
      - `confidence` 'high' | 'medium' | 'low', required
      - `as_of` string, date, required
      - `label` 'Estimate — not a store price', required
      - `unit` 'kg' | 'l' | 'each': Estimate per 1 catalogue unit; each is one item or catalogue pack.
    - `price` unknown

## Other responses

- `400`: Request failed.
- `404`: Request failed.
- `405`: Request failed.
- `413`: Request failed.
- `422`: Request failed.
- `429`: Rate limit exceeded. Retry-After gives seconds to wait.
- `503`: Request failed.

---

[API](https://skmtc.dev/brainy/apis/dubai-cost-of-living-brainy-prices.md) · [All operations](https://skmtc.dev/brainy/apis/dubai-cost-of-living-brainy-prices/llms.txt) · [OpenAPI document](https://skmtc.dev/brainy/apis/dubai-cost-of-living-brainy-prices/revisions/a548a841d58c?raw)
