Looking for the overview — what this API returns, what it costs, and a call you can run without a key? See the Trendyol API page →
E-commerce & Marketplaces

Trendyol API & Scraper

The Trendyol API returns product data from Turkey's largest e-commerce marketplace as clean JSON.

16 actionsLive JSON1,000 free credits$0.67–$1.50 / 1,000 creditsMCP-ready
Get a free keyOpen in playground

🤖 Using an AI assistant? Copy this link into ChatGPT / Claude / Cursor — it reads every endpoint and parameter instantly and tells you if this API fits your use case.

The primary product/detail endpoint returns a product's content id, title, brand, price (current, list, discount, coupon, TY-plus) and campaign, and you can pull product/reviews, similar products, run a search with filters, browse a category, pull a seller's products and info, and get suggestions. It is built for price intelligence, catalog enrichment and Turkish e-commerce analytics that need Trendyol data without a scraper. One ReefAPI key, one shared credit pool, the standard envelope.

Reference

Trendyol ids, price formats and the numbers behind them

Two things trip up a first integration here. Every price is returned twice, once as a locale-formatted Turkish string and once as a number, and Trendyol uses four different numeric ids that all look alike. The values below were read from live calls on the iPhone 15 128 GB listing (content_id 762254881) and a laptop search on 2026-08-27.

FieldMeasured valueWhat it means
price.current / current_value"49.999 TL" / 49999Turkish formatting: the dot is a thousands separator. The string reads as 49.99 in most parsers. Always use current_value.
price (search row)"74,90 TL" / price_value 74.9In the same API a comma is the decimal separator. The two formats coexist, which is why the *_value fields exist.
content_id762254881The digits after -p- in a product URL. This is what product/detail, product/reviews and product/similar take.
product_group_id580170099The parent group a product's colour and storage variants belong to. Not interchangeable with content_id.
seller_id / merchant_id968 (Trendyol), 275331 (MediaMarkt)The digits after -m- in a store URL. Feeds seller/info and seller/products. Search rows expose it as merchant_id.
category.id5473 ("IOS Cep Telefonları")The digits after -c in a category URL. Feeds category/products. Detail also returns the full hierarchy string.
brand filter id102323 = LENOVO, 101606 = ASUS, 101849 = HPThe brand parameter takes a numeric id, never a brand name. Get ids from search/filters, facet "Marka".
currency"TRY"Every price on every action is Turkish lira. There is no currency parameter.

Paging is deliberately inconsistent between actions, because Trendyol's own endpoints are. search, category/products and seller/products are 1-based at roughly 24 products per page with max_pages capped at 10, while product/reviews is 0-based with page_size up to 50. summary.total_pages on reviews is computed for the page_size you sent: the same product reported 313 pages at page_size 3.

Live example

Real request and response JSON

Captured from the indexed primary action, search, on .

