BİM
Turkey's biggest discount grocer: the weekly Aktüel and İndirim leaflets with every product priced, plus the store finder.
/bim/v1/leafletsfreeEvery leaflet BİM is publishing right now — the recent ones, the one on shelf today, and the UPCOMING ones (BİM puts the next week's sheets up days early). Each entry carries the leaflet key you pass to `leaflet/products`, its family (`aktuel` special-buy sheet or `indirim` price-cut sheet), BİM's own date label, the start and end dates, and whether it is current, upcoming or past. This is the only legitimate source of a leaflet key: BİM keeps no archive.
| Parameter | Allowed / range | Description | |
|---|---|---|---|
| type = all | optional | all · aktuel · indirim | Which leaflet family to list. BİM runs both at once. |
| max_rotations = 3 | optional | 1–8 | Advanced: how many times to retry a request on a fresh exit (1-8, default 3). |
/bim/v1/leaflet/products1 creditEvery product on one BİM leaflet: title, brand, campaign price in TRY, the struck price and BİM's discount percent where BİM prints them, package size, feature bullets, interest-free instalments, image and product URL. Pick the leaflet by `leaflet_key`, by `date` (future dates included), or leave both out for the sheet on shelf today. An unknown key is rejected, never answered with the wrong week.
| Parameter | Allowed / range | Description | |
|---|---|---|---|
| leaflet_key | optional | 1– | The leaflet's own id, exactly as `leaflets` returns it. 🔴 BİM keeps no archive: only the keys `leaflets` currently lists answer — any other key silently renders the current leaflet, and this engine rejects that with NOT_FOUND rather than returning the wrong week's products. |
| date | optional | — | Instead of `leaflet_key`: an ISO date. Returns the leaflet BİM publishes for that day — for `indirim`, the sheet whose date range covers it (BİM runs a long sheet and a weekly one at the same time, and the one starting nearest your date wins; use `leaflets` + `leaflet_key` to pick the other). Future dates work: BİM publishes upcoming leaflets days ahead. |
| type = aktuel | optional | aktuel · indirim | Which leaflet family. Used when you give a `date`, or on its own to get that family's current leaflet. Ignored when `leaflet_key` is given. |
| max_rotations = 3 | optional | 1–8 | Advanced: how many times to retry a request on a fresh exit (1-8, default 3). |
/bim/v1/product/detail1 creditOne BİM leaflet product by its URL or slug: title, price, struck price and discount where BİM prints them, package size, the feature list (the product page often carries more bullets than the leaflet tile), every image, instalments — plus which leaflet it belongs to and its brand, read from that leaflet. A product whose leaflet has expired returns NOT_FOUND rather than BİM's silent homepage.
| Parameter | Allowed / range | Description | |
|---|---|---|---|
| url | optional | — | A BİM product URL, as `leaflet/products` returns it in `url`. ⚠️ BİM product pages live only while their leaflet does — take a fresh URL from `leaflet/products` rather than storing one. |
| slug | optional | — | Alternative to `url`: just the slug part, as `leaflet/products` returns it in `slug`. |
| include_brand = true | optional | — | BİM's product page does not publish the brand — only the leaflet listing does. Left true, the engine also reads the product's leaflet so `brand` and the leaflet's date are filled (one extra request). Set false for the page alone; `brand` is then null because it was not read, and `brand_source` says so. |
| max_rotations = 3 | optional | 1–8 | Advanced: how many times to retry a request on a fresh exit (1-8, default 3). |
/bim/v1/posters1 creditBİM's leaflet sheets as images — the scanned Aktüel, İndirim and Kırtasiye posters, each with BİM's date label, a cover image, every page image in order and BİM's own download link. This is the printed sheet; `leaflet/products` is the same campaign as structured rows.
| Parameter | Allowed / range | Description | |
|---|---|---|---|
| type = all | optional | all · aktuel · indirim · kirtasiye | Which poster tab to return. |
| max_rotations = 3 | optional | 1–8 | Advanced: how many times to retry a request on a fresh exit (1-8, default 3). |
/bim/v1/stores1 creditBİM's public store finder. With no parameters it returns the 81 provinces; with a `city` it returns that province's districts; with both it returns the stores — branch name and street address. Works by name or by BİM's own numeric ids.
| Parameter | Allowed / range | Description | |
|---|---|---|---|
| city | optional | — | Province name or BİM's numeric province id. Leave it out to get the list of all 81 provinces BİM serves. |
| county | optional | — | District name or BİM's numeric district id. Leave it out to get the districts of `city`. 🔴 BİM's store finder needs a district — a province on its own returns no stores, not all of them. |
| max_rotations = 3 | optional | 1–8 | Advanced: how many times to retry a request on a fresh exit (1-8, default 3). |
/bim/v1/brandsfreeBİM's own-label brands. With no parameters it returns BİM's eleven product categories; with a `category` it returns that category's own-label brand names and logos. BİM publishes brand names and logos here only — there are no products or prices on this surface.
| Parameter | Allowed / range | Description | |
|---|---|---|---|
| category | optional | — | A category slug or numeric id from this action's own `categories` list. Leave it out to get the category list itself. |
| max_rotations = 3 | optional | 1–8 | Advanced: how many times to retry a request on a fresh exit (1-8, default 3). |
curl -X POST https://api.reefapi.com/bim/v1/leaflets \
-H "x-api-key: $REEF_KEY" \
-H "content-type: application/json" \
-d '{"type":"all"}'{
"ok": true,
"data": { /* the result */ },
"meta": {
"latency_ms": 240,
"record_count": 12,
"completeness_pct": 100
},
"error": null
}