Mudah.my
Malaysia's largest classifieds: cars, property for sale and to rent, phones, appliances, fashion, pets, jobs and services, priced in MYR.
/mudah/v1/search1 creditSearch Mudah.my across every vertical — cars, motorcycles, property for sale and to rent, phones and electronics, home appliances, furniture, fashion, sports, pets, food, jobs and services — by keyword and/or category, up to 200 ads per call. Each row carries the listing id and URL, title, price in MYR, condition, state and town, when it was posted and last bumped, the cover photo, whether the seller is a private person or a business, and every vertical-specific field mudah publishes (car make/model/mileage/transmission/year, property bedrooms/bathrooms/size, phone brand/model/storage…). Filter by price range, condition, state, town, ad type and seller type, plus any filter the category itself publishes — those are validated against mudah's own schema, so a filter that mudah would quietly ignore is rejected instead.
| Parameter | Allowed / range | Description | |
|---|---|---|---|
| query | optional | — | Keyword. Optional when `category` is given — a bare category browses everything in it. |
| category | optional | — | Category id, slug or name — 1020 / 'cars' / 'Cars'. Parent ids include their children (4100 covers clothes, shoes, watches, health & beauty). The free `categories` action lists every one. |
| region | optional | — | Malaysian state or federal territory — id, slug or name ('8', 'selangor', 'Kuala Lumpur'). Free `locations` action lists them. |
| area | optional | — | Town / district inside the region — id, slug or name, and a comma list is allowed ('petaling-jaya,shah-alam'). Free `locations` lists them. |
| price_min | optional | 0– | Lowest price in MYR. (Sent to mudah as its own `price=min-max` range — mudah's raw `price_min` key returns zero rows.) |
| price_max | optional | 0– | Highest price in MYR. |
| condition | optional | — | Item condition, as the category publishes it: 'new', 'used', 'like-new', 'refurbished' (electronics) or 'used', 'new', 'recon' (cars). Validated against the category's own list. |
| ad_type | optional | sell · let · buy · auction · newprop | Which side of the market. Property carries sell, let, auction and newprop; jobs carry sell (vacancies) and buy (CVs). |
| seller_type | optional | private · company | Restrict to private sellers or to businesses. Omit for both. |
| sort = newest | optional | newest · price_asc · price_desc · relevance | Result order. |
| search_in = title | optional | title · title_and_description | Where the keyword is matched. |
| filters | optional | — | Any other filter the category publishes, as a JSON object {"make":"Toyota","transmission":"Auto"} or a string 'make=Toyota;mileage=0-50000'. Keys and values are checked against mudah's own filter schema and an unknown one is REJECTED — mudah itself would ignore it and return the unfiltered set. Call the free `filters` action for the list. |
| limit = 40 | optional | 1–200 | Rows per call, 1-200. Above 200 mudah silently returns 24, so 200 is the enforced ceiling. |
| offset = 0 | optional | 0–9999 | Rows to skip. offset + limit must stay within 10 000 — mudah's search window. Past it the service answers 'zero results' rather than an error, so narrow the query instead of paging deeper. |
| include_description = false | optional | — | Add each row's full description text (bigger response). |
| include_images = false | optional | — | Add every photo of each row, not just the cover image. |
| include_pii = false | optional | — | Return the contact details of PRIVATE sellers (name, phone, WhatsApp link, and phone/e-mail typed into the description). Off by default: those belong to private individuals. Dealer, agency and shop details are business facts and are always returned. |
/mudah/v1/listing1 creditOne ad in full, by its list id or URL: title, complete description, price and the seller's earlier price, condition, category, state and town, every photo in standard and high resolution, every attribute the category defines (car make, model, variant, engine, mileage, transmission and manufactured year; property type, tenure, bedrooms, bathrooms, floor size, facilities, carpark; phone brand, model, storage and warranty; job salary, contract type, experience, education, languages and company details), the dealer's registration number where one is published, shop identity and verification, and how buyers can reach the seller.
| Parameter | Allowed / range | Description | |
|---|---|---|---|
| listing_id | required | — | The ad's list id — the number at the end of a mudah ad URL (…/tong-sampah-leach-bin-1100l-1500l-98625990.htm → 98625990) — or the full URL. Every search row returns it as listing_id. |
| include_pii = false | optional | — | Return the contact details of PRIVATE sellers (name, phone, WhatsApp link, and phone/e-mail typed into the description). Off by default: those belong to private individuals. Dealer, agency and shop details are business facts and are always returned. |
/mudah/v1/seller_listings1 creditEvery live ad of one seller — a private account by user id, or a dealer / agency / shop by store id — with the same row shape as search, so a dealer's whole stock or a shop's whole catalogue comes back in pages of up to 200.
| Parameter | Allowed / range | Description | |
|---|---|---|---|
| store_id | optional | — | The shop's mudah store id (search rows: seller.store_id). One of `store_id` or `user_id` is required. |
| user_id | optional | — | The seller's mudah user id (search rows: seller.user_id). |
| query | optional | — | Keyword. Optional when `category` is given — a bare category browses everything in it. |
| category | optional | — | Category id, slug or name — 1020 / 'cars' / 'Cars'. Parent ids include their children (4100 covers clothes, shoes, watches, health & beauty). The free `categories` action lists every one. |
| region | optional | — | Malaysian state or federal territory — id, slug or name ('8', 'selangor', 'Kuala Lumpur'). Free `locations` action lists them. |
| sort = newest | optional | newest · price_asc · price_desc · relevance | Result order. |
| limit = 40 | optional | 1–200 | Rows per call, 1-200. Above 200 mudah silently returns 24, so 200 is the enforced ceiling. |
| offset = 0 | optional | 0–9999 | Rows to skip. offset + limit must stay within 10 000 — mudah's search window. Past it the service answers 'zero results' rather than an error, so narrow the query instead of paging deeper. |
| include_description = false | optional | — | Add each row's full description text (bigger response). |
| include_images = false | optional | — | Add every photo of each row, not just the cover image. |
| include_pii = false | optional | — | Return the contact details of PRIVATE sellers (name, phone, WhatsApp link, and phone/e-mail typed into the description). Off by default: those belong to private individuals. Dealer, agency and shop details are business facts and are always returned. |
/mudah/v1/similar1 creditMudah's own 'similar ads' for one listing — the comparable live ads it shows next to it, with price, condition highlights, location and photo. Useful for pricing a used item against what the same market is asking right now.
| Parameter | Allowed / range | Description | |
|---|---|---|---|
| listing_id | required | — | The ad's list id — the number at the end of a mudah ad URL (…/tong-sampah-leach-bin-1100l-1500l-98625990.htm → 98625990) — or the full URL. Every search row returns it as listing_id. |
| include_pii = false | optional | — | Return the contact details of PRIVATE sellers (name, phone, WhatsApp link, and phone/e-mail typed into the description). Off by default: those belong to private individuals. Dealer, agency and shop details are business facts and are always returned. |
/mudah/v1/suggest1 creditMudah's keyword autocomplete: what real buyers type, each suggestion carrying the category it belongs to and the ready-made filter values for it — so a half-typed word becomes a valid search without guessing a category id.
| Parameter | Allowed / range | Description | |
|---|---|---|---|
| query | required | — | What the user has typed so far. |
/mudah/v1/categoriesfreeMudah's whole category tree — every group, category and sub-category with its id, name and slug. Free: these ids are what `search` and `filters` take, so nobody has to guess one.
Try in playground →/mudah/v1/locationsfreeEvery Malaysian state and federal territory mudah lists, each with its towns and districts, ids and slugs. Free: these are the values `region` and `area` take.
Try in playground →/mudah/v1/filtersfreeEvery filter one category publishes, with its key, label, kind (single, multi or range) and the complete list of allowed values — car makes and models, property types and facilities, phone brands, models and storage sizes, job categories and contract types, conditions, sort orders. Free, and the authoritative input for `search`'s `filters` parameter.
| Parameter | Allowed / range | Description | |
|---|---|---|---|
| category | required | — | Category id, slug or name whose filters you want. |
curl -X POST https://api.reefapi.com/mudah/v1/search \
-H "x-api-key: $REEF_KEY" \
-H "content-type: application/json" \
-d '{"category":"1020","limit":20}'{
"ok": true,
"data": { /* the result */ },
"meta": {
"latency_ms": 240,
"record_count": 12,
"completeness_pct": 100
},
"error": null
}