Captured request
{
  "method": "POST",
  "url": "https://api.reefapi.com/trendyol/v1/search",
  "headers": {
    "x-api-key": "$REEF_KEY",
    "content-type": "application/json"
  },
  "body": {
    "query": "iphone"
  }
}
Captured response
{
  "ok": true,
  "meta": {
    "api": "trendyol",
    "endpoint": "search",
    "mode": "live",
    "latency_ms": 1121.7,
    "record_count": 36,
    "bytes": 188571,
    "cache_hit": false,
    "version": "0.1",
    "total_count": 100000,
    "page": 1,
    "pagination": {
      "page": 1,
      "has_more": true
    },
    "charged_credits": 2
  },
  "data": {
    "results": [
      {
        "content_id": 985256821,
        "product_group_id": 750312515,
        "title": "iPhone 17 Pro Max 256GB Gümüş",
        "brand": "Apple",
        "url": "https://www.trendyol.com/apple/iphone-17-pro-max-256gb-gumus-p-985256821?boutiqueId=689770&merchantId=968",
        "category": "IOS Cep Telefonları",
        "merchant_id": 968,
        "image": "https://cdn.dsmcdn.com/mnresize/400/-/ty1788/prod/QC_PREP/20251118/16/630c73c3-2c09-3158-9ad1-80cff418884c/1_org_zoom.jpg",
        "price": "123.499 TL",
        "price_value": 123499,
        "list_price": null,
        "list_price_value": null,
        "rating": 4.611111111111111,
        "comment_count": 180,
        "free_cargo": false,
        "fast_delivery": null,
        "flash_sale": null
      },
      {
        "content_id": 985256825,
        "product_group_id": 750312515,
        "title": "iPhone 17 Pro Max 256GB Kozmik Turuncu",
        "brand": "Apple",
        "url": "https://www.trendyol.com/apple/iphone-17-pro-max-256gb-kozmik-turuncu-p-985256825?boutiqueId=689770&merchantId=968",
        "category": "IOS Cep Telefonları",
        "merchant_id": 968,
        "image": "https://cdn.dsmcdn.com/mnresize/400/-/ty1761/prod/QC_PREP/20250922/16/5d65ec4d-08cd-32aa-979f-f33fb44a989d/1_org_zoom.jpg",
        "price": "119.999 TL",
        "price_value": 119999,
        "list_price": null,
        "list_price_value": null,
        "rating": 4.597938144329897,
        "comment_count": 194,
        "free_cargo": false,
        "fast_delivery": null,
        "flash_sale": null
      },
      {
        "content_id": 762254881,
        "product_group_id": 580170099,
        "title": "iPhone 15 128 GB Mavi",
        "brand": "Apple",
        "url": "https://www.trendyol.com/apple/iphone-15-128-gb-mavi-p-762254881?boutiqueId=689770&merchantId=968",
        "category": "IOS Cep Telefonları",
        "merchant_id": 968,
        "image": "https://cdn.dsmcdn.com/mnresize/400/-/ty1609/prod/QC/20241202/09/d1662cea-116d-3e2c-9a7a-66c6204ea0a3/1_org_zoom.jpg",
        "price": "57.249 TL",
        "price_value": 57249,
        "list_price": null,
        "list_price_value": null,
        "rating": 4.643058161350845,
        "comment_count": 2132,
        "free_cargo": false,
        "fast_delivery": null,
        "flash_sale": null
      }
    ],
    "query": "iphone"
  }
}
Actions

What the Trendyol API does

