Trendyol API

Search Trendyol and read Turkish marketplace prices as JSON

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

no credit card1,000 free credits · instant API key · live in 10 seconds
Missing a Trendyol endpoint, or need a source we don't have yet?Contact us real people · same-day reply.
T
/trendyol/v1

9 active endpoints, on 1 and 2 credit tiers.

  • POST/trendyol/v1/product/detail
  • POST/trendyol/v1/product/reviews
  • POST/trendyol/v1/product/similar
  • POST/trendyol/v1/search
  • POST/trendyol/v1/search/filters
  • POST/trendyol/v1/category/products
  • POST/trendyol/v1/seller/products
  • +2 more

What Trendyol endpoints does ReefAPI ship?

9 live read endpoints. Read-only data API: no writes, no account actions, no dashboard access on the target site.

9 endpoints

product/detail

1 cr

full product by url OR content_id.

required
optional
url, content_id

product/reviews

2 cr

paginated reviews by content_id OR url.

required
optional
content_id, url, page, page_size

product/similar

1 cr

similar/cross-sell products by content_id OR url → results[]{content_id,title,brand,url,price…

required
optional
content_id, url, page, size

search

2 cr

Search Trendyol products by keyword with optional sort & price/brand filters → results[]{cont…

required
query
optional
page, max_pages, sort, price, brand

search/filters

1 cr

Discover the available filter facets for a query OR category_id before filtering.

required
optional
query, category_id

category/products

1 cr

Browse a Trendyol category by id.

required
optional
category_id, url, page, max_pages, sort, price, brand

seller/products

1 cr

All products of a Trendyol seller/store (paginated, sortable, filterable) by seller_id.

required
optional
seller_id, url, page, max_pages, sort, price, brand

seller/info

1 cr

Trendyol seller/store profile by seller_id.

required
optional
seller_id, url

suggest

1 cr

keyword suggestions for a query (ops.

required
query
optional

Every parameter, every allowed value →

Trendyol API

3 of 9 endpoints, ready to run

View docs ↗

The result grid: content_id, title, brand, price in lira as both a string and a number, rating, comment count, category and the free-shipping flag.

2 credits1 required · 4 optional
POST/trendyol/v1/search
ok1226 ms · 24 records · sample
{
  "ok": true,
  "meta": {
    "api": "trendyol",
    "endpoint": "search",
    "mode": "live",
    "latency_ms": 1226.2,
    "record_count": 24,
    "cache_hit": false
  },
  "data": {
    "results": [
      {
        "content_id": 1057359906,
        "product_group_id": 800088750,
        "title": "Ideapad Slim 3 Intel N100 4gb Ram 128GB Ssd 15.6'' 82XB009GTX",
        "brand": "LENOVO",
        "url": "https://www.trendyol.com/lenovo/ideapad-slim-3-intel-n100-4gb-ram-128gb-ssd-15-6-82xb009gtx-p-1057359906?boutiqueId=61&merchantId=106934",
        "category": "Dizüstü Bilgisayar",
        "merchant_id": 106934,
        "image": "https://cdn.dsmcdn.com/mnresize/400/-/ty1796/prod/QC_PREP/20251128/00/c445e0e3-f94c-3187-be8d-8bb0183777a9/1_org_zoom.jpg",
        "price": "17.499 TL",
        "price_value": 17499,
        "list_price": null,
        "list_price_value": null,
        "rating": 4.129116117850953,
        "comment_count": 1154,
        "free_cargo": true,
        "fast_delivery": null,
        "flash_sale": null
      },
      {
        "content_id": 1033173108,
        "product_group_id": 777844229,
        "title": "Aspire Lite Intel Celeron-N4500 8GB 256GB SSD 15.6\" FHD DOS (İşletim Sistemsiz) Laptop NX.J9SEY.001",
        "brand": "ACER",
        "url": "https://www.trendyol.com/acer/aspire-lite-intel-celeron-n4500-8gb-256gb-ssd-15-6-fhd-dos-isletim-sistemsiz-laptop-nx-j9sey-001-p-1033173108?boutiqueId=61&merchantId=880551",
        "category": "Dizüstü Bilgisayar",
        "merchant_id": 880551,
        "image": "https://cdn.dsmcdn.com/mnresize/400/-/ty100003/product/media/images/prod/PIM/20251104/11/0ed7c977-2ddb-4234-a975-60a357d00361/1_org_zoom.jpg",
        "price": "15.099 TL",
        "price_value": 15099,
        "list_price": null,
        "list_price_value": null,
        "rating": 3.08955223880597,
        "comment_count": 67,
        "free_cargo": true,
        "fast_delivery": null,
        "flash_sale": null
      },
      {
        "content_id": 1106012555,
        "product_group_id": 843306878,
        "title": "Vivobook 15 X1504VA-BQ5382W Intel Core 5 120U 8gb 512GB SSD Windows 11 Home 15.6\" Fhd",
        "brand": "ASUS",
        "url": "https://www.trendyol.com/asus/vivobook-15-x1504va-bq5382w-intel-core-5-120u-8gb-512gb-ssd-windows-11-home-15-6-fhd-p-1106012555?boutiqueId=61&merchantId=107204",
        "category": "Dizüstü Bilgisayar",
        "merchant_id": 107204,
        "image": "https://cdn.dsmcdn.com/mnresize/400/-/ty1940/prod/QC_PREP/20260428/11/189bf609-a916-3486-9d4d-d95b742b768f/1_org_zoom.jpg",
        "price": "23.379 TL",
        "price_value": 23379,
        "list_price": null,
        "list_price_value": null,
        "rating": 5,
        "comment_count": 5,
        "free_cargo": true,
        "fast_delivery": null,
        "flash_sale": null
      }
    ],
    "query": "laptop"
  }
}
Real response, fetched from the live endpoint with the parameters on the left — trimmed to the first few rows, with seller names left out. Press Try it for the untrimmed response.

How the Trendyol API works

Trendyol is a normal ReefAPI surface — the same four rules that hold for every other engine on the key.

01
Authenticate
x-api-key header

No OAuth app, no request signing, no per-site account. One key covers all 185 engines.

02
Call
POST /trendyol/v1/…

Every route is a POST with a JSON body. Parameters are validated against the published schema before anything is charged.

03
Pay
1 or 2 credits per call

Credits, not seats. Failed and blocked calls are never charged, and cache hits cost nothing.

04
Read
{ ok, data, meta, error }

One envelope everywhere. meta carries latency_ms, record_count and the endpoint that answered.

One id, and every seller of the same product

Trendyol is a marketplace, so the useful question is rarely 'what does it cost' but 'who else is selling it and for how much'. Detail answers both in one call.

01search
POST/trendyol/v1/search
{"query": "laptop", "page": 1}

Take content_id from a row. De-duplicate as you page — the coverage block explains why.

02detail
POST/trendyol/v1/product/detail
{"content_id": 762254881}

The buy-box price plus other_offers: every competing seller for the same product with its own price and score.

Two credits per product for a full competitive picture. Sellers can also be walked directly: seller/products pages a whole store, and seller/info returns its legal entity name and product count.

request
curl -X POST https://api.reefapi.com/trendyol/v1/search \
  -H "x-api-key: $REEF_KEY" \
  -H "content-type: application/json" \
  -d '{"query":"iphone"}'
response envelope
{
  "ok": true,
  "data": { … },
  "meta": {
    "api": "trendyol",
    "endpoint": "search",
    "mode": "live",
    "latency_ms": …,
    "record_count": …
  },
  "error": null
}

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.

What a Trendyol price row really contains, and the six rows that repeat

Measured on the live marketplace across one query paged from 1 to 30, plus ten repeat calls on three products. Two go against us.

One market: Turkey, lira, on every row

price arrives twice — as the formatted Turkish string and as price_value, a plain number. There is no country parameter to get wrong.

Against us: the list price is mostly absent from search rows

list_price and list_price_value were filled on only 3 of 24 rows on one page. You cannot compute a discount rate from search alone. product/detail carries the full price block — current, list, discount percentage, the coupon price and the loyalty price — so if a discount matters, that is where to read it.

Against us: six of the twenty-four rows are the same on every page

Pages 1, 2, 10 and 30 of one query each returned 24 rows, and the same six product ids appeared on all four. Nothing on those rows marks them as promoted. Walking ten pages with max_pages returned 183 distinct products rather than 240, which is exactly this effect after de-duplication. De-duplicate by content_id and treat the page count as an upper bound, not a total.

Product detail was stable across ten attempts

Three product ids called three times each, plus one call by URL: ten of ten answered with the full price block and the seller. A product id that does not exist answers a clean NOT_FOUND with retryable false, so a dead listing is a row you can close rather than a call you keep repeating.

The discount percentage rounds down and can read zero

On a product priced at 15,099 lira against a list price of 15,149, discount_pct came back 0. The two price numbers are exact; the percentage beside them is a rounded integer. Compute the rate yourself when a fraction of a percent matters.

Reviews carry no reviewer identity

Trendyol masks the reviewer itself: 20 review rows on one product returned either an empty value or a first name with a surname initial, and our published sample drops that field entirely. What comes back with substance is the rating, the text, the date, the seller it was bought from, the verified flag and the review photographs, plus an AI summary of the whole set.

The count is a count, not a promise

meta.total_count reported 81,187 matches for one query. That is Trendyol's own figure for the result set, not the number of rows paging will hand you — the de-duplicated depth measured above is the number to plan against.

What people build with Trendyol

The jobs this data is most often used for.

9

endpoints

1/2

credits per call

01

Pricing teams call search and product/detail to track Trendyol prices, discounts and coupons.

02

Catalog-enrichment tools use product/detail and reviews to fill listings with specs and ratings.

03

Seller-intelligence products use seller/products to audit a competitor's full Trendyol catalog.

What Trendyol data costs

The cheapest call here is 1 credit, so $15/mo (Pro) buys 10,000 of them — $1.50 per 1,000 credits. Credits roll over and never expire, and failed or blocked calls are not charged.

Full pricing →
$0.67–$1.50 / 1,000 credits
  • 1,000 free credits on signup, no card
  • One key, all 185 APIs, one credit pool
  • Failed and blocked calls are never charged
  • Credits roll over and never expire

Call it in two lines

Sign up, get 1,000 credits and one key that works on every engine. Then this is the whole protocol.

curl
curl -X POST https://api.reefapi.com/trendyol/v1/search \
  -H "x-api-key: $REEF_KEY" \
  -H "content-type: application/json" \
  -d '{"query":"iphone"}'
python
import requests

r = requests.post(
    "https://api.reefapi.com/trendyol/v1/search",
    headers={"x-api-key": REEF_KEY},
    json={
  "query": "iphone"
},
)
print(r.json()["data"])
FAQ

Have a question? We got answers.

The questions people actually ask before wiring up Trendyol.

Get a free key →
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/detail 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, and 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.

37 E-commerce & Marketplaces APIs on the same key

One key, one credit pool, one response envelope. If you are pulling Trendyol, you are one call away from the rest of the category — no second contract, no second integration.

Need something this API does not do?

Name the endpoint, the field, or a source we do not carry yet. We ship new APIs every week and you would be first to get the key. Real people read every message and reply the same day.

0/4000

No account needed · we reply from [email protected]

Try it on your own data before you pay anything

The call above is the real endpoint, not a recording. A free key gives you 1,000 credits, the other 184 APIs, and the same envelope everywhere.

Endpoints, parameters and credit costs on this page are read from the live catalog and cannot drift from what the API accepts. Field notes were captured on 2026-08-28.