ŞOK Market
Turkish discount grocery online: ŞOK Market and ŞOK Ekstra, this week's Haftanın Fırsatları deals, prices in lira per store.
/sok/v1/search1 creditSearch ŞOK by keyword in either shop — `market` (the online grocery shelf) or `ekstra` (electronics, home, fashion) — with ŞOK's own sort orders and optional category, brand and price filters. Each row carries the product id, title, brand, URL, images, the store's price, ŞOK's struck price and discount where one exists, stock, the full category path and any campaign badge the product carries.
| Parameter | Allowed / range | Description | |
|---|---|---|---|
| query | required | — | What to search for on ŞOK's shelf, in Turkish. ŞOK matches words literally: it does not correct typos and does not pad an unmatched query with unrelated products, so a misspelling returns nothing. |
| channel = market | optional | market · ekstra | Which ŞOK shop to read. The two shops have separate catalogues, separate stores and separate prices. |
| page = 0 | optional | 0–500 | Zero-based page number (ŞOK's own numbering). |
| page_size = 100 | optional | 1–500 | Products per page, 1-500 (default 100). |
| sort = relevance | optional | relevance · relevance_asc · price_asc · price_desc | The four sort orders ŞOK's own search supports. |
| category_id | optional | — | Restrict to one ŞOK category id (from the `categories` action or the number at the end of a category URL, …-c-460). |
| brand_id | optional | — | Restrict to one ŞOK brand id (the `brand_id` on any row). |
| min_price | optional | 0– | Only products priced at or above this, in TRY. |
| max_price | optional | 0– | Only products priced at or below this, in TRY. |
| only_campaign_products = false | optional | — | Only products carrying a ŞOK campaign badge (ŞOK's own "Kampanyalı Ürünler" filter). |
| store_id | optional | — | Advanced: read a named ŞOK store instead of the default online store. Prices are almost always the same across stores but the assortment is not; every answer says which store it came from. |
| max_rotations = 5 | optional | 1–10 | Advanced: how many times to retry a difficult request (1-10, default 5). |
/sok/v1/category/products1 creditBrowse one ŞOK category — every product ŞOK lists in it, paged, with the same fields as search and the same optional brand, price and campaign filters. Category ids come from the `categories` action or from the number at the end of a ŞOK category URL.
| Parameter | Allowed / range | Description | |
|---|---|---|---|
| category_id | required | — | The ŞOK category to browse — an id from the `categories` action or the number at the end of a category URL (…-c-460 → 460). |
| channel = market | optional | market · ekstra | Which ŞOK shop to read. The two shops have separate catalogues, separate stores and separate prices. |
| page = 0 | optional | 0–500 | Zero-based page number (ŞOK's own numbering). |
| page_size = 100 | optional | 1–500 | Products per page, 1-500 (default 100). |
| sort = relevance | optional | relevance · relevance_asc · price_asc · price_desc | The four sort orders ŞOK's own search supports. |
| brand_id | optional | — | Restrict to one ŞOK brand id (the `brand_id` on any row). |
| min_price | optional | 0– | Only products priced at or above this, in TRY. |
| max_price | optional | 0– | Only products priced at or below this, in TRY. |
| only_campaign_products = false | optional | — | Only products carrying a ŞOK campaign badge (ŞOK's own "Kampanyalı Ürünler" filter). |
| store_id | optional | — | Advanced: read a named ŞOK store instead of the default online store. Prices are almost always the same across stores but the assortment is not; every answer says which store it came from. |
| max_rotations = 5 | optional | 1–10 | Advanced: how many times to retry a difficult request (1-10, default 5). |
/sok/v1/categoriesfreeŞOK's whole category tree for a shop — every category with its id, name, level, parent and URL, nested — plus the shortcuts ŞOK links from its own front page (its weekly deal page, new products, gluten-free and so on). Use the ids with `category/products`.
| Parameter | Allowed / range | Description | |
|---|---|---|---|
| channel = market | optional | market · ekstra | Which ŞOK shop to read. The two shops have separate catalogues, separate stores and separate prices. |
| max_depth = 3 | optional | 1–6 | How many levels of the category tree to return (1-6). |
| store_id | optional | — | Advanced: read a named ŞOK store instead of the default online store. Prices are almost always the same across stores but the assortment is not; every answer says which store it came from. |
| max_rotations = 5 | optional | 1–10 | Advanced: how many times to retry a difficult request (1-10, default 5). |
/sok/v1/product/detail1 creditOne ŞOK product by id or URL: the store's price, ŞOK's struck price and discount where one exists, stock, brand, own-brand flag, images, the full category path, campaign badges, the product description, country of origin, net quantity, ingredients, allergen warning, storage condition, usage instructions, the nutrition table and the package dimensions ŞOK publishes.
| Parameter | Allowed / range | Description | |
|---|---|---|---|
| product_id | optional | — | The ŞOK product id — the number at the end of a product URL (…-p-5834 → 5834). Give this or `url`. |
| url | optional | — | A ŞOK product page URL, instead of `product_id`. |
| channel = market | optional | market · ekstra | Which ŞOK shop to read. The two shops have separate catalogues, separate stores and separate prices. |
| store_id | optional | — | Advanced: read a named ŞOK store instead of the default online store. Prices are almost always the same across stores but the assortment is not; every answer says which store it came from. |
| max_rotations = 5 | optional | 1–10 | Advanced: how many times to retry a difficult request (1-10, default 5). |
/sok/v1/campaigns2 creditsThe products of a ŞOK campaign listing. `weekly_deals` (the default) is ŞOK's own deal page — every product it currently sells below its struck price, with both prices and the discount. `badge_campaigns` is ŞOK's "Kampanyalı Ürünler" filter (1 Alana 1 Bedava, 50 TL ve üzeri…). `campaign` returns one named campaign's products together with its terms; `promotion_group` and `product_group` return ŞOK's own grouped listings.
| Parameter | Allowed / range | Description | |
|---|---|---|---|
| campaign = weekly_deals | optional | weekly_deals · badge_campaigns · campaign · promotion_group · product_group | Which ŞOK campaign listing to return. `weekly_deals` is the deal page ŞOK links from its own front page. |
| campaign_id | optional | — | Required with campaign=campaign: a campaign id from the `campaigns/list` action. |
| group_id | optional | — | Required with campaign=promotion_group or campaign=product_group: the id at the end of the group's URL (…-pgrp-<id> / …-sgrp-<id>). |
| channel = market | optional | market · ekstra | Which ŞOK shop to read. The two shops have separate catalogues, separate stores and separate prices. |
| page = 0 | optional | 0–500 | Zero-based page number (ŞOK's own numbering). |
| page_size = 100 | optional | 1–500 | Products per page, 1-500 (default 100). |
| store_id | optional | — | Advanced: read a named ŞOK store instead of the default online store. Prices are almost always the same across stores but the assortment is not; every answer says which store it came from. |
| max_rotations = 5 | optional | 1–10 | Advanced: how many times to retry a difficult request (1-10, default 5). |
/sok/v1/campaigns/listfreeŞOK's campaign catalogue: every campaign currently running with its id, title, conditions, page URL and artwork, plus the campaign groups ŞOK sorts them into. Feed a campaign_id back into the `campaigns` action to get that campaign's products.
| Parameter | Allowed / range | Description | |
|---|---|---|---|
| channel = market | optional | market · ekstra | Which ŞOK shop to read. The two shops have separate catalogues, separate stores and separate prices. |
| group_id | optional | — | Only list campaigns in one ŞOK campaign group (an id from this action's own `groups` list). |
| page = 0 | optional | 0–500 | Zero-based page number (ŞOK's own numbering). |
| store_id | optional | — | Advanced: read a named ŞOK store instead of the default online store. Prices are almost always the same across stores but the assortment is not; every answer says which store it came from. |
| max_rotations = 5 | optional | 1–10 | Advanced: how many times to retry a difficult request (1-10, default 5). |
/sok/v1/suggest1 creditŞOK's own search autocomplete for a partial keyword: the search terms and category suggestions the site offers while the shopper types.
| Parameter | Allowed / range | Description | |
|---|---|---|---|
| query | required | — | What the shopper has typed so far (2+ characters). |
| channel = market | optional | market · ekstra | Which ŞOK shop to read. The two shops have separate catalogues, separate stores and separate prices. |
| store_id | optional | — | Advanced: read a named ŞOK store instead of the default online store. Prices are almost always the same across stores but the assortment is not; every answer says which store it came from. |
| max_rotations = 5 | optional | 1–10 | Advanced: how many times to retry a difficult request (1-10, default 5). |
curl -X POST https://api.reefapi.com/sok/v1/search \
-H "x-api-key: $REEF_KEY" \
-H "content-type: application/json" \
-d '{"query":"süt","channel":"market"}'{
"ok": true,
"data": { /* the result */ },
"meta": {
"latency_ms": 240,
"record_count": 12,
"completeness_pct": 100
},
"error": null
}