ActionDescriptionConcrete use caseKey params
product/offersSelected seller and published competing seller offers for a product. Selected seller first, then competitors ordered by price. Stock is null where unpublished.Pricing teams call product/offers to get selected seller and published competing seller offers for a product.content_id, url, limit
product/variantsPublished catalog variants and barcodes. Catalog prices can differ from the selected merchant. selected_offer_price is populated only for the matching selected item_number; other merchant-specific variant prices remain null.Marketplace operators call product/variants to get published catalog variants and barcodes.content_id, url
product/descriptionLong product description as HTML, plain text and image URLs. Image-only descriptions are supported. An existing product without a description returns has_description=false. Treat returned HTML as untrusted data before displaying it.Catalog enrichment teams call product/description to get long product description as HTML, plain text and image URLs.content_id, url
product/questionsPublished answered product questions, with seller replies and zero-based pagination. total_count describes the returned question collection; content_total_count is a separate broader source summary.Retail analysts call product/questions to get published answered product questions, with seller replies and zero-based pagination.content_id, url, page, page_size
product/couponsPublicly visible coupons for the selected product and seller. Includes discount type, minimum spend, expiry and conditions. Anonymous visibility does not confirm personal eligibility or redemption; coupons are not subtracted from the product price.Pricing teams call product/coupons to get publicly visible coupons for the selected product and seller.content_id, url
product/detailfull product by `url` OR `content_id`: title/brand/price(current+list+discount%/coupon/ty+)/campaign(+campaigns[])/rating+comment_count/in_stock/seller(+score)/other_offers[] (EVERY competing seller on the same listing WITH its store id, store name, seller score, price and campaign — seller-level price comparison in this one call)/category/images/attributes(specs)/variants. The dual-use influencer module.Marketplace operators call product/detail to get full product by `url` OR `content_id`.url, content_id
product/reviewsPaginated customer reviews by `content_id` OR `url`, in the order you ask for. `sort=newest` returns the most recently posted reviews first and keeps that order across every page, so you can poll a product for new reviews; without `sort` Trendyol returns its own 'recommended' order, which is not chronological. Every page carries the real totals (average rating, how many people rated, how many wrote a comment, star breakdown, total_pages for your page_size) so you know when to stop. Reviewer names are published by Trendyol already masked.Catalog enrichment teams call product/reviews to get paginated customer reviews by `content_id` OR `url`, in the order you ask for.content_id, url, page, page_size, sort
product/similarTrendyol's own 'Benzer Ürünler' recommendation rail for a product, by `content_id` OR `url` — the products Trendyol itself puts in front of a shopper looking at this one, so you get its live view of the competitive set (same category, comparable specs) rather than a keyword guess. Each row is a full product card (price, list price, rating, review count, seller, stock) usable directly for price benchmarking, or feed results[].content_id straight into product/detail. Paginated 0-BASED; meta.pagination.has_more tells you when the rail is exhausted.Retail analysts call product/similar to get trendyol's own 'Benzer Ürünler' recommendation rail for a product, by `content_id` OR `url`.content_id, url, page, size
searchSearch Trendyol products by keyword with optional sort & price/brand filters → results[]{content_id,title,brand,url,price,list_price,rating,comment_count,category,image,free_cargo}. Resolves content_ids for product/detail. Paginated+deduped (page 1-based, max_pages ≤10). meta.total_count = full result-set size.Pricing teams call search to search Trendyol products by keyword with optional sort & price/brand filters → results[]{cont….query, page, max_pages, sort, price, ...
search/filtersDiscover the available filter facets for a `query` OR `category_id` before filtering — brands (with ids for the `brand` param), price ranges, product ratings, and category-specific attributes (RAM, screen size, color, …) each with live result counts.Marketplace operators call search/filters to discover the available filter facets for a `query` OR `category_id` before filtering.query, category_id
category/productsBrowse a Trendyol category by id — best-sellers, newest, or price/brand-filtered product lists. Same card shape as search. Get a category_id from a product's category.id (product/detail) or the '-c<id>' in a category URL.Catalog enrichment teams call category/products to get browse a Trendyol category by id.category_id, url, page, max_pages, sort, ...
seller/productsAll products of a Trendyol seller/store (paginated, sortable, filterable) by seller_id. Same card shape as search. meta.total_count = the seller's full catalog size.Retail analysts call seller/products to get all products of a Trendyol seller/store (paginated, sortable, filterable) by seller_id.seller_id, url, page, max_pages, sort, ...
seller/infoTrendyol seller/store profile by seller_id: store name, legal entity (official_name), total product_count, seller score, and trust badges.Pricing teams call seller/info to get trendyol seller/store profile by seller_id.seller_id, url
seller/categoriesTrendyol's seller category tree, as used for product uploads: every category with its id, full path and whether it is a leaf (products are uploaded to leaf categories). Filter with `query`; take the id to seller/category-attributes for that category's upload template.Marketplace operators call seller/categories to get trendyol's seller category tree, as used for product uploads.query, leaf_only, limit
seller/category-attributesThe product upload template of one Trendyol category: every attribute a listing in it takes, whether it is required, whether a custom value is allowed, whether it creates variants (varianter) or splits listings (slicer), and the allowed values.Catalog enrichment teams call seller/category-attributes to get the product upload template of one Trendyol category.category_id
suggestkeyword suggestions for a query (ops; search-fallback if suggest API blocked)Retail analysts call suggest to get keyword suggestions for a query (ops; search-fallback if suggest API blocked).query
Code samples

Call search from your stack

curl -X POST https://api.reefapi.com/trendyol/v1/search \
  -H "x-api-key: $REEF_KEY" \
  -H "content-type: application/json" \
  -d '{"query":"iphone"}'
MCP one-liner
Ask your MCP-connected assistant: call reefapi.trendyol.search with {"query":"iphone"}.
Use cases

Who uses this API and why

  • Pricing teams call search and product/detail to track Trendyol prices, discounts and coupons.
  • Catalog-enrichment tools use product/detail and reviews to fill listings with specs and ratings.
  • Seller-intelligence products use seller/products to audit a competitor's full Trendyol catalog.
FAQ

Questions developers ask before integrating

Why does price.current say "49.999 TL" for a phone that costs 50,000 lira?

Because it is Turkish number formatting, where the dot separates thousands. "49.999 TL" is 49,999 TRY, not 49.999. The same response also returns price.current_value as the plain number 49999, and search rows pair price "74,90 TL" with price_value 74.9, a comma for decimals in the same API. Parse the *_value fields and treat the formatted strings as display text only.

What is the difference between content_id and product_group_id?

content_id identifies one buyable product page, the digits after -p- in the URL, and it is the only id the product actions accept. product_group_id identifies the group its colour and storage variants belong to. The iPhone 15 128 GB Mavi returned content_id 762254881 and product_group_id 580170099 on 2026-08-27. Sending a product_group_id where a content_id is expected will not resolve, so store both if you are tracking variants.

Why does rating.comment_count not match rating.total_count?

They count different things. comment_count is written reviews; total_count is star ratings, including people who rated without typing anything. The same product returned comment_count 939 against total_count 1986. The reviews action names them more clearly as total_comment_count and total_rating_count, and it also returns total_image_review_count, 259 there, for reviews with photos. Only the written reviews are pageable.

Why do product/detail and product/reviews report slightly different ratings?

They read different surfaces and round differently. On 2026-08-27 detail returned rating.average 4.644511581067472 while reviews returned summary.average_rating 4.6, and the rating totals were one apart, 1986 against 1987, because the counts moved between the two calls. Use detail's average when you need precision, and treat a one-unit drift in the counts as normal for a live marketplace rather than a parsing bug.

Reviews come back empty on page 1. What am I doing wrong?

product/reviews is 0-based: the first page is page 0, then 1, 2 and so on. Everything else in this engine (search, category/products, seller/products) is 1-based, which is what makes it easy to miss. page_size runs 1 to 50 and anything larger is capped at 50, and summary.total_pages is recomputed for whatever page_size you sent, so it is not a constant for the product.

Why is rating null instead of 0 on some search results?

null means nobody has rated the product yet, which is not the same as a rating of zero. In a live laptop search, rows with no feedback returned rating null and comment_count null, while a rated row returned 4.888888888888889 and 9. list_price behaves the same way: it is null with discount_pct 0 when the seller is not showing a struck-through price, rather than repeating the current price. Check for null before doing arithmetic on any of these.

What is in other_offers, and why are the seller names null there?

other_offers lists the competing sellers for the same product. The iPhone 15 above had 17 of them, from 51.999 TL upward. Each entry carries price, price_value and the campaign text attached to that offer, but seller_id, seller_name and seller_score came back null across all of them on 2026-08-27. The main seller block is fully populated: id 968, name "Trendyol", official_name "DSM GRUP DANIŞMANLIK İLETİŞİM VE SATIŞ TİCARET ANONİM ŞİRKETİ", score 9.3. Use other_offers for the price spread and seller/info when you need the merchant behind a specific id.

How do I filter a search by brand?

The brand parameter takes Trendyol's numeric brand id, not the brand name. Sending "LENOVO" does nothing, because the parameter ignores an invalid value and silently drops the filter. Call search/filters with the same query first and read the "Marka" facet: for "laptop" on 2026-08-27 it returned LENOVO 102323 with 28,761 products, HP 101849 with 18,345, ASUS 101606 with 12,959 and MSI 107655 with 7,561. The same call also returns category-specific facets with live counts, such as processor type and graphics card.

What is the Trendyol API?

Trendyol API is a ReefAPI endpoint group for turkish marketplace products, prices and reviews. It returns live JSON through POST requests under /trendyol/v1.

Is the Trendyol API free to try?

Yes. ReefAPI starts with 1,000 free credits, no card required. Trendyol calls use the same shared credit balance as every other ReefAPI engine.

Do I need a Trendyol login or account?

No login to Trendyol is needed for the API response. You call ReefAPI with your x-api-key header, and the playground can run live examples before you create a production key.

How fresh is the Trendyol data?

The page example is captured from a live product/offers call, and production requests fetch live data through ReefAPI rather than a static sample.

How many credits does the Trendyol API use?

Trendyol actions currently cost 1-2 credits per successful call. Failed or blocked calls are free. All APIs draw from one credit pool.

Can I call Trendyol from an AI assistant or MCP client?

Yes. Connect ReefAPI once through MCP and your assistant can call trendyol actions with the same key, credit pool and JSON envelope used by normal REST requests.

docs / trendyol

Trendyol

Turkish marketplace products, prices and reviews.

base /trendyol/v116 endpoints
post/trendyol/v1/product/offers1 credit

Selected seller and published competing seller offers for a product. Selected seller first, then competitors ordered by price. Stock is null where unpublished.

ParameterAllowed / rangeDescription
content_idoptional—Trendyol product ID — the digits after '-p-' in the product URL (…-p-<id>). Take it from search results. Provide content_id OR url.
urloptional—Full Trendyol product URL — alternative to content_id.
limit = 100optional1–100Maximum offers, including selected seller (1-100).
Try in playground →
post/trendyol/v1/product/variants1 credit

Published catalog variants and barcodes. Catalog prices can differ from the selected merchant. selected_offer_price is populated only for the matching selected item_number; other merchant-specific variant prices remain null.

ParameterAllowed / rangeDescription
content_idoptional—Trendyol product ID — the digits after '-p-' in the product URL (…-p-<id>). Take it from search results. Provide content_id OR url.
urloptional—Full Trendyol product URL — alternative to content_id.
Try in playground →
post/trendyol/v1/product/description2 credits

Long product description as HTML, plain text and image URLs. Image-only descriptions are supported. An existing product without a description returns has_description=false. Treat returned HTML as untrusted data before displaying it.

ParameterAllowed / rangeDescription
content_idoptional—Trendyol product ID — the digits after '-p-' in the product URL (…-p-<id>). Take it from search results. Provide content_id OR url.
urloptional—Full Trendyol product URL — alternative to content_id.
Try in playground →
post/trendyol/v1/product/questions1 credit

Published answered product questions, with seller replies and zero-based pagination. total_count describes the returned question collection; content_total_count is a separate broader source summary.

ParameterAllowed / rangeDescription
content_idoptional—Trendyol product ID — the digits after '-p-' in the product URL (…-p-<id>). Take it from search results. Provide content_id OR url.
urloptional—Full Trendyol product URL — alternative to content_id.
page = 0optional0–10000Question page, zero-based.
page_size = 20optional1–50Questions per page (1-50).
Try in playground →
post/trendyol/v1/product/coupons2 credits

Publicly visible coupons for the selected product and seller. Includes discount type, minimum spend, expiry and conditions. Anonymous visibility does not confirm personal eligibility or redemption; coupons are not subtracted from the product price.

ParameterAllowed / rangeDescription
content_idoptional—Trendyol product ID — the digits after '-p-' in the product URL (…-p-<id>). Take it from search results. Provide content_id OR url.
urloptional—Full Trendyol product URL — alternative to content_id.
Try in playground →
post/trendyol/v1/product/detail1 credit

full product by `url` OR `content_id`: title/brand/price(current+list+discount%/coupon/ty+)/campaign(+campaigns[])/rating+comment_count/in_stock/seller(+score)/other_offers[] (EVERY competing seller on the same listing WITH its store id, store name, seller score, price and campaign — seller-level price comparison in this one call)/category/images/attributes(specs)/variants. The dual-use influencer module.

ParameterAllowed / rangeDescription
content_idoptional—Trendyol product ID — the digits after '-p-' in the product URL (…-p-<id>). Take it from search results. Provide content_id OR url.
urloptional—Full Trendyol product URL — alternative to content_id.
Try in playground →
post/trendyol/v1/product/reviews2 credits

Paginated customer reviews by `content_id` OR `url`, in the order you ask for. `sort=newest` returns the most recently posted reviews first and keeps that order across every page, so you can poll a product for new reviews; without `sort` Trendyol returns its own 'recommended' order, which is not chronological. Every page carries the real totals (average rating, how many people rated, how many wrote a comment, star breakdown, total_pages for your page_size) so you know when to stop. Reviewer names are published by Trendyol already masked.

ParameterAllowed / rangeDescription
content_idoptional—Trendyol product ID — the digits after '-p-' in the product URL (…-p-<id>). Take it from search results. Provide content_id OR url.
urloptional—Full Trendyol product URL — alternative to content_id.
page = 0optional0–Review page — 0-BASED (first page = 0, then 1, 2…); summary.total_pages tells you how many exist.
page_size = 30optional1–50Reviews per page (1–50; larger values are capped at 50). summary.total_pages is computed for this page size.
sort = relevantoptionalnewest · oldest · rating_desc · rating_asc · relevantReview ordering. Use `newest` to track the most recent reviews — the order holds across pages, so page 0 is always the freshest. `relevant` (the default) is Trendyol's own 'Önerilen Sıralama' and is NOT chronological. Ordering by date uses each review's last-modified timestamp, which is the field `last_modified` in every row.
Try in playground →
post/trendyol/v1/product/similar1 credit

Trendyol's own 'Benzer Ürünler' recommendation rail for a product, by `content_id` OR `url` — the products Trendyol itself puts in front of a shopper looking at this one, so you get its live view of the competitive set (same category, comparable specs) rather than a keyword guess. Each row is a full product card (price, list price, rating, review count, seller, stock) usable directly for price benchmarking, or feed results[].content_id straight into product/detail. Paginated 0-BASED; meta.pagination.has_more tells you when the rail is exhausted.

ParameterAllowed / rangeDescription
content_idoptional—Trendyol product ID — the digits after '-p-' in the product URL (…-p-<id>). Take it from search results. Provide content_id OR url.
urloptional—Full Trendyol product URL — alternative to content_id.
page = 0optional0–Result page — 0-BASED (first page = 0).
size = 20optional1–40How many similar products (1–40; larger values are capped at 40).
Try in playground →
post/trendyol/v1/search/filters1 credit

Discover the available filter facets for a `query` OR `category_id` before filtering — brands (with ids for the `brand` param), price ranges, product ratings, and category-specific attributes (RAM, screen size, color, …) each with live result counts.

ParameterAllowed / rangeDescription
queryoptional—Search keyword to get facets for (provide query OR category_id).
category_idoptional—Category id (digits after '-c' in a category URL) — alternative to query.
Try in playground →
post/trendyol/v1/category/products2 credits

Browse a Trendyol category by id — best-sellers, newest, or price/brand-filtered product lists. Same card shape as search. Get a category_id from a product's category.id (product/detail) or the '-c<id>' in a category URL.

ParameterAllowed / rangeDescription
category_idoptional—Category id — the digits after '-c' in a category URL (…-x-c<id>), or a product's category.id. Provide category_id OR url.
urloptional—Full Trendyol category URL — alternative to category_id.
page = 1optional1–Result page to start from — 1-BASED (1, 2, 3…), ~24 products/page.
max_pages = 1optional1–10How many consecutive pages to fetch + dedup in one call (1–10, ~24 products/page; larger values are capped at 10).
sortoptionalbest_seller · most_favorite · price_asc · price_desc · newest · most_ratedResult ordering: best_seller · most_favorite · price_asc · price_desc · newest · most_rated. Default = Trendyol relevance.
priceoptional—Price range filter in TRY as 'min-max' (e.g. '5000-15000'). Open-ended like '5000-' also works.
brandoptional—Brand-id filter — get valid brand ids from the search/filters action (the 'Marka' facet). Numeric id, not the brand name.
Try in playground →
post/trendyol/v1/seller/products1 credit

All products of a Trendyol seller/store (paginated, sortable, filterable) by seller_id. Same card shape as search. meta.total_count = the seller's full catalog size.

ParameterAllowed / rangeDescription
seller_idoptional—Seller/merchant id — the digits after '-m-' in a store URL (/magaza/…-m-<id>). Get it from seller/info or a product's seller. Provide seller_id OR url.
urloptional—Full Trendyol store URL — alternative to seller_id.
page = 1optional1–Result page to start from — 1-BASED (1, 2, 3…), ~24 products/page.
max_pages = 1optional1–10How many consecutive pages to fetch + dedup in one call (1–10, ~24 products/page; larger values are capped at 10).
sortoptionalbest_seller · most_favorite · price_asc · price_desc · newest · most_ratedResult ordering: best_seller · most_favorite · price_asc · price_desc · newest · most_rated. Default = Trendyol relevance.
priceoptional—Price range filter in TRY as 'min-max' (e.g. '5000-15000'). Open-ended like '5000-' also works.
brandoptional—Brand-id filter — get valid brand ids from the search/filters action (the 'Marka' facet). Numeric id, not the brand name.
Try in playground →
post/trendyol/v1/seller/info1 credit

Trendyol seller/store profile by seller_id: store name, legal entity (official_name), total product_count, seller score, and trust badges.

ParameterAllowed / rangeDescription
seller_idoptional—Seller/merchant id — the digits after '-m-' in a store URL (/magaza/…-m-<id>). Provide seller_id OR url.
urloptional—Full Trendyol store URL — alternative to seller_id.
Try in playground →
post/trendyol/v1/seller/categories1 credit

Trendyol's seller category tree, as used for product uploads: every category with its id, full path and whether it is a leaf (products are uploaded to leaf categories). Filter with `query`; take the id to seller/category-attributes for that category's upload template.

ParameterAllowed / rangeDescription
queryoptional—Case-insensitive text matched against the category name and path.
leaf_only = trueoptional—Only leaf categories (the ones products are uploaded to). Default true.
limit = 200optional1–5000Maximum rows to return (1-5000).
Try in playground →
post/trendyol/v1/seller/category-attributes1 credit

The product upload template of one Trendyol category: every attribute a listing in it takes, whether it is required, whether a custom value is allowed, whether it creates variants (varianter) or splits listings (slicer), and the allowed values.

ParameterAllowed / rangeDescription
category_idrequired—Leaf category id from seller/categories.
Try in playground →
post/trendyol/v1/suggest1 credit

keyword suggestions for a query (ops; search-fallback if suggest API blocked)

ParameterAllowed / rangeDescription
queryrequired—Partial search text to complete.
Try in playground →
Built for volume
5M+ requests a day

Measured at 60 requests a second across the fleet, with no central bottleneck. Volume pricing is on request, and per-key limits are raised for high-volume accounts.

Missing a source?
We build it

Tell us a site we do not cover yet and it becomes an engine. A customer asked for bestprice.gr on a Sunday and it was in the catalog the next day.

Support
2 minute median reply

Median time from a question in the live chat to the first answer, measured across every answered conversation. Setup help included, no support tier to buy.

One key, one balance
Every API included

No per-site plans and no separate subscriptions. One key and one credit pool across the whole catalog, so adding a source costs nothing up front.

Planning something large? Tell us the volume and the sources and we will come back with what it costs and what we would have to build.