# LC Waikiki API scraper — lcw.com and 20 LC Waikiki country shops: search by keyword, category, brand or outlet with sort and filters, and read every colour option with per-size stock and prices, grid, campaign and struck price, composition, model measurements, colour siblings, ratings and reviews. No account, no browser.

> Search an LC Waikiki shop by keyword, or browse any category, brand, store or outlet listing, with the shop's sort orders and filters. 100 products a page: option id, product code, title, brand, URL, images, the grid price, the struck price, the campaign price (e.g. 'Sepette İndirim') and the price you finally pay, lowest price of the last 30 days, multi-buy campaigns, stock count, rating and review count, category path, seller. Also returns every filter the shop offers for the result, with value ids and counts.
> ReefAPI engine `lcw` · 4 endpoints · clean JSON, no scraping or browsers to manage.

## How to call
- **Endpoint:** `POST https://api.reefapi.com/lcw/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, `Authorization: Bearer <key>`) and your assistant can call these actions directly.

## Endpoints

### POST /lcw/v1/search — 2 credits
Search an LC Waikiki shop by keyword, or browse any category, brand, store or outlet listing, with the shop's sort orders and filters. 100 products a page: option id, product code, title, brand, URL, images, the grid price, the struck price, the campaign price (e.g. 'Sepette İndirim') and the price you finally pay, lowest price of the last 30 days, multi-buy campaigns, stock count, rating and review count, category path, seller. Also returns every filter the shop offers for the result, with value ids and counts.

**Parameters:**
- `country` (enum, optional, default "tr") — LC Waikiki shop. tr = lcw.com (the main shop, Turkish lira); the others are LC Waikiki's own country shops on the same platform, each in its own currency and language. A `url` parameter sets the country from its host. [one of: tr, ro, ua, ba, rs, bg, de, al, mk, ru, fr, gr, hr, it, me, xk, kz, eg, ma, ge, iq]
- `query` (string, optional) — Keyword, in the shop's language ('tişört', 'erkek jean', 'kadın mont'). Optional when `url` is given.
- `url` (string, optional) — An LC Waikiki LISTING URL to browse: a category (…-t-345, …-u-6000061), a brand (/marka/lcw-kids-b-724), a store (/magaza/lc-waikiki-s-1), the outlet (/outlet) or a search page. Every breadcrumb and campaign URL this API returns is one.
- `page` (integer, optional, default 1) — Result page, 1-based. LC Waikiki serves 100 products per page; `total_pages` says how many exist. A page past the end comes back empty.
- `sort` (enum, optional, default "relevance") — Order of the results — the orderings the shop itself offers. [one of: relevance, price_asc, price_desc, newest, newest_discounts, best_selling, most_favorited, most_reviewed]
- `filters` (object, optional) — The shop's own filters, as {key: value}. Keys and value ids come from the `available_filters` of a previous search on the same keyword or URL (m_color = colour, m_size = size, m_8 = brand, m_price = price band, m_campaigntype = discounted items …). Several ids for one key: "141,145".
- `max_rotations` (integer, optional, default 3) — Advanced: how many times to retry a difficult request (1-6, default 3).

**Returns:** results[]{position, option_id, model_id, product_code, model_code, title, brand, url, image, images[], color_hex, price (grid price), price_display, original_price (struck, null when none), campaign_price (badge price such as 'Sepette İndirim', null when none), campaign_label, campaign_discount_percent, campaign_ends_at, final_price, lowest_price_30_days, currency, campaigns[{campaign_id, label, starts_at, ends_at, url}], search_index_stock_count, in_stock, search_index_rating, search_index_review_count (the listing index's figures, which can lag the product page; product/detail has the page's own), rating_scale, category, category_path[], product_group, seller{id, name}, is_outlet}, count, total_results, total_pages, page, served_page, page_size, sort, applied_filters, available_filters[{key, title, values[{value, label, count, selected}]}], breadcrumb[], category_name, did_you_mean, no_match_notice, page_notice, fallback_results_dropped, country, currency, route ('keyword', 'keyword_to_listing' when the shop maps the keyword to a listing, 'keyword_search_page', 'category', 'brand', 'store', 'outlet'), resolved_url (the listing a mapped keyword resolved to, else null)

**Example request body:**
```json
{
  "query": "tişört"
}
```

### POST /lcw/v1/product/detail — 1 credit
One LC Waikiki colour option by URL or option id: title, brand, colour, every size (and waist × length for trousers) with its own stock count and price, the grid price, campaign price, final price and struck price, barcode, composition, materials, model measurements and the size the model wears, attributes, care instructions, description, colour siblings with their stock state, rating and count, newest reviews, breadcrumb, seller, shipping cost and delivery window, return days.

**Parameters:**
- `country` (enum, optional, default "tr") — LC Waikiki shop. tr = lcw.com (the main shop, Turkish lira); the others are LC Waikiki's own country shops on the same platform, each in its own currency and language. A `url` parameter sets the country from its host. [one of: tr, ro, ua, ba, rs, bg, de, al, mk, ru, fr, gr, hr, it, me, xk, kz, eg, ma, ge, iq]
- `url` (string, optional) — An LC Waikiki product URL (…-o-<option id>) on any country shop; it also sets the country. Every search row returns one.
- `option_id` (integer, optional) — Alternative to `url`: the colour option id (the number after -o-). Every search row returns it. Ids are shared across country shops.
- `max_rotations` (integer, optional, default 3) — Advanced: how many times to retry a difficult request (1-6, default 3).

**Returns:** product{option_id, model_id, product_code, model_code, color_code, gtin13 (one barcode for the option; null unless a valid GTIN), title, full_name, brand, brand_url, url, color, price (grid price), campaign_price, campaign_discount_percent, final_price (the headline price), original_price (struck), currency, sizes_have_different_prices, availability, in_stock, stock_count (sum of sizes), variants[{size, length, size_id, length_id, display_order, stock_count, in_stock, final_price, original_price, sku_ref, product_id}], sizes[], materials[], composition[{part, value}], images[], rating (one decimal, as the page prints it), rating_count, rating_scale, top_reviews[{review_id, rating, text, seller}], color_options[{option_id, color, url, image, selected, in_stock}], color_option_count, description, model_measurements[{label, value}], model_size, specifications[{name, value}], attributes[{name, value, property_id}], care_instructions[], manufacturer, category, breadcrumb[], gender, seller{id, name, url}, shipping{cost, currency, handling_days_min/max, transit_days_min/max, cutoff_time}, return_days, free_returns, multi_buy_campaigns (null — not on the product page; search rows carry them)}, country

**Example request body:**
```json
{
  "option_id": 5248220
}
```

### POST /lcw/v1/product/reviews — 1 credit
Every published review of an LC Waikiki colour option: exact average and count, the 1-5 breakdown, how buyers rate the fit (runs small / true to size / runs large) and each review with its stars, text, date, the size bought, the reviewer's height and weight when given, likes and photos. Reviewer names are never returned.

**Parameters:**
- `country` (enum, optional, default "tr") — LC Waikiki shop. tr = lcw.com (the main shop, Turkish lira); the others are LC Waikiki's own country shops on the same platform, each in its own currency and language. A `url` parameter sets the country from its host. [one of: tr, ro, ua, ba, rs, bg, de, al, mk, ru, fr, gr, hr, it, me, xk, kz, eg, ma, ge, iq]
- `url` (string, optional) — An LC Waikiki product URL (…-o-<option id>) on any country shop; it also sets the country. Every search row returns one.
- `option_id` (integer, optional) — Alternative to `url`: the colour option id (the number after -o-). Every search row returns it. Ids are shared across country shops.
- `page` (integer, optional, default 1) — Review page, 1-based, 100 reviews per page (newest first); `total_pages` says how many exist.
- `max_rotations` (integer, optional, default 3) — Advanced: how many times to retry a difficult request (1-6, default 3).

**Returns:** option_id, rating (exact), rating_count, rating_scale, rating_breakdown{'1'..'5'}, page, total_pages, reviews_source ('review_list', or 'product_page_newest' for an option whose reviews are pooled with paired options: then only the page's rounded rating, its count and the newest reviews it prints), reviews_note, size_fit{runs_small_percent, true_to_size_percent, runs_large_percent} (null when none), reviews_listed, reviews_returned, reviews[{review_id, rating, title, text, date, size_purchased, color_code, like_count, dislike_count, seller, reviewer_height_cm, reviewer_weight_kg, images[]}], country

### POST /lcw/v1/suggest — 1 credit
LC Waikiki's search autocomplete for the characters typed so far: category suggestions with their listing URL (usable in search `url`) and popular searches.

**Parameters:**
- `country` (enum, optional, default "tr") — LC Waikiki shop. tr = lcw.com (the main shop, Turkish lira); the others are LC Waikiki's own country shops on the same platform, each in its own currency and language. A `url` parameter sets the country from its host. [one of: tr, ro, ua, ba, rs, bg, de, al, mk, ru, fr, gr, hr, it, me, xk, kz, eg, ma, ge, iq]
- `query` (string, required) — The characters typed so far, in the shop's language.
- `max_rotations` (integer, optional, default 3) — Advanced: how many times to retry a difficult request (1-6, default 3).

**Returns:** query, suggestions[{text, type ('category'|'search_history'|…), id, url}], count, did_you_mean, country

**Example request body:**
```json
{
  "query": "tişört"
}
```

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