Install
openclaw skills install @scavio-ai/trendyol-apiTrendyol API for trendyol.com and 34 international Trendyol storefronts - seller prices for one product (the buy-box seller and every other seller's price, seller score out of 10, the crossed-out price and Trendyol's lowest-price badge with its day count), keyword search, category and brand grids (36 per page, up to 138 pages, sorted by price, newest, best seller, most favourited or most rated, filtered by price, brand, seller, rating, free shipping, rush delivery, discount, lowest-price badge, official seller, flash sale, coupon or any facet) with sponsored items flagged; reviews with the star histogram, topics and Trendyol's own summary; answered seller questions; seller store profiles and catalogs; flash deals and Super Firsatlar; collectable coupons per seller listing; category top-100 rankings; search suggestions; delivery estimates per seller listing. 35 markets in local language and currency (TRY, EUR, CZK, HUF, PLN, RON, RSD, UAH, MDL, AED, SAR, QAR, KWD, OMR, BHD, AZN). 12 endpoints, 1 credit each. No price history and no numeric 30-day lowest price.
openclaw skills install @scavio-ai/trendyol-apiRead Trendyol marketplace data from trendyol.com and its international storefronts: keyword search, category and brand grids with the site's own sorts and filters, one product in full with the buy-box seller and every other seller's offer, reviews with the star histogram, answered seller questions, a seller's store profile and catalog, flash deals and Super Firsatlar, the collectable coupons on a seller's listing, a category's top-100 lists, search-box suggestions and the delivery estimate of every listing. All 12 endpoints return structured JSON and cost 1 credit per call.
The job this skill is for: Trendyol seller prices. Trendyol runs one catalog: many sellers list the same product, one of them holds the buy box (the default offer on the product page) and the rest are listed under "Other Sellers of the Product". /product returns both: buy_box {seller {id, name, score out of 10, badges}, price, original_price, discount_percent, free_shipping, rush_delivery_hours, has_coupon} and other_sellers[] with the same price fields, the seller's score and the lowest-price badge each offer carries. Trendyol's developer FAQ says the buy box is chosen "with the determined algorithm metrics", not by price alone, and that other sellers are listed "according to their Buybox scores": so the buy box is not necessarily the cheapest offer, and other_sellers[] is not sorted by price. Sort it yourself.
Lowest-price badge: a day count, not a price. Trendyol tags some offers "lowest price of the last N days" (Son 10 Günün En Düşük Fiyatı on tr). lowest_price_badge is {days, text}: 10, 14, 30 or 90 days on the Turkish storefront, 7, 14 or 30 on the international ones (where text is null). Trendyol publishes no numeric 30-day lowest price and no price history, so neither is returned: never present a badge as a measured price, and to see whether a price moved, read the same product on a schedule and store each reading with its time, market and seller. Black Friday 2026 is Friday, November 27; press calendars put Trendyol's Efsane Günler at November 26 to December 2, 2026.
International storefronts have their own price lists. The same content_id serves every storefront, but each storefront is priced on its own, not as a currency conversion of the Turkish price, and its items are sold by Trendyol itself or by other sellers (check buy_box and other_sellers). Measured on 2 products on 2026-11-15, from the captures:
| Product | Storefront (country, language) | Seller | price | original_price | Currency |
|---|---|---|---|---|---|
| 737572719 chiffon maxi dress | de, de | Trendyol | 37.25 | 41.39 | EUR |
| 737572719 chiffon maxi dress | fr, en | Trendyol | 112.99 | - | EUR |
| 1090399394 mini dress | tr, tr (rankings capture) | World Fashion Trends | 440.1 | 489 | TRY |
| 1090399394 mini dress | bg, bg | World Fashion Trends | 7.61 | 19.91 | EUR |
| 1090399394 mini dress | gr, el | World Fashion Trends | 7.6 | 19.9 | EUR |
| 1090399394 mini dress | ro, ro | World Fashion Trends | 31.73 | 126.81 | RON |
Two euro storefronts priced the same dress 37.25 and 112.99 EUR the same day. Read each storefront you report; never derive one market's price from another's.
Trendyol has no public catalog, price or review API. The Trendyol Partner API is for sellers in the Trendyol Partner Program and their integrators: it manages the seller's own products, prices, stock and orders, with credentials from the seller panel.
See also: for Allegro (Poland, Czechia, Slovakia, Hungary) every seller's price use allegro-api; for AliExpress use aliexpress-product-data; for Amazon's Turkish and Gulf marketplaces use amazon-product-data (tr, ae, sa); for the cross-merchant view of one product use google-shopping-api.
Use this skill when the user asks to:
Get a free API key at scavio.dev (50 free credits to get started, no card required):
export SCAVIO_API_KEY=sk_live_your_key
An agent running this skill without SCAVIO_API_KEY set will get 401 on every
call below. The whole path from nothing to a working key is self-serve:
When the balance runs out the API answers 402 with a JSON body carrying
billing_url. Topping up needs no code change - the same key keeps working.
Paid plans start with Hobby at $15 per month for 3,000 credits; on Growth,
1,000 credits cost $1.
Every request is a POST with a JSON body and:
Authorization: Bearer $SCAVIO_API_KEY
Base URL: https://api.scavio.dev. In the captures calls took 0.4 to 6 seconds. One endpoint can make up to 3 upstream reads (still 1 credit), and a failed attempt is retried once, so a slow call can take a minute or more. Set a client timeout of at least 180 seconds and do not fire many calls at once (a busy moment answers 503 with Retry-After).
| Endpoint | Markets | Credits | What it returns |
|---|---|---|---|
POST /api/v1/trendyol/search | all 35 | 1 | 36 items per page for a keyword, with total, sorts, filters and (with include_facets) facets |
POST /api/v1/trendyol/product | all 35 | 1 | One product by content_id or url: prices, lowest-price badge, stock, variants, attributes, rating, buy_box, other_sellers[], promotions, returnable, installments, VAT and (with include_description) the description |
POST /api/v1/trendyol/category | all 35 | 1 | One category's grid by category_id or url, with the search sorts and filters |
POST /api/v1/trendyol/brand | all 35 | 1 | One brand's grid by brand_id or url, with the search sorts and filters |
POST /api/v1/trendyol/reviews | all 35 | 1 | A product's rating, rating and review counts, star histogram, topics, sizes bought, Trendyol's review summary and reviews, up to 50 per page |
POST /api/v1/trendyol/questions | all 35 | 1 | A product's answered seller questions with the seller's answer, up to 20 per page |
POST /api/v1/trendyol/seller | all 35 | 1 | A seller's store profile by seller_id or url and, with include_products, the seller's catalog as a grid |
POST /api/v1/trendyol/deals | tr | 1 | Flash deals (the active slot or a chosen one, with the slot list) or Super Firsatlar, as a grid |
POST /api/v1/trendyol/coupons | tr | 1 | The collectable coupons on one product's listing: the buy box's, or another seller's with seller_id |
POST /api/v1/trendyol/rankings | 20 (not the English-language EU storefronts) | 1 | A category's top 100 (best seller, most favourited, most rated or top viewed), 20 per page |
POST /api/v1/trendyol/suggestions | all 35 | 1 | The search-box suggestions for a partial query: keywords, categories, brands and stores |
POST /api/v1/trendyol/delivery | all 35 | 1 | Delivery dates for one product variant from every listing; city_id / district_id on tr only |
Every endpoint takes country (lowercase, default tr) and language (default the market's first). Titles, categories, reviews and labels come back in that language and prices in the market's currency, never converted; every data echoes country, language and currency. Quote names and labels as returned; translate them for the user only in your own words around the data.
country | Languages | Currency |
|---|---|---|
tr Turkey | tr, en, ar | TRY |
de Germany, at Austria | de | EUR |
fr France, be Belgium, hr Croatia, dk Denmark, ee Estonia, fi Finland, it Italy, lv Latvia, lt Lithuania, nl Netherlands, pt Portugal, si Slovenia, es Spain, se Sweden, lu Luxembourg | en | EUR |
bg Bulgaria | bg, en | EUR |
gr Greece | el, en | EUR |
sk Slovakia | sk, en | EUR |
cz Czechia | cs, en | CZK |
hu Hungary | hu, en | HUF |
pl Poland | pl, en | PLN |
ro Romania | ro, en | RON |
rs Serbia | sr (Latin), en | RSD |
ua Ukraine | uk, en | UAH |
md Moldova | ro, en | MDL |
ae United Arab Emirates | en, ar | AED |
sa Saudi Arabia | ar, en | SAR |
qa Qatar, kw Kuwait, om Oman, bh Bahrain | ar, en | QAR, KWD, OMR, BHD |
az Azerbaijan | tr | AZN |
fr, be, hr, dk, ee, fi, it, lv, lt, nl, pt, si, es, se, lu) have no ranking lists and answer 400.tr only (the international storefronts run no flash or super-discount pages and answered no coupons). Delivery city_id / district_id: tr only.language the market does not serve, answers 400 before anything is charged. ge, kz, kg and iq are served by the Turkish storefront rather than a local one, and Trendyol does not sell to ie, mt, gb, uk, ru, us, ca, jo or lb: all answer 400.404 (charged). Reviews on an international storefront are the ones written in its language./search with query in the market's language (telefon, elbise on tr; kleid on de). Read items[].content_id for /product, /reviews, /questions, /coupons and /delivery. Drop sponsored: true items before ranking or counting./product with content_id (the number after -p- in a product link) or url. Compare buy_box.price with every other_sellers[].price; other_seller_count is how many other offers there are. Keep seller.id, seller.name, seller.score, price, original_price, currency and lowest_price_badge per offer./seller with a buy_box.seller.id or other_sellers[].seller.id as seller_id; add include_products: true (and query, sort, filters) for its catalog. On a grid, seller_id narrows results to that seller./coupons with content_id reads the buy box's listing; add seller_id from other_sellers[].seller.id for another seller's. Coupons belong to each seller's listing, so the buy box often has none while another seller has some./category with category_id (the same id on every market: 103498 phones, 56 dresses; category.tree[].id on a product) or a -x-c<id> link; /brand with brand_id (items[].brand.id) or a -x-b<id> link. Send include_facets: true once to read the filter groups, then pass facets[].param / options[].value through filters./rankings with category_id and ranking (best_seller, most_favourited, most_rated, top_viewed), page 1 to 5.tr): /deals with type flash (the active slot by default; slots[].tag picks another) or super_discounts./reviews (sort, rating, with_media, page_size up to 50) and /questions (page_size up to 20) with the same content_id./delivery with content_id; on tr add city_id and district_id (Istanbul 133, Sisli 54). item_number picks a variant./product (every seller) or the grids (36 items per call) on a schedule. Store content_id, country, language, the time, seller, price, original_price, discount_percent, currency and lowest_price_badge per run. There is no price history endpoint.| Parameter | Type | Default | Description |
|---|---|---|---|
country | string | tr | See Markets |
language | string | the market's first | One of the market's languages |
page | integer | 1 | 1-based, 36 items per page, 1 to 138 (page 139 and up answers 400). A page past the last returns no items and a note |
sort | string | recommended | recommended, price_asc, price_desc, newest, best_seller, most_favourited or most_rated |
price_min / price_max | number | none | Price range in the market's currency |
brand_id | id or list | none | 1 to 10 brand ids (items[].brand.id, 794 Samsung) |
category_id | id or list | none | 1 to 10 category ids |
seller_id | id | none | One seller's items (items[].seller.id) |
min_rating | number | none | 1, 2, 3, 4 or 4.5: that rating and up |
free_shipping, fast_delivery, flash_sale, has_coupon | boolean | none | Only items with free shipping, rush delivery, a flash sale or a collectable coupon |
min_discount | integer | none | 1 to 90: at least that percent off |
lowest_price_days | integer | none | 7, 10, 14, 30 or 90: only items carrying that lowest-price badge |
seller_type | string | none | official (the brand's official seller), authorized or successful |
filters | object | none | Any other facet, keyed by facets[].param with facets[].options[].value values: {"attr": ["348|1"]} is a color, {"wg": "1"} a gender |
include_facets | boolean | false | Also return facets (still 1 credit) |
/search)| Parameter | Type | Default | Description |
|---|---|---|---|
query | string | required | Keywords in the market's language (1-200 chars) |
/product)| Parameter | Type | Default | Description |
|---|---|---|---|
content_id | id | one of | items[].content_id, the number after -p- in a product link: 975557855 |
url | string | one of | A product link on trendyol.com, trendyol.ae or trendyol.sa. A language-only path (/en/...) is shared by several storefronts: send country with it |
include_description | boolean | false | Also return description and description_html (still 1 credit) |
/category) and brand (/brand)| Parameter | Type | Default | Description |
|---|---|---|---|
category_id / brand_id | id | one of | 103498 phones, 56 dresses; 794 Samsung |
url | string | one of | A category link (<name>-x-c<id>) or brand link (<brand>-x-b<id>) |
Plus the shared parameters (other than the endpoint's own id).
/reviews)| Parameter | Type | Default | Description |
|---|---|---|---|
content_id / url | one of | The product | |
sort | string | recommended | recommended, newest, oldest, rating_desc or rating_asc |
rating | integer | none | Only reviews with this many stars, 1 to 5 |
with_media | boolean | false | Only reviews with photos |
page / page_size | integer | 1 / 20 | Page 1 to 500; 1 to 50 reviews per page |
/questions)| Parameter | Type | Default | Description |
|---|---|---|---|
content_id / url | one of | The product | |
page / page_size | integer | 1 / 20 | Page 1 to 500; 1 to 20 questions per page |
/seller)| Parameter | Type | Default | Description |
|---|---|---|---|
seller_id | id | one of | buy_box.seller.id, other_sellers[].seller.id or items[].seller.id: 4473 |
url | string | one of | A store link (/magaza/<name>-m-<id>, or /store/<name>-m-<id> on international storefronts) |
include_products | boolean | false | Also return the seller's products as a grid (still 1 credit) |
query | string | none | Search within the seller's products (with include_products) |
Plus the shared parameters for the catalog. page, sort or query without include_products answers 400.
/deals, tr only)| Parameter | Type | Default | Description |
|---|---|---|---|
type | string | flash | flash (flash deals) or super_discounts (Super Firsatlar: campaign items at a 10, 14 or 30-day low and at least 30% off) |
slot | string | the active slot | A flash slot tag from slots[].tag of a previous answer (tags are dated: fs_15_11_2026_21_24). flash only |
Plus the shared parameters.
/coupons, tr only)| Parameter | Type | Default | Description |
|---|---|---|---|
content_id / url | one of | The product | |
seller_id | id | the buy box | Another seller's listing (other_sellers[].seller.id). A seller that does not sell the product answers 404 |
/rankings)| Parameter | Type | Default | Description |
|---|---|---|---|
category_id | id | required | 56 dresses, 103498 phones, 1156 lipsticks |
ranking | string | best_seller | best_seller, most_favourited, most_rated or top_viewed |
page | integer | 1 | 1 to 5, 20 per page (the top 100) |
/suggestions)| Parameter | Type | Default | Description |
|---|---|---|---|
query | string | required | What the shopper has typed so far (1-100 chars) |
/delivery)| Parameter | Type | Default | Description |
|---|---|---|---|
content_id / url | one of | The product | |
item_number | id | the buy box's | The variant (variants[].item_number) |
listing_id | string | the buy box's | 32 hex characters (buy_box.listing_id). With item_number the product is not read first |
city_id / district_id | id | none | tr only: a Turkish city id and a district of it (Istanbul 133, Sisli 54). district_id needs city_id |
All endpoints also take country and language.
curl -X POST https://api.scavio.dev/api/v1/trendyol/search \
-H "Authorization: Bearer $SCAVIO_API_KEY" \
-H "Content-Type: application/json" \
-d '{"query": "telefon"}'
Captured data (Turkey, 2026-11-15; 1 of 36 items shown, images trimmed to 1):
{
"query": "telefon",
"items": [
{
"position": 1,
"content_id": 975557855,
"group_id": 741886069,
"listing_id": "ff1d23f6969474c32de9c4412c73db12",
"item_number": 1378939445,
"name": "Galaxy A17 4/128 GB Siyah Cep Telefonu",
"brand": {"id": 794, "name": "Samsung"},
"category": {"name": "Android Cep Telefonu"},
"url": "https://www.trendyol.com/samsung/galaxy-a17-4-128-gb-siyah-cep-telefonu-p-975557855?boutiqueId=61&merchantId=807735",
"image": "https://cdn.dsmcdn.com/mnresize/400/-/ty1000391/product/media/images/prod/PIM/20260425/10/35fee09a-a27a-4568-9b53-da4a7a1815c6/1_org_zoom.jpg",
"images": ["https://cdn.dsmcdn.com/mnresize/400/-/ty1000391/product/media/images/prod/PIM/20260425/10/35fee09a-a27a-4568-9b53-da4a7a1815c6/1_org_zoom.jpg"],
"price": 14149,
"original_price": null,
"discount_percent": null,
"rrp": null,
"plus_price": null,
"currency": "TRY",
"lowest_price_badge": null,
"badges": ["free_shipping", "rush_delivery", "next_day_delivery", "best_seller", "fast_seller"],
"best_seller_rank": 1,
"labels": ["Hızlı Satıcı", "Kargo Bedava"],
"promotions": [],
"rating": 4.47,
"review_count": 310,
"favourites": "21K",
"orders": "200+",
"seller": {"id": 807735},
"color": "Siyah",
"variant": "Tek Ebat",
"sponsored": false
}
],
"count": 27,
"sponsored_count": 9,
"total": 100000,
"total_capped": true,
"page": 1,
"page_size": 36,
"total_pages": 138,
"sort": "recommended",
"requested_filters": {},
"notes": ["sponsored items (sponsored true) are ads placed among the results and can repeat on every page; they are not counted in count.", "total is capped at 100000 by the site (it shows 100.000+); the site lists at most 138 pages of 36."],
"country": "tr",
"language": "tr",
"currency": "TRY"
}
count is the organic items on the page (27) and sponsored_count the ads (9): sponsored items sit inside items[] with sponsored: true and repeat on every page. A sponsored item and a discounted item with a lowest-price badge from the same page:
{"position": 4, "content_id": 889950721, "name": "Galaxy S25 Ultra 512 GB Titanyum Siyah (Samsung Türkiye Garantili)", "price": 72999, "currency": "TRY", "seller": {"id": 968}, "sponsored": true}
{"position": 10, "content_id": 1198082362, "name": "iPhone 18 Pro Max 512GB Burgundy", "brand": {"id": 101470, "name": "Apple"}, "price": 159999, "original_price": 166999, "discount_percent": 4, "currency": "TRY", "lowest_price_badge": {"days": 10, "text": "Son 10 Günün En Düşük Fiyatı"}, "badges": ["next_day_delivery", "best_seller", "fast_seller", "official_seller", "lowest_price"], "labels": ["Hızlı Satıcı"], "favourites": "18K", "orders": "100+", "seller": {"id": 968}, "sponsored": false}
(Other fields omitted.) favourites and orders are the site's rounded text; /product has the numeric favourite_count. total stopped at 100000 (total_capped: true).
curl -X POST https://api.scavio.dev/api/v1/trendyol/product \
-H "Authorization: Bearer $SCAVIO_API_KEY" \
-H "Content-Type: application/json" \
-d '{"content_id": "975557855"}'
Captured data (Turkey, 2026-11-15; 2 of 41 attributes, 1 of 4 images and 3 of 15 other sellers shown):
{
"content_id": 975557855,
"product_group_id": 741886069,
"product_code": "sma175fzkbtur",
"name": "Galaxy A17 4/128 GB Siyah Cep Telefonu",
"brand": {"id": 794, "name": "Samsung", "url": "https://www.trendyol.com/samsung-x-b794"},
"category": {
"id": 164461,
"name": "Android Cep Telefonu",
"path": "Elektronik/Telefon/Akıllı Cep Telefonu/Android Cep Telefonu",
"tree": [
{"id": 104024, "name": "Elektronik", "level": 1},
{"id": 104025, "name": "Telefon", "level": 2},
{"id": 103498, "name": "Cep Telefonu", "level": 3},
{"id": 164461, "name": "Android Cep Telefonu", "level": 4}
]
},
"url": "https://www.trendyol.com/samsung/galaxy-a17-4-128-gb-siyah-cep-telefonu-p-975557855",
"price": 14149,
"original_price": null,
"discount_percent": null,
"rrp": null,
"currency": "TRY",
"lowest_price_badge": null,
"in_stock": true,
"running_out": true,
"max_per_order": 1,
"color": "Siyah",
"options": [
{"name": "Internal Memory", "value": "128 GB"}
],
"variants": [
{
"attribute": null,
"value": null,
"item_number": 1378939445,
"in_stock": true,
"price": 14149,
"barcode": "8806097657514",
"selected": true
}
],
"attributes": [
{"name": "Ön Kamera Çözünürlüğü", "value": "10 - 20 MP", "starred": true},
{"name": "Dahili Hafıza", "value": "128 GB", "starred": true}
],
"images": ["https://cdn.dsmcdn.com/ty1000391/product/media/images/prod/PIM/20260425/10/35fee09a-a27a-4568-9b53-da4a7a1815c6/1_org_zoom.jpg"],
"rating": 4.47,
"rating_count": 310,
"review_count": 133,
"favourite_count": 20635,
"category_rankings": [
{"ranking": "bestSeller", "rank": 1}
],
"buy_box": {
"seller": {
"id": 807735,
"name": "Kapdiyo",
"score": 9.2,
"badges": ["fast_seller"],
"city": "Ankara",
"country": "TÜRKİYE",
"cash_on_delivery": true,
"corporate_invoice": true
},
"listing_id": "ff1d23f6969474c32de9c4412c73db12",
"item_number": 1378939445,
"price": 14149,
"original_price": null,
"discount_percent": null,
"rrp": null,
"currency": "TRY",
"free_shipping": true,
"rush_delivery_hours": 24,
"flash_sale": false,
"has_coupon": false
},
"other_sellers": [
{
"seller": {
"id": 1176505,
"name": "İzi Teknoloji",
"score": 9.6,
"badges": []
},
"listing_id": "3528c6fef9f70c185b4f41bf41758f2a",
"item_number": 1378939445,
"price": 14449,
"original_price": 14999,
"discount_percent": 4,
"rrp": null,
"currency": "TRY",
"free_shipping": true,
"rush_delivery": true,
"lowest_price_badge": {"days": 10, "text": "Son 10 Günün En Düşük Fiyatı"},
"promotions": ["350 TL ve Üzeri Kargo Bedava (Satıcı Karşılar)"]
},
{
"seller": {
"id": 628292,
"name": "TEKYILDIZ",
"score": 9.3,
"badges": ["fast_seller"]
},
"listing_id": "95f0fd870ef6211a9aa05048e2212e6d",
"item_number": 1378939445,
"price": 14450,
"original_price": null,
"discount_percent": null,
"rrp": null,
"currency": "TRY",
"free_shipping": true,
"rush_delivery": true,
"lowest_price_badge": null,
"promotions": ["350 TL ve Üzeri Kargo Bedava (Satıcı Karşılar)"]
},
{
"seller": {
"id": 139518,
"name": "SELAM BİLİŞİM",
"score": 9.2,
"badges": []
},
"listing_id": "1b8e7657ab811eae859ea9cc824017d8",
"item_number": 1378939445,
"price": 14500,
"original_price": null,
"discount_percent": null,
"rrp": null,
"currency": "TRY",
"free_shipping": true,
"rush_delivery": true,
"lowest_price_badge": null,
"promotions": ["350 TL ve Üzeri Kargo Bedava (Satıcı Karşılar)"]
}
],
"other_seller_count": 15,
"promotions": [
{
"id": 27402394,
"name": "350 TL ve Üzeri Kargo Bedava (Satıcı Karşılar)",
"short_name": "Kargo Bedava",
"type": "Cargo",
"ends_at": null
}
],
"returnable": true,
"max_installments": 1,
"vat_percent": 20,
"has_description": true,
"notes": ["price is what one unit costs at checkout (basket discounts applied); original_price is the higher price it is shown against; each international storefront has its own price list, not a currency conversion; items there are sold by Trendyol itself or by other sellers (see buy_box and other_sellers).", "lowest_price_badge is the site's own badge (lowest price of the last N days): it gives the day count only; Trendyol publishes no numeric 30-day lowest price and no price history.", "other_sellers are the other offers on this product (the buy box is the site's default seller). Reviews, questions, coupons and delivery dates are separate calls."],
"country": "tr",
"language": "tr"
}
Every offer in that capture, as returned (other_sellers[] in the site's order, not sorted by price):
| Seller | seller.id | Score | Badges | price (TRY) | original_price | Lowest-price badge |
|---|---|---|---|---|---|---|
| Kapdiyo (buy box) | 807735 | 9.2 | fast_seller | 14149 | - | - |
| İzi Teknoloji | 1176505 | 9.6 | - | 14449 | 14999 | 10 days |
| TEKYILDIZ | 628292 | 9.3 | fast_seller | 14450 | - | - |
| SELAM BİLİŞİM | 139518 | 9.2 | - | 14500 | - | - |
| Koycebine | 105150 | 9.4 | - | 14499 | - | - |
| GÜZEL TEKNOLOJİ | 472582 | 9.7 | - | 14699 | 14749 | - |
| TekCep | 116313 | 9.5 | fast_seller | 14699 | - | - |
| İLETKOM TEKNOLOJİ | 984973 | 9 | - | 14690 | - | - |
| mühendis06 cep elektronik | 1109039 | 9.2 | - | 14849 | - | - |
| TEKNOLOJİ MOBİL STORE | 738552 | 9.5 | - | 14899 | 15049 | 14 days |
| YİĞİTGSM | 474308 | 9.6 | - | 14950 | - | - |
| Referans Bilişim | 522362 | 8.8 | - | 14989 | - | - |
| BAŞARAN İLETİŞİM | 185559 | 9.3 | - | 15999 | - | - |
| Uğurlu Elektronik Shop | 149156 | 9 | - | 16799 | - | - |
| ACAR ELEKTRİKLİ EV ALETLERİ | 1312443 | 9.5 | - | 17000 | - | - |
| Semercioğlu Teknoloji | 1068117 | 8.6 | - | 20000 | - | - |
Here the buy box (Kapdiyo, score 9.2) was also the lowest price, but nine other sellers scored higher; on another product in build testing (Romania) the buy box was 43.22 RON against another offer at 85.49 RON. Never assume either way: compare the prices.
curl -X POST https://api.scavio.dev/api/v1/trendyol/category \
-H "Authorization: Bearer $SCAVIO_API_KEY" \
-H "Content-Type: application/json" \
-d '{"category_id": "103498"}'
Captured data (Turkey, 2026-11-15; items omitted, same item shape as search):
{
"category": {"id": 103498, "name": "Cep Telefonu", "url": "https://www.trendyol.com/cep-telefonu-x-c103498"},
"count": 24,
"sponsored_count": 12,
"total": 16834,
"total_capped": false,
"page": 1,
"page_size": 36,
"total_pages": 138,
"sort": "recommended",
"requested_filters": {},
"notes": ["sponsored items (sponsored true) are ads placed among the results and can repeat on every page; they are not counted in count."],
"country": "tr",
"language": "tr",
"currency": "TRY"
}
/brand with {"brand_id": "794"} answered the same grid with brand in place of category:
{
"brand": {"id": 794, "name": "Samsung", "url": "https://www.trendyol.com/samsung-x-b794"},
"count": 27,
"sponsored_count": 9,
"total": 9323,
"total_capped": false,
"page": 1,
"page_size": 36,
"total_pages": 138,
"sort": "recommended",
"requested_filters": {},
"notes": ["sponsored items (sponsored true) are ads placed among the results and can repeat on every page; they are not counted in count."],
"country": "tr",
"language": "tr",
"currency": "TRY"
}
curl -X POST https://api.scavio.dev/api/v1/trendyol/reviews \
-H "Authorization: Bearer $SCAVIO_API_KEY" \
-H "Content-Type: application/json" \
-d '{"content_id": "975557855"}'
Captured data (Turkey, 2026-11-15; 2 of 10 topics and 1 of 20 reviews shown, summary trimmed):
{
"content_id": 975557855,
"rating": 4.5,
"rating_count": 310,
"review_count": 132,
"photo_review_count": 23,
"rating_histogram": {"1": 24, "2": 7, "3": 13, "4": 21, "5": 245},
"topics": [
{"name": "Teslimat Süresi", "count": 27, "positive": 23, "negative": 4, "positive_percent": 85},
{"name": "Paketleme", "count": 18, "positive": 18, "negative": 0, "positive_percent": 100}
],
"sizes": [],
"review_summary": {
"text": "• Birçok kullanıcı, telefonun fiyat-performans dengesini oldukça başarılı bulduğunu ifade ediyor. ...",
"source": "Trendyol's own summary of the reviews, as the product page shows it"
},
"reviews": [
{
"id": 660607645,
"rating": 5,
"text": "Muhteşemdi güvenerek alabilirsin kargoda dahil sorunsuz geldi",
"date": "2026-08-28T14:55:57.783Z",
"updated_at": "2026-08-28T14:57:05.895Z",
"likes": 0,
"author": "H** K**",
"verified_buyer": true,
"elite": false,
"influencer": false,
"seller": {"id": 968, "name": "Trendyol"},
"size": null,
"fit": null,
"variant": null,
"language": "tr",
"photos": [
{
"url": "https://cdn.dsmcdn.com/mnresize/-/820/prod-product-review-media_1777680012294/img/2019922/2027898/2047838/975557855/122907886-1787929023785.jpeg",
"thumbnail": "https://cdn.dsmcdn.com/mnresize/300/300/prod-product-review-media_1777680012294/img/2019922/2027898/2047838/975557855/122907886-1787929023785.jpeg",
"type": "IMAGE"
}
]
}
],
"count": 20,
"page": 1,
"page_size": 20,
"total_pages": 7,
"sort": "recommended",
"rating_filter": null,
"with_media": false,
"notes": ["author is the display name as Trendyol shows it (already masked); reviewer height and weight are not returned."],
"country": "tr",
"language": "tr",
"currency": "TRY"
}
rating_count (310) counts star ratings and review_count (132) written reviews; a grid item's review_count is the rating count. author is the masked display name the site shows. review_summary is Trendyol's own summary, not the reviews: label it as such when you quote it.
curl -X POST https://api.scavio.dev/api/v1/trendyol/questions \
-H "Authorization: Bearer $SCAVIO_API_KEY" \
-H "Content-Type: application/json" \
-d '{"content_id": "975557855"}'
Captured data (Turkey, 2026-11-15; 2 of 9 topics and 1 of 20 questions shown):
{
"content_id": 975557855,
"total": 111,
"total_asked": 234,
"topics": [
{"name": "Uyumluluk", "count": 14},
{"name": "Garanti Kapsamı", "count": 12}
],
"questions": [
{
"id": 466430145,
"text": "kaç yıl garantili",
"original_text": null,
"date": "2026-11-14T17:40:09.822Z",
"verified_buyer": false,
"answer": {
"text": "2 yıl Samsung Türkiye garantili efendim",
"original_text": null,
"answered_in": "1 dakika içinde cevaplandı.",
"seller": {"id": 807735, "name": "Kapdiyo"}
}
}
],
"count": 20,
"page": 1,
"page_size": 20,
"total_pages": 6,
"notes": ["Only answered questions are listed (as on the site); askers are not named.", "Questions and answers asked in another language are shown translated by Trendyol; original_text is what was written."],
"country": "tr",
"language": "tr",
"currency": "TRY"
}
curl -X POST https://api.scavio.dev/api/v1/trendyol/seller \
-H "Authorization: Bearer $SCAVIO_API_KEY" \
-H "Content-Type: application/json" \
-d '{"seller_id": "4473"}'
Captured data (Turkey, 2026-11-15; 3 of 7 metrics shown):
{
"seller": {
"id": 4473,
"name": "Flormar",
"score": 9.3,
"score_scale": 10,
"product_count": 843,
"product_count_capped": false,
"follower_count": 4740163,
"followers_text": "4,7M",
"follower_coupon": {"discount": 50, "discount_type": "AMOUNT", "min_basket": 800},
"badges": [],
"ranking": "Kozmetik Kategorisinde En trend Mağaza",
"city": "İstanbul",
"on_trendyol_for": "8 Yıl",
"average_shipping_time": "< 12 Saat",
"question_response_time": "45-60 Dk",
"average_product_rating": 4.4,
"average_seller_rating": null,
"corporate_invoice": "Uygun",
"metrics": [
{"id": "activationDate", "title": "Trendyol'daki Süresi", "value": "8 Yıl"},
{"id": "location", "title": "Konum", "value": "İstanbul"},
{"id": "corporateInvoice", "title": "Kurumsal Fatura", "value": "Uygun"}
],
"logo": "https://cdn.dsmcdn.com/seller-store/uploads/4473/fba801e1-c8b6-4ac6-83a3-e835458e2383.jpg",
"store_url": "https://www.trendyol.com/magaza/flormar-m-4473"
},
"notes": ["The seller's legal disclosure (registered e-mail, tax number, address, legal name) is not returned."],
"country": "tr",
"language": "tr",
"currency": "TRY"
}
Text fields such as on_trendyol_for, average_shipping_time and corporate_invoice are the site's wording in the request language. score is out of score_scale (10).
tr)curl -X POST https://api.scavio.dev/api/v1/trendyol/deals \
-H "Authorization: Bearer $SCAVIO_API_KEY" \
-H "Content-Type: application/json" \
-d '{}'
Captured data (flash deals, 2026-11-15; 1 of 36 items shown):
{
"type": "flash",
"slot": "fs_15_11_2026_21_24,fs_15_11_2026_0_24",
"slots": [
{
"tag": "fs_15_11_2026_21_24,fs_15_11_2026_0_24",
"status": "active",
"date": "2026-11-15",
"start": "21:00",
"end": "24:00"
},
{"tag": "fs_15_11_2026_21_24", "status": "upcoming", "date": "2026-11-15", "start": "21:00", "end": "24:00"}
],
"items": [
{
"position": 5,
"content_id": 962572327,
"group_id": 731085870,
"listing_id": "24015e0c647e6b8755f26e3259de271f",
"item_number": 1362287176,
"name": "Papatya Suyu Saç Açıcı ve Parlaklık Veren Tonik %100 Doğal ve Saf 100 ml",
"brand": {"id": null, "name": "Rivance"},
"category": {"name": "Saç Toniği"},
"url": "https://www.trendyol.com/rivance/papatya-suyu-sac-acici-ve-parlaklik-veren-tonik-100-dogal-ve-saf-100-ml-p-962572327?boutiqueId=61&merchantId=781333",
"image": "https://cdn.dsmcdn.com/mnresize/400/-/ty1717/prod/QC_PREP/20250730/11/760655b3-239a-3dfe-965e-d870d3e48c05/1_org_zoom.jpg",
"images": ["https://cdn.dsmcdn.com/mnresize/400/-/ty1717/prod/QC_PREP/20250730/11/760655b3-239a-3dfe-965e-d870d3e48c05/1_org_zoom.jpg"],
"price": 157.56,
"original_price": 162.28,
"discount_percent": 3,
"rrp": null,
"plus_price": null,
"currency": "TRY",
"lowest_price_badge": {"days": 30, "text": "Son 30 Günün En Düşük Fiyatı"},
"badges": ["rush_delivery", "next_day_delivery", "flash_sale", "fast_seller", "lowest_price"],
"best_seller_rank": null,
"labels": ["Hızlı Satıcı", "2. Ürün %10"],
"promotions": ["Kod: RIVANCE100 - 600 TL'ye 100 TL İndirim", "2. Ürüne %10 İndirim"],
"rating": 4.17,
"review_count": 757,
"favourites": "89K",
"orders": "100+",
"seller": {"id": 781333},
"color": null,
"variant": "Tek Ebat",
"sponsored": false
}
],
"count": 24,
"sponsored_count": 12,
"total": 96430,
"total_capped": false,
"page": 1,
"page_size": 36,
"total_pages": 138,
"sort": "recommended",
"requested_filters": {},
"notes": ["Flash slot tags are dated (fs_<day>_<month>_<year>_<start>_<end>): send one from slots[].tag; the active slot is the default.", "sponsored items (sponsored true) are ads placed among the results and can repeat on every page; they are not counted in count."],
"country": "tr",
"language": "tr",
"currency": "TRY"
}
An upcoming slot lists no items until it opens.
tr)curl -X POST https://api.scavio.dev/api/v1/trendyol/coupons \
-H "Authorization: Bearer $SCAVIO_API_KEY" \
-H "Content-Type: application/json" \
-d '{"content_id": "1164743007"}'
Captured data (2026-11-15):
{
"content_id": 1164743007,
"product": {
"name": "Spiface Charm Küpe Kulaklık",
"seller": {"id": 1246625, "name": "Teknolara"},
"price": 902.09,
"currency": "TRY"
},
"coupons": [
{
"id": "Master:dceb0781-f444-42d4-acf6-da769989f7c7",
"discount": 75,
"discount_type": "amount",
"discount_amount": 75,
"discount_percent": null,
"max_discount": null,
"min_basket": 700,
"currency": "TRY",
"valid_until": "2026-12-03T23:59:59",
"issued_by": "Seller Center",
"seller_id": 1246625,
"link": "https://www.trendyol.com/sr?mid=1246625",
"mega_coupon": false,
"plus_members_only": false,
"messages": [],
"collectable": true
}
],
"count": 1,
"notes": ["Coupons are collected on the site and applied at checkout when the basket reaches min_basket; valid_until is Turkey time (Europe/Istanbul)."],
"country": "tr",
"language": "tr",
"currency": "TRY"
}
In build testing product 780343279's buy box had no coupons while another seller (seller_id 1188867) had 2: check other_sellers[] before concluding a product has none.
curl -X POST https://api.scavio.dev/api/v1/trendyol/rankings \
-H "Authorization: Bearer $SCAVIO_API_KEY" \
-H "Content-Type: application/json" \
-d '{"category_id": "56"}'
Captured data (Turkey, dresses, 2026-11-15; 1 of 20 items shown):
{
"ranking": "best_seller",
"category": {"id": 56, "name": "Elbise"},
"items": [
{
"rank": 1,
"content_id": 1090399394,
"listing_id": "d3d913cdbd96c79034a63e72b80f495e",
"name": "Siyah Kadın Dik Yaka Toka Detaylı Kuşaklı Toparlayıcı Kalıp Mini Elbise",
"brand": {"id": 166030, "name": "World Fashion Trends"},
"url": "https://www.trendyol.com/world-fashion-trends/siyah-kadin-dik-yaka-toka-detayli-kusakli-toparlayici-kalip-mini-elbise-p-1090399394",
"image": "https://cdn.dsmcdn.com/ty2012/prod/QC_ENRICHMENT/20261109/09/86f6fca7-760f-3f9a-9c42-e65aac007386/1_org_zoom.jpg",
"images": ["https://cdn.dsmcdn.com/ty2012/prod/QC_ENRICHMENT/20261109/09/86f6fca7-760f-3f9a-9c42-e65aac007386/1_org_zoom.jpg"],
"price": 440.1,
"original_price": 489,
"discount_percent": 10,
"rrp": null,
"currency": "TRY",
"lowest_price_badge": null,
"badges": ["free_shipping"],
"promotions": ["Sepette %10 İndirim", "350 TL ve Üzeri Kargo Bedava (Satıcı Karşılar)"],
"rating": 4.36,
"review_count": 1401,
"in_stock": true,
"running_out": false,
"seller": {"id": 868610}
}
],
"count": 20,
"total": 100,
"page": 1,
"page_size": 20,
"total_pages": 5,
"notes": ["Trendyol ranks the top 100 of a category (5 pages of 20)."],
"country": "tr",
"language": "tr",
"currency": "TRY"
}
curl -X POST https://api.scavio.dev/api/v1/trendyol/suggestions \
-H "Authorization: Bearer $SCAVIO_API_KEY" \
-H "Content-Type: application/json" \
-d '{"query": "iph"}'
Captured data (Turkey, 2026-11-15; 3 of 11 suggestions shown):
{
"query": "iph",
"suggestions": [
{
"text": "iphone 15",
"type": "keyword",
"site_type": null,
"url": "https://www.trendyol.com/sr?q=iphone%2015&qt=iphone%2015&st=iphone%2015&os=1&sk=1",
"category_ids": null,
"seller_id": null,
"brand_id": null,
"image": null
},
{
"text": "Akıllı Cep Telefonları",
"type": "category",
"site_type": "Kampanya",
"url": "https://www.trendyol.com/sr?wc=109461,164461,164462&os=1&sk=1&sk=1",
"category_ids": [109461, 164461, 164462],
"seller_id": null,
"brand_id": null,
"image": null
},
{
"text": "iphonoloji",
"type": "store",
"site_type": "Mağaza",
"url": "https://www.trendyol.com/magaza/magaza-m-118106?sk=1",
"category_ids": null,
"seller_id": 118106,
"brand_id": null,
"image": "https://cdn.dsmcdn.com/seller-store/uploads/118106/logo.jpeg"
}
],
"count": 11,
"country": "tr",
"language": "tr",
"currency": "TRY"
}
A store suggestion's seller_id works on /seller.
curl -X POST https://api.scavio.dev/api/v1/trendyol/delivery \
-H "Authorization: Bearer $SCAVIO_API_KEY" \
-H "Content-Type: application/json" \
-d '{"content_id": "975557855", "city_id": "133", "district_id": "54"}'
Captured data (Istanbul, Sisli, 2026-11-15; the buy box and 1 of 82 other listings shown):
{
"content_id": 975557855,
"item_number": 1378939445,
"city_id": 133,
"district_id": 54,
"time_zone": "Europe/Istanbul",
"listings": [
{
"listing_id": "ff1d23f6969474c32de9c4412c73db12",
"delivery": {"start": "2026-11-16T04:53:14", "end": "2026-11-18T04:53:14"},
"ships_by": "2026-11-16T23:59:00",
"ships_in_days": 1,
"fast_options": [
{"type": "tomorrow_shipping", "daily_cutoff": "00:00"}
],
"tomorrow_shipping_cutoff": "00:00",
"same_day_shipping_cutoff": null,
"rush_delivery_hours": 24,
"agreed_delivery_days": 0,
"local_delivery": true,
"carriers": [],
"seller": {"id": 807735, "name": "Kapdiyo"},
"buy_box": true
},
{
"listing_id": "9322d0bd34466c7799a7d7f69ef14716",
"delivery": {"start": "2026-11-16T04:53:14", "end": "2026-11-19T04:53:14"},
"ships_by": "2026-11-16T23:59:00",
"ships_in_days": 1,
"fast_options": [
{"type": "tomorrow_shipping", "daily_cutoff": "00:00"}
],
"tomorrow_shipping_cutoff": "00:00",
"same_day_shipping_cutoff": null,
"rush_delivery_hours": 24,
"agreed_delivery_days": 1,
"local_delivery": true,
"carriers": [],
"seller": null,
"buy_box": false
}
],
"count": 83,
"notes": ["Dates are local times in time_zone, as the site shows them.", "Trendyol estimates every listing of the item; seller is named for the buy box and the other sellers the product page lists, null for the rest."],
"country": "tr",
"language": "tr",
"currency": "TRY"
}
Dates are local times in time_zone. seller is named for the buy box and the sellers the product page lists, null for the rest.
import time
import requests
BASE = "https://api.scavio.dev"
# Your key from https://scavio.dev. Load it from your environment or secret
# store in real code - keep it out of source control.
API_KEY = "sk_your_key_here"
HEADERS = {"Authorization": f"Bearer {API_KEY}"}
def ty(endpoint, body, timeout=180):
r = requests.post(f"{BASE}/api/v1/trendyol/{endpoint}", headers=HEADERS, json=body, timeout=timeout)
if r.status_code == 404:
return None # unknown, or not sold on that storefront (charged)
r.raise_for_status()
return r.json()["data"]
# Every seller's price for one product (1 credit).
p = ty("product", {"content_id": "975557855"})
captured_at = time.strftime("%Y-%m-%dT%H:%M:%SZ", time.gmtime())
offers = [{"seller": p["buy_box"]["seller"], "price": p["buy_box"]["price"], "buy_box": True}]
offers += [{"seller": o["seller"], "price": o["price"], "buy_box": False, "badge": o["lowest_price_badge"]} for o in p["other_sellers"]]
offers.sort(key=lambda o: o["price"]) # the site's order is not by price
cheapest = offers[0]
print(p["name"], p["currency"], captured_at)
print("buy box:", p["buy_box"]["seller"]["name"], p["buy_box"]["price"])
print("cheapest:", cheapest["seller"]["name"], cheapest["price"], "(buy box)" if cheapest["buy_box"] else "")
for o in offers:
print(o["seller"]["id"], o["seller"]["name"], o["seller"]["score"], o["price"])
# Store `offers` with captured_at, country and currency, and run this on a schedule:
# that stored series is your price history (Trendyol publishes none).
Every response uses the envelope { data, response_time, fetched_at, credits_used, credits_remaining }. Everything is fetched live; nothing is cached. Every data echoes country, language and currency. Prices are numbers in the market's currency, never converted. notes appears when there is something to say.
position, content_id, group_id, listing_id, item_number, name, brand {id, name}, category {name}, url, image, images[], price, original_price, discount_percent, rrp, plus_price, currency, lowest_price_badge {days, text} or null, badges[] (free_shipping, rush_delivery, next_day_delivery, same_day_shipping, ships_tomorrow, flash_sale, coupon, best_seller, fast_seller, official_seller, lowest_price), best_seller_rank, labels[] (the site's own badge texts), promotions[], rating, review_count, favourites and orders (the site's rounded text), seller {id}, color, variant, sponsored.items[], count (organic items), sponsored_count, total, total_capped, page, page_size (36), total_pages (at most 138), sort, requested_filters and, with include_facets, facets[] {param, key, name, type, options[] {value, label, count}, option_count, min / max}. Search adds query; category adds category {id, name, url}; brand adds brand {id, name, url}; deals adds type, slot, slots[] {tag, status, date, start, end}.content_id, product_group_id, product_code, name, brand {id, name, url}, category {id, name, path, tree[] {id, name, level}}, url, price, original_price, discount_percent, rrp, currency, lowest_price_badge, in_stock, running_out, max_per_order, color, options[] {name, value}, variants[] {attribute, value, item_number, in_stock, price, barcode, selected}, attributes[] {name, value, starred}, images[], rating, rating_count, review_count, favourite_count, category_rankings[] {ranking, rank}, buy_box {seller {id, name, score, badges, city, country, cash_on_delivery, corporate_invoice}, listing_id, item_number, price, original_price, discount_percent, rrp, currency, free_shipping, rush_delivery_hours, flash_sale, has_coupon}, other_sellers[] {seller {id, name, score, badges}, listing_id, item_number, price, original_price, discount_percent, rrp, currency, free_shipping, rush_delivery, lowest_price_badge, promotions[]}, other_seller_count, promotions[] {id, name, short_name, type, ends_at}, returnable, max_installments, vat_percent, has_description, description and description_html (with include_description), notes[].content_id, rating, rating_count, review_count, photo_review_count, rating_histogram {1 to 5}, topics[] {name, count, positive, negative, positive_percent}, sizes[], review_summary {text, source}, reviews[] {id, rating, text, date, updated_at, likes, author, verified_buyer, elite, influencer, seller {id, name}, size, fit, variant, language, photos[] {url, thumbnail, type}}, count, page, page_size, total_pages, sort, rating_filter, with_media.content_id, total, total_asked, topics[] {name, count}, questions[] {id, text, original_text, date, verified_buyer, answer {text, original_text, answered_in, seller {id, name}}}, count, page, page_size, total_pages.seller {id, name, score, score_scale, product_count, product_count_capped, follower_count, followers_text, follower_coupon, badges[], ranking, city, on_trendyol_for, average_shipping_time, question_response_time, average_product_rating, average_seller_rating, corporate_invoice, metrics[] {id, title, value}, logo, store_url} plus, with include_products, the grid of the seller's catalog.content_id, product {name, seller {id, name}, price, currency}, coupons[] {id, discount, discount_type (amount or percent), discount_amount, discount_percent, max_discount, min_basket, currency, valid_until (Turkey time), issued_by, seller_id, link, mega_coupon, plus_members_only, messages[], collectable}, count.ranking, category {id, name}, items[] {rank, content_id, listing_id, name, brand, url, image, images[], price, original_price, discount_percent, rrp, currency, lowest_price_badge, badges[], promotions[], rating, review_count, in_stock, running_out, seller {id}}, count, total, page, page_size (20), total_pages.query, suggestions[] {text, type (keyword, category, brand, store or other), site_type, url, category_ids, seller_id, brand_id, image}, count.content_id, item_number, city_id, district_id, time_zone, listings[] {listing_id, delivery {start, end}, ships_by, ships_in_days, fast_options[] {type, daily_cutoff}, tomorrow_shipping_cutoff, same_day_shipping_cutoff, rush_delivery_hours, agreed_delivery_days, local_delivery, carriers[], seller {id, name} or null, buy_box}, count.price is what one unit costs at checkout (basket discounts applied); original_price is the higher price it is shown against (the previous price, the price before the basket discount, or the recommended retail price), and discount_percent is computed from the two. rrp is the recommended retail price where shown, plus_price the Trendyol Plus member price. Never call original_price the 30-day lowest price or yesterday's price, and never present discount_percent as a measured price drop.lowest_price_badge.days is the span of the site's "lowest price of the last N days" tag (10, 14, 30, 90 on tr; 7, 14, 30 elsewhere, with text null). It is a day count, never a price: Trendyol publishes no numeric 30-day lowest price and no price history. For a measured change, compare your own stored readings.other_sellers[] comes in the site's order, not sorted by price: sort before naming the cheapest seller. Busy products list 15 or more other sellers.sponsored: true, 9 to 12 of 36 in the captures, up to about 20) that repeat on every page; count excludes them. Drop them before ranking, counting or deduplicating across pages.total stops counting at 100000 (total_capped: true). Narrow with filters past that.favourites and orders are the site's rounded text (21K, 200+), not numbers. A grid item's review_count is the rating count; /product and /reviews give rating_count and review_count separately.tr only; rankings are not on the 15 English-language EU storefronts (fr, be, hr, dk, ee, fi, it, lv, lt, nl, pt, si, es, se, lu); city_id / district_id on delivery are tr only (Istanbul 133, Sisli 54; there is no city list endpoint).other_sellers[].seller.id with seller_id before saying a product has no coupon. valid_until is Turkey time.H** K**); reviewer height and weight, question askers and sellers' legal disclosures (registered e-mail, tax number, address, legal name) are never returned. No personal data beyond what the page shows masked. Quote short review excerpts only.original_text holds what was written); reviews there are the ones written in that language.url.400 means a missing or invalid parameter, and it is not charged: a country outside the endpoint's markets (deals or coupons off tr; rankings on an English-language EU storefront; ge, kz, kg, iq, ie, mt, gb, uk, ru, us, ca, jo, lb); a language the market does not serve; neither content_id nor url (or seller_id / category_id / brand_id and url), or an id and a url that disagree; an id that is not digits; a listing_id that is not 32 hex characters; a url that is not a Trendyol product, category, brand or store link on trendyol.com, trendyol.ae or trendyol.sa, or a language-only link without country; page above 138 (rankings above 5); a sort, ranking, type, seller_type, min_rating or lowest_price_days outside its list; price_max below price_min; a filters key that is not a facet param or is already set by a named parameter; slot with super_discounts or a slot that is not a tag from slots[]; page, sort or query on /seller without include_products; city_id / district_id off tr, or district_id without city_id.401 means the API key is invalid or missing. Check SCAVIO_API_KEY.402 means the balance is out of credits. The body carries billing_url.404 means not found, and it is charged: "Trendyol has no product ...", "Trendyol does not sell product ... on its ... storefront (unknown, or not sold in this market).", "Trendyol has no category / brand ...", "Trendyol has no seller ...", "Seller ... does not sell product ...", "Product ... has no variant item_number ...", "Trendyol has no ... list for category ...", "No flash sale is running on Trendyol right now", "Trendyol found nothing for this request.". Take ids from a previous answer rather than guessing them.429 means rate or usage limit exceeded. Wait before retrying. See rate limits.502 means Trendyol data was temporarily unavailable ("Trendyol is temporarily unavailable. Please try again."). It is retried automatically and not charged, so retry after a few seconds.503 with a Retry-After header means Trendyol is busy ("Trendyol is busy right now. Please retry in a few seconds."): wait the Retry-After seconds (5) and send it again. Not charged.SCAVIO_API_KEY is not set, prompt the user to export it before continuing.pip install scavio==0.60.1
npm install scavio@0.61.1
import { Scavio } from "scavio";
const scavio = new Scavio(); // reads SCAVIO_API_KEY
const { data: found } = await scavio.trendyol.search({ query: "telefon", sort: "price_asc" });
const { data: phone } = await scavio.trendyol.product({ content_id: "975557855" });
const { data: phones } = await scavio.trendyol.category({ category_id: "103498", seller_type: "official" });
const { data: samsung } = await scavio.trendyol.brand({ brand_id: "794" });
const { data: reviews } = await scavio.trendyol.reviews({ content_id: "975557855", sort: "newest" });
const { data: questions } = await scavio.trendyol.questions({ content_id: "975557855" });
const { data: seller } = await scavio.trendyol.seller({ seller_id: "4473", include_products: true });
const { data: flash } = await scavio.trendyol.deals({ type: "flash" });
const { data: coupons } = await scavio.trendyol.coupons({ content_id: "1164743007" });
const { data: top } = await scavio.trendyol.rankings({ category_id: "56", ranking: "best_seller" });
const { data: suggestions } = await scavio.trendyol.suggestions({ query: "iph" });
const { data: delivery } = await scavio.trendyol.delivery({ content_id: "975557855", city_id: "133", district_id: "54" });
In Python (from scavio import ScavioClient, client = ScavioClient()) the same methods are client.trendyol.search(...), client.trendyol.product(...), client.trendyol.category(...), client.trendyol.brand(...), client.trendyol.reviews(...), client.trendyol.questions(...), client.trendyol.seller(...), client.trendyol.deals(...), client.trendyol.coupons(...), client.trendyol.rankings(...), client.trendyol.suggestions(...) and client.trendyol.delivery(...), with the same parameter names as keyword arguments.
The Scavio MCP server exposes all twelve endpoints as tools: search_trendyol, get_trendyol_product, get_trendyol_category, get_trendyol_brand, get_trendyol_reviews, get_trendyol_questions, get_trendyol_seller, get_trendyol_deals, get_trendyol_coupons, get_trendyol_rankings, get_trendyol_suggestions and get_trendyol_delivery. Trendyol is opt-in: add trendyol to SCAVIO_PLATFORMS.
{
"mcpServers": {
"scavio": {
"command": "npx",
"args": ["-y", "@scavio/mcp-server@0.58.1"],
"env": {
"SCAVIO_API_KEY": "sk_live_your_key",
"SCAVIO_PLATFORMS": "default,trendyol"
}
}
}
}
Full reference per endpoint: search, product, category, brand, reviews, questions, seller, deals, coupons, rankings, suggestions, delivery. Overview: Trendyol API.