For the complete documentation index, see llms.txt. This page is also available as Markdown.

Product Update

This tutorial explains how the Product Update process works for the Trendyol integration in the Marketplace Dashboard: which products are picked up, which requests are made to Omnitron and Trendyol (with example data), how the end-to-end process works, and how to read the error codes it produces.

For channel-level setup (feature flags, category mapping, failed integration rules, etc.), see Trendyol Marketplace Setup Configurations tutorial.

This tutorial covers products that are already listed and approved on Trendyol. For products that have never been sent, or that are still waiting for Trendyol's approval, see Product Insert.

What is Product Update?

Product Update keeps the content of products that are already successfully listed on Trendyol in sync with Omnitron — description, images, and attributes. On the Logs screen, this process appears under the flow name Product Update.

When Does It Run?

  • Controlled by the send_products_updated feature flag in the channel settings. When active, it runs automatically every 5 minutes.

  • It can also be triggered manually from the Dashboard screen — a dedicated Product Update option exists in the trigger area, separate from the Product Create (insert) trigger. Alternatively, use "Update Bulk Product Version Date" under Update by Uploading a File in the channel settings to force a specific product to be picked up.

  • Runs are not overlapped: if a previous run of this flow is still in progress when the next 5-minute mark is reached, the new run waits for the running one to finish before it starts.

Which Products Are Eligible?

A product is picked up for update only if it:

  • Is already listed on Trendyol (see Approval Is Required for a Real Success in Product Insert).

  • Has content (description, images, or attributes) that has changed in Omnitron since the last successful sync.

During enrichment the flow also requires the product to already have mapped attributes, a category, and a price record in Omnitron (its value isn't sent by this flow, only its presence is checked) — missing any of these stops the product with the matching error code (see below).

Fetching Changed Products from Omnitron

Products with pending content changes are fetched from Omnitron:

For each product returned, Omnitron is queried again to collect its current mapped attributes, attribute configs, category, and (for validation only) price — the same enrichment step used by Product Insert, minus stock.

Resolving Trendyol's Content ID

Unlike Product Insert, an update needs to tell Trendyol which existing listing to update. The flow first checks whether Trendyol's contentId is already kept on the product:

  • If it is, that value is reused directly.

  • If it isn't, Trendyol is queried for the product by barcode, and the returned contentId is stored on the product so future updates skip this lookup:

If Trendyol doesn't return a contentId for the barcode (e.g. the product was removed from the Trendyol panel), the product stops here with error code 2004.

Sending the Update to Trendyol

Once enriched, the product is converted into Trendyol's product schema and sent as a single request:

Where Each Field Comes From

Payload field
Source
If not mapped / not available

contentId

Trendyol's existing content ID for this listing

— (see Resolving Trendyol's Content ID above; required)

title

Mapped attribute Title

product.name

stockCode

Mapped attribute StockCode

product.sku

productMainId

Mapped attribute RemoteBaseCode

The product's parent product's ID (if it's a variant); if there's no parent, the product's own ID

description

Mapped attribute Description

Empty string ""

dimensionalWeight

Mapped attribute DimensionWeight, then DimensionalWeight

1

currencyType

Mapped attribute CurrencyType

"TRY"

vatRate

Omnitron's tax rate, truncated to a whole number

— (required; the product stops earlier with 2004 if there's no price record at all)

images

The product's images in Omnitron

Only the first 8 are sent — any beyond that are not included

origin

Mapped attribute Menşei

Empty string ""

brandId is also part of the payload but isn't a simple mapped-attribute-or-fallback lookup (it goes through separate brand resolution) — not detailed in this table.

Trendyol matches the item to the existing listing by contentId, updates its content, and processes the request asynchronously, returning a batch ID exactly like Product Insert:

Notice quantity, listPrice, and salePrice are absent from this payload — Product Update never sends them. They are handled entirely by the separate Price and Stock flows mentioned above.

Delivery Duration Sync

Delivery duration is not part of the content-update request above — no deliveryOption field is sent there. It is synced by a separate step that runs right after the main content update completes for that batch.

For every product this flow processes, its ShippingLatency mapped attribute (the same one used at creation time — see Delivery Duration and Other Optional Fields in the Product Insert tutorial) is re-read from Omnitron and sent to Trendyol through a dedicated endpoint:

  • This runs as its own independent asynchronous batch — its own batchRequestId, polled separately (about every 40 seconds) — apart from the main content-update batch above.

  • It only fires for products this flow has already picked up under Which Products Are Eligible? — it is not an independently scheduled sync on its own. If a product's content hasn't changed, changing only its ShippingLatency mapped attribute may not be enough on its own to bring the product into this flow.

  • If a product has no ShippingLatency value mapped, it is simply skipped for this step — other products in the same batch are still processed.

Correction: unlike an earlier version of this page, cargoCompanyId, returningAddressId, and shipmentAddressId are resynced by Product Update — they're included directly in the main content-update payload above (see Where Each Field Comes From) whenever the matching mapped attribute has a value. Delivery duration is the only one of these four "shipping" fields that goes through this separate sync step instead of the main payload.

Checking the Result

The batch result is checked periodically (about every 40 seconds) until Trendyol marks it as completed:

How the Process Works — Summary

  1. Products with content changes are fetched from Omnitron.

  2. Each product is enriched with its mapped attributes, attribute configs, category, and (for validation only) price.

  3. Trendyol's contentId for the product is resolved — reused from Omnitron if already known, otherwise fetched from Trendyol and stored.

  4. Required fields are validated; a product with missing data stops here with the relevant error code (see below).

  5. Valid products are converted into Trendyol's content schema and sent as a single PUT batch request.

  6. The batch result is polled until Trendyol reports it as completed.

  7. In parallel, each product's delivery duration is re-synced to Trendyol through a separate batch request — see Delivery Duration Sync.

  8. The outcome of every product is written back and becomes visible on the Logs screen.

Monitoring

  1. From the left menu, go to Trendyol > Marketplace Operations > Logs.

  2. Filter by flow name Product Update.

  3. Use the SKU or Execution ID filters to locate a specific product.

As with Product Insert, if a log doesn't show a clear error, click the ResponseData box on that log row to see Trendyol's raw response, which contains the real reason for the failure.

Error Codes and Explanations

Code
Meaning

2001

Mapping information did not come from Omnitron — the product has not been mapped through the Mapper.

2002

Attribute configuration information did not come from Omnitron.

2004

Either price information did not come from Omnitron, or Trendyol did not return a contentId for the product's barcode (the two cases share this code).

2005

Category information did not come from Omnitron.

2006

A required attribute or brand value cannot be empty.

2007

An error occurred while posting the product to Trendyol.

2008

The product was sent to Trendyol but came back with a failed result.

2009

The product did not come back with a result from Trendyol.

2015

An unexpected error occurred while preparing the data to be sent to Trendyol.

2016

An unexpected error occurred while checking the data returned from Trendyol.

Products that keep failing are retried according to the channel's Failed Integration settings. If a product stops being retried, it needs to be resent manually via the Update by Uploading Files option in the channel settings.

  • Category Ids and Mapper — determine which categories and attributes products can be mapped to.

  • send_products_updated feature flag — enables/disables the automatic 5-minute run of this process.

  • Failed Integration settings (product key) — control how long and how often failed products are retried.

  • Price and stock have their own separate feature flags and Failed Integration keys (send_updated_product_price / productprice, send_updated_product_stock / productstock) — not covered by this tutorial.

Last updated

Was this helpful?