{"id":546027,"date":"2026-06-30T11:21:38","date_gmt":"2026-06-30T11:21:38","guid":{"rendered":"https:\/\/webkul.com\/blog\/?p=546027"},"modified":"2026-06-30T12:01:43","modified_gmt":"2026-06-30T12:01:43","slug":"pimcore-prestashop-connector","status":"publish","type":"post","link":"https:\/\/webkul.com\/blog\/pimcore-prestashop-connector\/","title":{"rendered":"Pimcore 12 PrestaShop 9 Connector"},"content":{"rendered":"<p>Keeping a Pimcore catalog and a PrestaShop store aligned by hand doesn&#8217;t scale. The <strong>Pimcore PrestaShop Connector<\/strong> (Pimcore 12 \u2194 PrestaShop 9.x) from Webkul removes the copy-paste.<\/p>\n<p>It bridges your Pimcore data model and your PrestaShop 9 store. Categories, products, manufacturers, custom features and related-product links flow automatically \u2014 in <strong>both directions<\/strong>.<\/p>\n<p>Built natively for <strong>Pimcore 12<\/strong> (Platform 2026.1) and <strong>PrestaShop 9.x<\/strong>, it leads with the right transport. Every catalog operation can ride PrestaShop 9&#8217;s <strong>modern, JSON Admin API over OAuth2<\/strong>.<\/p>\n<p>That&#8217;s the secure, future-proof integration path \u2014 not the deprecated legacy route. The connector authenticates with the client-credentials grant and caches the bearer token.<\/p>\n<p>It drives the <code>\/admin-api\/*<\/code> endpoints for categories, products, features, manufacturers and languages. Webkul has tested it live against <strong>PrestaShop 9.1.3<\/strong>.<\/p>\n<p>It also lives natively inside the <strong>Pimcore Studio UI<\/strong>. Install the <strong>Pimcore PrestaShop Connector<\/strong> and a new nav group appears.<\/p>\n<p>It carries its own screens \u2014 Credentials, Object Mapping, Mapping, Import, Export, Sync Mappings and Job History \u2014 all native Studio tabs.<\/p>\n<p>There&#8217;s no separate tool to host, no middleware to run, and no tab-switching between two admins.<\/p>\n<p>Sometimes PrestaShop 9&#8217;s Admin API genuinely can&#8217;t do something \u2014 assigning features to products, related-product\/accessory links, or product variants.<\/p>\n<p>Creating a manufacturer also hits a known PrestaShop 9.1.3 multistore core bug. For those, the connector reaches for an <strong>isolated legacy Webservice transport<\/strong>, enabled by a single optional API key.<\/p>\n<p>The modern API stays the default for everything else.<\/p>\n<p><img decoding=\"async\" class=\"alignnone size-full wp-image-546051\" src=\"https:\/\/cdnblog.webkul.com\/blog\/wp-content\/uploads\/2026\/06\/pimcore-prestashop9-connector-studio-menu.webp\" alt=\"pimcore-prestashop9-connector-studio-menu\" width=\"1529\" height=\"747\" srcset=\"https:\/\/cdnblog.webkul.com\/blog\/wp-content\/uploads\/2026\/06\/pimcore-prestashop9-connector-studio-menu.webp 1529w, https:\/\/cdnblog.webkul.com\/blog\/wp-content\/uploads\/2026\/06\/pimcore-prestashop9-connector-studio-menu-300x147.webp 300w, https:\/\/cdnblog.webkul.com\/blog\/wp-content\/uploads\/2026\/06\/pimcore-prestashop9-connector-studio-menu-1200x586.webp 1200w, https:\/\/cdnblog.webkul.com\/blog\/wp-content\/uploads\/2026\/06\/pimcore-prestashop9-connector-studio-menu-250x122.webp 250w, https:\/\/cdnblog.webkul.com\/blog\/wp-content\/uploads\/2026\/06\/pimcore-prestashop9-connector-studio-menu-768x375.webp 768w\" sizes=\"(max-width: 1529px) 100vw, 1529px\" loading=\"lazy\" \/><\/p>\n<h2>Pimcore PrestaShop Connector: Key Features<\/h2>\n<ul>\n<li><strong>Bidirectional sync<\/strong> \u2014 import <em>and<\/em> export for Categories, Products, Manufacturers and <strong>product variants (combinations)<\/strong>, plus custom-attribute Features and related-product links.<\/li>\n<li><strong>Modern Admin API first<\/strong> \u2014 connects over PrestaShop 9&#8217;s OAuth2 JSON Admin API (Bearer token), the secure, future-proof path.<\/li>\n<li><strong>Dual-transport, your choice<\/strong> \u2014 configure the OAuth2 Admin API, the legacy Webservice, or <strong>both<\/strong> on one credential (at least one required). Every job auto-routes to a configured API, and a Webservice-only setup can now drive the <strong>full<\/strong> catalog \u2014 both directions.<\/li>\n<li><strong>Product variants (combinations)<\/strong> \u2014 two-way sync of PrestaShop combinations and their axes (Size, Colour, \u2026) as a native Pimcore variant tree. Per-combination price\/weight impact and per-shop stock ride along.<\/li>\n<li><strong>Fine-grained roles &amp; permissions<\/strong> \u2014 per-module <strong>view \/ manage \/ execute<\/strong> access control, enforced server-side. Grant read-only auditors, monitor-only operators, or import-only \/ export-only users.<\/li>\n<li><strong>Asynchronous job engine<\/strong> \u2014 every sync runs as a restartable background job, so it never blocks your screen or times out.<\/li>\n<li><strong>Live job view with cooperative Stop<\/strong> \u2014 per-step progress cards, read\/created\/updated\/skipped\/failed counts, and a clean one-click Stop.<\/li>\n<li><strong>Multi-store &amp; multi-language aware<\/strong> \u2014 each PrestaShop shop \u00d7 language keeps its own names, prices and descriptions, mirroring how PrestaShop stores them.<\/li>\n<li><strong>Fully dynamic mapping<\/strong> \u2014 point each PrestaShop entity at <em>your<\/em> existing Pimcore classes and fields; nothing is hard-coded.<\/li>\n<li><strong>Idempotent, self-healing re-runs<\/strong> \u2014 records update in place instead of duplicating, and re-link by a unique key if the mapping is ever lost.<\/li>\n<li><strong>Pre-flight validation<\/strong> \u2014 misconfigured jobs are blocked up front with a plain-English fix-it message, never half-run.<\/li>\n<li><strong>One-command installer<\/strong> \u2014 a single script detects Docker or bare-metal and wires everything, workers included.<\/li>\n<\/ul>\n<h2>Connecting the Pimcore PrestaShop Connector<\/h2>\n<p>The Pimcore PrestaShop Connector talks to PrestaShop using the modern <strong>Admin API<\/strong> secured with <strong>OAuth2 client credentials<\/strong>. In your PrestaShop back office, go to <strong>Advanced Parameters \u2192 Admin API<\/strong>.<\/p>\n<p>Add a new API Client, choose the scopes the connector needs, and generate a <strong>client secret<\/strong>. That&#8217;s the primary credential \u2014 a <strong>client ID<\/strong> and <strong>client secret<\/strong> against your store&#8217;s host URL.<\/p>\n<p><img decoding=\"async\" class=\"alignnone size-full wp-image-546061\" src=\"https:\/\/cdnblog.webkul.com\/blog\/wp-content\/uploads\/2026\/06\/prestashop9-admin-api-client-2.webp\" alt=\"prestashop9-admin-api-client\" width=\"1529\" height=\"747\" srcset=\"https:\/\/cdnblog.webkul.com\/blog\/wp-content\/uploads\/2026\/06\/prestashop9-admin-api-client-2.webp 1529w, https:\/\/cdnblog.webkul.com\/blog\/wp-content\/uploads\/2026\/06\/prestashop9-admin-api-client-2-300x147.webp 300w, https:\/\/cdnblog.webkul.com\/blog\/wp-content\/uploads\/2026\/06\/prestashop9-admin-api-client-2-1200x586.webp 1200w, https:\/\/cdnblog.webkul.com\/blog\/wp-content\/uploads\/2026\/06\/prestashop9-admin-api-client-2-250x122.webp 250w, https:\/\/cdnblog.webkul.com\/blog\/wp-content\/uploads\/2026\/06\/prestashop9-admin-api-client-2-768x375.webp 768w\" sizes=\"(max-width: 1529px) 100vw, 1529px\" loading=\"lazy\" \/><\/p>\n<p>Behind the scenes the connector POSTs <code>grant_type=client_credentials<\/code> with your client ID, secret and requested scopes to <code>{host}\/admin-api\/access_token<\/code>.<\/p>\n<p>It caches the returned JWT until just before it expires. Then it sends that JWT as a <code>Bearer<\/code> token on every call. The OAuth2 Admin API is the connector&#8217;s <strong>default and preferred<\/strong> transport.<\/p>\n<p>You can also paste a <strong>legacy Webservice API key<\/strong> onto the same credential. The Webservice isn&#8217;t just a fallback any more \u2014 it&#8217;s a <strong>first-class, equal transport<\/strong>.<\/p>\n<p>A credential may carry the OAuth2 Admin API only, the Webservice key only, or <strong>both<\/strong> (at least one is required). Each job <strong>auto-routes<\/strong> to a configured API.<\/p>\n<p>A Webservice-only credential now runs the <strong>entire<\/strong> import\/export catalogue \u2014 categories, products (with images), manufacturers, features and variants \u2014 making zero Admin-API calls.<\/p>\n<p>When both are configured, the connector prefers the modern Admin API. A few operations the Admin API simply can&#8217;t do always ride the Webservice (more on that below).<\/p>\n<blockquote><p>Note: PrestaShop 9 enforces HTTPS on the Admin API in production, so point the connector at your store&#8217;s secure host URL.<\/p><\/blockquote>\n<h2>Installing the Pimcore PrestaShop Connector<\/h2>\n<p>Standing the Pimcore PrestaShop Connector up is a single command:<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"\">bash src\/Webkul\/PrestaShopConnectorBundle\/install\/config.sh<\/pre>\n<p>The script is idempotent and environment-aware. It auto-detects your PHP runtime \u2014 a running Docker <code>php<\/code> service, otherwise local PHP.<\/p>\n<p>The script then adds the <code>Webkul\\<\/code> PSR-4 entry and registers the bundle in <code>config\/bundles.php<\/code> (both skipped if already present).<\/p>\n<p>Next comes the install itself: cache split \u2192 bundle install \u2192 DataObject classes rebuild, creating the connector&#8217;s tables, permissions and classes.<\/p>\n<p>Then it <strong>auto-configures one Symfony Messenger supervisor worker per job queue<\/strong> \u2014 <code>prestashop_import<\/code> and <code>prestashop_export<\/code> \u2014 across <strong>both<\/strong> Docker and bare-metal setups.<\/p>\n<p><img decoding=\"async\" class=\"alignnone size-full wp-image-546063\" src=\"https:\/\/cdnblog.webkul.com\/blog\/wp-content\/uploads\/2026\/06\/pimcore-prestashop9-connector-install.webp\" alt=\"pimcore-prestashop9-connector-install\" width=\"1532\" height=\"728\" srcset=\"https:\/\/cdnblog.webkul.com\/blog\/wp-content\/uploads\/2026\/06\/pimcore-prestashop9-connector-install.webp 1532w, https:\/\/cdnblog.webkul.com\/blog\/wp-content\/uploads\/2026\/06\/pimcore-prestashop9-connector-install-300x143.webp 300w, https:\/\/cdnblog.webkul.com\/blog\/wp-content\/uploads\/2026\/06\/pimcore-prestashop9-connector-install-1200x570.webp 1200w, https:\/\/cdnblog.webkul.com\/blog\/wp-content\/uploads\/2026\/06\/pimcore-prestashop9-connector-install-250x119.webp 250w, https:\/\/cdnblog.webkul.com\/blog\/wp-content\/uploads\/2026\/06\/pimcore-prestashop9-connector-install-768x365.webp 768w\" sizes=\"(max-width: 1532px) 100vw, 1532px\" loading=\"lazy\" \/><\/p>\n<p>Because jobs run asynchronously on durable doctrine-backed queues, those workers are what drain the queue \u2014 and the installer sets them up for you so the first sync just works.<\/p>\n<h2>Setting Up the Pimcore PrestaShop Connector in Studio<\/h2>\n<p>In Pimcore, open <strong>PrestaShop Connector \u2192 Credentials<\/strong> and click <strong>New credential<\/strong>. Enter a name, your store&#8217;s host URL, and the OAuth2 client ID and secret from PrestaShop.<\/p>\n<p>The <strong>Scopes<\/strong> field arrives <strong>pre-filled<\/strong> with every scope the connector needs across its jobs \u2014 category read\/write, product read\/write, manufacturer read\/write, feature read\/write, and so on.<\/p>\n<p>A guided, free-typeable picker backs it with the full PrestaShop scope catalog. Nothing is missed, so the first sync just works.<\/p>\n<p><img decoding=\"async\" class=\"alignnone size-full wp-image-546065\" src=\"https:\/\/cdnblog.webkul.com\/blog\/wp-content\/uploads\/2026\/06\/pimcore-prestashop9-connector-new-credential.webp\" alt=\"pimcore-prestashop9-connector-new-credential\" width=\"1529\" height=\"747\" srcset=\"https:\/\/cdnblog.webkul.com\/blog\/wp-content\/uploads\/2026\/06\/pimcore-prestashop9-connector-new-credential.webp 1529w, https:\/\/cdnblog.webkul.com\/blog\/wp-content\/uploads\/2026\/06\/pimcore-prestashop9-connector-new-credential-300x147.webp 300w, https:\/\/cdnblog.webkul.com\/blog\/wp-content\/uploads\/2026\/06\/pimcore-prestashop9-connector-new-credential-1200x586.webp 1200w, https:\/\/cdnblog.webkul.com\/blog\/wp-content\/uploads\/2026\/06\/pimcore-prestashop9-connector-new-credential-250x122.webp 250w, https:\/\/cdnblog.webkul.com\/blog\/wp-content\/uploads\/2026\/06\/pimcore-prestashop9-connector-new-credential-768x375.webp 768w\" sizes=\"(max-width: 1529px) 100vw, 1529px\" loading=\"lazy\" \/><\/p>\n<p>Click <strong>Test connection<\/strong> and the connector acquires a token against <code>{host}\/admin-api\/access_token<\/code>.<\/p>\n<p>It reports a clear inline verdict \u2014 green <strong>Connection succeeded (HTTP 200)<\/strong> when the client ID, secret and scopes check out. No more discovering a typo mid-import.<\/p>\n<p>Test even works on ad-hoc, unsaved form values, so you can verify before you ever save.<\/p>\n<p><img decoding=\"async\" class=\"alignnone size-full wp-image-546067\" src=\"https:\/\/cdnblog.webkul.com\/blog\/wp-content\/uploads\/2026\/06\/pimcore-prestashop9-connector-test-connection.webp\" alt=\"pimcore-prestashop9-connector-test-connection\" width=\"1520\" height=\"755\" srcset=\"https:\/\/cdnblog.webkul.com\/blog\/wp-content\/uploads\/2026\/06\/pimcore-prestashop9-connector-test-connection.webp 1520w, https:\/\/cdnblog.webkul.com\/blog\/wp-content\/uploads\/2026\/06\/pimcore-prestashop9-connector-test-connection-300x149.webp 300w, https:\/\/cdnblog.webkul.com\/blog\/wp-content\/uploads\/2026\/06\/pimcore-prestashop9-connector-test-connection-1200x596.webp 1200w, https:\/\/cdnblog.webkul.com\/blog\/wp-content\/uploads\/2026\/06\/pimcore-prestashop9-connector-test-connection-250x124.webp 250w, https:\/\/cdnblog.webkul.com\/blog\/wp-content\/uploads\/2026\/06\/pimcore-prestashop9-connector-test-connection-768x381.webp 768w\" sizes=\"(max-width: 1520px) 100vw, 1520px\" loading=\"lazy\" \/><\/p>\n<p>Secrets are <strong>write-only<\/strong>: the Credentials list never echoes secret values \u2014 it only shows whether a secret is set.<\/p>\n<p>Editing a credential shows a masked &#8220;saved \u2014 leave blank to keep&#8221; placeholder, so re-saving won&#8217;t accidentally wipe a stored secret.<\/p>\n<p>The connector keeps <strong>exactly one credential active<\/strong> at a time. Activation flips all others off first, then turns the target on.<\/p>\n<p>Even a crash mid-switch leaves zero active credentials \u2014 never two. So you never push to the wrong store by accident. Switch stores or environments with a single <strong>Set active<\/strong> action.<\/p>\n<p><img decoding=\"async\" class=\"alignnone size-full wp-image-546072\" src=\"https:\/\/cdnblog.webkul.com\/blog\/wp-content\/uploads\/2026\/06\/pimcore-prestashop9-connector-credentials-list.webp\" alt=\"pimcore-prestashop9-connector-credentials-list\" width=\"1520\" height=\"755\" srcset=\"https:\/\/cdnblog.webkul.com\/blog\/wp-content\/uploads\/2026\/06\/pimcore-prestashop9-connector-credentials-list.webp 1520w, https:\/\/cdnblog.webkul.com\/blog\/wp-content\/uploads\/2026\/06\/pimcore-prestashop9-connector-credentials-list-300x149.webp 300w, https:\/\/cdnblog.webkul.com\/blog\/wp-content\/uploads\/2026\/06\/pimcore-prestashop9-connector-credentials-list-1200x596.webp 1200w, https:\/\/cdnblog.webkul.com\/blog\/wp-content\/uploads\/2026\/06\/pimcore-prestashop9-connector-credentials-list-250x124.webp 250w, https:\/\/cdnblog.webkul.com\/blog\/wp-content\/uploads\/2026\/06\/pimcore-prestashop9-connector-credentials-list-768x381.webp 768w\" sizes=\"(max-width: 1520px) 100vw, 1520px\" loading=\"lazy\" \/><\/p>\n<h2><\/h2>\n<h2>Object Mapping: the Connector Adapts to Your Catalog<\/h2>\n<p>Most connectors force you into fixed class names. The Pimcore PrestaShop Connector treats <em>&#8220;which Pimcore class is a PrestaShop Product?&#8221;<\/em> as a simple setting.<\/p>\n<p>On the <strong>Object Mapping<\/strong> screen you point each PrestaShop entity \u2014 category, manufacturer, product \u2014 at whatever DataObject classes your team already uses.<\/p>\n<p>Pick from a dropdown of <strong>every class in your install<\/strong>.<\/p>\n<p>The connector resolves the class by name at runtime and references no concrete class of its own, so it adapts to your data model instead of forcing its own.<\/p>\n<p><img decoding=\"async\" class=\"alignnone size-full wp-image-546074\" src=\"https:\/\/cdnblog.webkul.com\/blog\/wp-content\/uploads\/2026\/06\/pimcore-prestashop9-connector-object-mapping.webp\" alt=\"pimcore-prestashop9-connector-object-mapping\" width=\"1520\" height=\"755\" srcset=\"https:\/\/cdnblog.webkul.com\/blog\/wp-content\/uploads\/2026\/06\/pimcore-prestashop9-connector-object-mapping.webp 1520w, https:\/\/cdnblog.webkul.com\/blog\/wp-content\/uploads\/2026\/06\/pimcore-prestashop9-connector-object-mapping-300x149.webp 300w, https:\/\/cdnblog.webkul.com\/blog\/wp-content\/uploads\/2026\/06\/pimcore-prestashop9-connector-object-mapping-1200x596.webp 1200w, https:\/\/cdnblog.webkul.com\/blog\/wp-content\/uploads\/2026\/06\/pimcore-prestashop9-connector-object-mapping-250x124.webp 250w, https:\/\/cdnblog.webkul.com\/blog\/wp-content\/uploads\/2026\/06\/pimcore-prestashop9-connector-object-mapping-768x381.webp 768w\" sizes=\"(max-width: 1520px) 100vw, 1520px\" loading=\"lazy\" \/><\/p>\n<p>It ships with sensible defaults so it works out of the box, and your saved configuration always wins. Object Mapping is the gate for the rest of setup.<\/p>\n<p>Until it&#8217;s saved, the field-mapping tabs stay locked behind a clear &#8220;Object Mapping required&#8221; panel. So you can&#8217;t misconfigure attributes before the class is chosen.<\/p>\n<h2>Store &amp; Language Mapping (Shop \u00d7 Language)<\/h2>\n<p>PrestaShop stores per-shop and per-language data separately \u2014 <code>ps_product<\/code>, <code>ps_product_shop<\/code>, <code>ps_*_lang<\/code>. The connector mirrors that exactly.<\/p>\n<p>On the <strong>Store Mapping<\/strong> tab you map each PrestaShop <strong>shop<\/strong> to a Pimcore channel and pick the <strong>locales<\/strong> and <strong>currency<\/strong> that shop syncs, adding more with <strong>+ Add shop<\/strong>.<\/p>\n<p><img decoding=\"async\" class=\"alignnone size-full wp-image-546077\" src=\"https:\/\/cdnblog.webkul.com\/blog\/wp-content\/uploads\/2026\/06\/pimcore-prestashop9-connector-store-mapping.webp\" alt=\"pimcore-prestashop9-connector-store-mapping\" width=\"1520\" height=\"755\" srcset=\"https:\/\/cdnblog.webkul.com\/blog\/wp-content\/uploads\/2026\/06\/pimcore-prestashop9-connector-store-mapping.webp 1520w, https:\/\/cdnblog.webkul.com\/blog\/wp-content\/uploads\/2026\/06\/pimcore-prestashop9-connector-store-mapping-300x149.webp 300w, https:\/\/cdnblog.webkul.com\/blog\/wp-content\/uploads\/2026\/06\/pimcore-prestashop9-connector-store-mapping-1200x596.webp 1200w, https:\/\/cdnblog.webkul.com\/blog\/wp-content\/uploads\/2026\/06\/pimcore-prestashop9-connector-store-mapping-250x124.webp 250w, https:\/\/cdnblog.webkul.com\/blog\/wp-content\/uploads\/2026\/06\/pimcore-prestashop9-connector-store-mapping-768x381.webp 768w\" sizes=\"(max-width: 1520px) 100vw, 1520px\" loading=\"lazy\" \/><\/p>\n<p>Behind the scenes each shop becomes one item in a <strong>Shop \u00d7 Language<\/strong> store-view FieldCollection grid.<\/p>\n<p>The connector then gives every field a fixed scope \u2014 <strong>global<\/strong> (class root), <strong>shop<\/strong> (per-shop value), or <strong>shop-language<\/strong> (per-shop, per-locale).<\/p>\n<p>So one Pimcore model runs across many storefronts and languages. Each one keeps its own product names, prices and descriptions, exactly the way PrestaShop stores them.<\/p>\n<p>You manage shops and currencies here. PrestaShop 9&#8217;s Admin API exposes languages, but not a shops list or currencies.<\/p>\n<p>So you map them explicitly rather than rely on auto-discovery the API can&#8217;t provide.<\/p>\n<h2>Category Mapping<\/h2>\n<p>On the <strong>Mapping<\/strong> page&#8217;s Category tab you map each standard PrestaShop category field to a Pimcore attribute. Categories sync both ways as a real tree.<\/p>\n<p>Import mirrors PrestaShop&#8217;s hierarchy into Pimcore, parents-first.<\/p>\n<p>Export pushes your Pimcore hierarchy out, also parents-first \u2014 so a child&#8217;s parent always exists before the child, and no category is orphaned.<\/p>\n<p>The connector handles product-to-category membership as its own dedicated step on export. PrestaShop ignores the categories field on a product update.<\/p>\n<p>So the connector reads current membership first, then writes the full set only when it differs.<\/p>\n<h2>Field &amp; Feature Attribute Mapping<\/h2>\n<p>The <strong>Mapping<\/strong> page is a tabbed editor \u2014 Store Mapping, Category Mapping, PrestaShop Field Mapping, and Product Feature Attribute.<\/p>\n<p>Each entity tab lists the standard PrestaShop fields with a Pimcore-attribute dropdown, so you map each one to the right Pimcore attribute without guesswork.<\/p>\n<p>Save stays disabled until Object Mapping is in place, so the configuration can&#8217;t get ahead of itself.<\/p>\n<p><img decoding=\"async\" class=\"alignnone size-full wp-image-546082\" src=\"https:\/\/cdnblog.webkul.com\/blog\/wp-content\/uploads\/2026\/06\/pimcore-prestashop9-connector-field-mapping.webp\" alt=\"pimcore-prestashop9-connector-field-mapping\" width=\"1520\" height=\"755\" srcset=\"https:\/\/cdnblog.webkul.com\/blog\/wp-content\/uploads\/2026\/06\/pimcore-prestashop9-connector-field-mapping.webp 1520w, https:\/\/cdnblog.webkul.com\/blog\/wp-content\/uploads\/2026\/06\/pimcore-prestashop9-connector-field-mapping-300x149.webp 300w, https:\/\/cdnblog.webkul.com\/blog\/wp-content\/uploads\/2026\/06\/pimcore-prestashop9-connector-field-mapping-1200x596.webp 1200w, https:\/\/cdnblog.webkul.com\/blog\/wp-content\/uploads\/2026\/06\/pimcore-prestashop9-connector-field-mapping-250x124.webp 250w, https:\/\/cdnblog.webkul.com\/blog\/wp-content\/uploads\/2026\/06\/pimcore-prestashop9-connector-field-mapping-768x381.webp 768w\" sizes=\"(max-width: 1520px) 100vw, 1520px\" loading=\"lazy\" \/><\/p>\n<p>Beyond the standard fields, the <strong>Product Feature Attribute<\/strong> tab turns any custom <strong>scalar<\/strong> product attribute \u2014 material, warranty, capacity \u2014 into a searchable PrestaShop <strong>Feature<\/strong>.<\/p>\n<p>On export the connector creates one PrestaShop Feature per mapped attribute, creates its predefined values, and then assigns the right value to each product.<\/p>\n<p>That last product\u2194feature assignment step rides the legacy Webservice, so it needs the optional API key.<\/p>\n<p>This Feature sync is export-only and covers scalar, predefined values that apply globally across shops.<\/p>\n<p><img decoding=\"async\" class=\"alignnone size-full wp-image-546084\" src=\"https:\/\/cdnblog.webkul.com\/blog\/wp-content\/uploads\/2026\/06\/pimcore-prestashop9-connector-feature-mapping.webp\" alt=\"pimcore-prestashop9-connector-feature-mapping\" width=\"1520\" height=\"755\" srcset=\"https:\/\/cdnblog.webkul.com\/blog\/wp-content\/uploads\/2026\/06\/pimcore-prestashop9-connector-feature-mapping.webp 1520w, https:\/\/cdnblog.webkul.com\/blog\/wp-content\/uploads\/2026\/06\/pimcore-prestashop9-connector-feature-mapping-300x149.webp 300w, https:\/\/cdnblog.webkul.com\/blog\/wp-content\/uploads\/2026\/06\/pimcore-prestashop9-connector-feature-mapping-1200x596.webp 1200w, https:\/\/cdnblog.webkul.com\/blog\/wp-content\/uploads\/2026\/06\/pimcore-prestashop9-connector-feature-mapping-250x124.webp 250w, https:\/\/cdnblog.webkul.com\/blog\/wp-content\/uploads\/2026\/06\/pimcore-prestashop9-connector-feature-mapping-768x381.webp 768w\" sizes=\"(max-width: 1520px) 100vw, 1520px\" loading=\"lazy\" \/><\/p>\n<h2>Manufacturers \/ Brands<\/h2>\n<p>The connector syncs your <strong>brands<\/strong> both ways. Manufacturer <strong>import<\/strong> uses the modern Admin API. Manufacturer <strong>export<\/strong>, however, runs over the <strong>legacy Webservice<\/strong>.<\/p>\n<p>That&#8217;s deliberate: creating a manufacturer over PrestaShop 9.1.3&#8217;s Admin API hits a documented multistore core bug.<\/p>\n<p>The exporter builds the manufacturer XML \u2014 active flag, name, and localized description, short description and meta fields per language.<\/p>\n<p>It then creates or updates it over the Webservice, matching by name when there&#8217;s no existing mapping. Each product&#8217;s brand link rides along with the product export.<\/p>\n<p><img decoding=\"async\" class=\"alignnone size-full wp-image-546089\" src=\"https:\/\/cdnblog.webkul.com\/blog\/wp-content\/uploads\/2026\/06\/pimcore-prestashop9-connector-manufacturer-export.webp\" alt=\"pimcore-prestashop9-connector-manufacturer-export\" width=\"1520\" height=\"755\" srcset=\"https:\/\/cdnblog.webkul.com\/blog\/wp-content\/uploads\/2026\/06\/pimcore-prestashop9-connector-manufacturer-export.webp 1520w, https:\/\/cdnblog.webkul.com\/blog\/wp-content\/uploads\/2026\/06\/pimcore-prestashop9-connector-manufacturer-export-300x149.webp 300w, https:\/\/cdnblog.webkul.com\/blog\/wp-content\/uploads\/2026\/06\/pimcore-prestashop9-connector-manufacturer-export-1200x596.webp 1200w, https:\/\/cdnblog.webkul.com\/blog\/wp-content\/uploads\/2026\/06\/pimcore-prestashop9-connector-manufacturer-export-250x124.webp 250w, https:\/\/cdnblog.webkul.com\/blog\/wp-content\/uploads\/2026\/06\/pimcore-prestashop9-connector-manufacturer-export-768x381.webp 768w\" sizes=\"(max-width: 1520px) 100vw, 1520px\" loading=\"lazy\" \/><\/p>\n<p>Because manufacturer export needs the Webservice, it requires the optional API key on the credential; without it, the step skips cleanly.<\/p>\n<h2>Related Products (Accessories)<\/h2>\n<p>PrestaShop exposes related-products \/ accessories <strong>nowhere<\/strong> in its modern Admin API \u2014 so this is exactly where the dual-API design earns its keep.<\/p>\n<p>The connector syncs accessories over the legacy Webservice, in both directions:<\/p>\n<ul>\n<li><strong>Import<\/strong> runs as a dedicated step of the product import, reading each product&#8217;s accessories from the Webservice and setting Pimcore&#8217;s related-products field. An empty remote set never wipes links you manage on the Pimcore side.<\/li>\n<li><strong>Export<\/strong> runs as a step of the product export, resolving each product&#8217;s related-products relation to PrestaShop IDs and surgically replacing only the accessories node \u2014 the owner&#8217;s own ID excluded, deduplicated and sorted.<\/li>\n<\/ul>\n<figure><figcaption><img decoding=\"async\" class=\"alignnone size-full wp-image-546093\" src=\"https:\/\/cdnblog.webkul.com\/blog\/wp-content\/uploads\/2026\/06\/pimcore-prestashop9-connector-related-products.webp\" alt=\"pimcore-prestashop9-connector-related-products\" width=\"1520\" height=\"755\" srcset=\"https:\/\/cdnblog.webkul.com\/blog\/wp-content\/uploads\/2026\/06\/pimcore-prestashop9-connector-related-products.webp 1520w, https:\/\/cdnblog.webkul.com\/blog\/wp-content\/uploads\/2026\/06\/pimcore-prestashop9-connector-related-products-300x149.webp 300w, https:\/\/cdnblog.webkul.com\/blog\/wp-content\/uploads\/2026\/06\/pimcore-prestashop9-connector-related-products-1200x596.webp 1200w, https:\/\/cdnblog.webkul.com\/blog\/wp-content\/uploads\/2026\/06\/pimcore-prestashop9-connector-related-products-250x124.webp 250w, https:\/\/cdnblog.webkul.com\/blog\/wp-content\/uploads\/2026\/06\/pimcore-prestashop9-connector-related-products-768x381.webp 768w\" sizes=\"(max-width: 1520px) 100vw, 1520px\" loading=\"lazy\" \/><\/figcaption><\/figure>\n<p>Both directions are idempotent (diff-then-write), directional (owner \u2192 accessory), and gated on the optional Webservice key \u2014 without it, the step skips with a warning rather than failing the job.<\/p>\n<h2>Product Variants (Combinations)<\/h2>\n<p>PrestaShop&#8217;s <strong>combinations<\/strong> \u2014 a t-shirt in Size \u00d7 Colour, a phone in Storage \u00d7 Finish \u2014 are its answer to variant products, and the connector syncs them <strong>both ways<\/strong>.<\/p>\n<p>It&#8217;s the PrestaShop equivalent of a Magento configurable product, modelled the way Pimcore expects: a <strong>native variant tree<\/strong>.<\/p>\n<p>The parent stays one product object, and each combination becomes a <strong>variant child<\/strong> beneath it.<\/p>\n<p>So a product with many combinations is still one product in your catalogue \u2014 its variants nested under it, not a separate row each.<\/p>\n<figure><figcaption><img decoding=\"async\" class=\"alignnone size-full wp-image-546098\" src=\"https:\/\/cdnblog.webkul.com\/blog\/wp-content\/uploads\/2026\/06\/pimcore-prestashop9-connector-asset-tree.webp\" alt=\"pimcore-prestashop9-connector-asset-tree\" width=\"316\" height=\"375\" srcset=\"https:\/\/cdnblog.webkul.com\/blog\/wp-content\/uploads\/2026\/06\/pimcore-prestashop9-connector-asset-tree.webp 316w, https:\/\/cdnblog.webkul.com\/blog\/wp-content\/uploads\/2026\/06\/pimcore-prestashop9-connector-asset-tree-253x300.webp 253w, https:\/\/cdnblog.webkul.com\/blog\/wp-content\/uploads\/2026\/06\/pimcore-prestashop9-connector-asset-tree-210x249.webp 210w\" sizes=\"(max-width: 316px) 100vw, 316px\" loading=\"lazy\" \/><\/figcaption><\/figure>\n<p>The <strong>axes<\/strong> come across as first-class objects too. Each attribute group (Size, Colour) and each of its values syncs as its own mapped Pimcore object, idempotently id-mapped.<\/p>\n<p>So the same &#8220;Size \u2192 S\/M\/L&#8221; set is shared cleanly across every product that uses it.<\/p>\n<p>Every variant then carries its <strong>axis tuple<\/strong> (which Size, which Colour it is) plus the per-combination details PrestaShop tracks.<\/p>\n<p>Those details \u2014 <strong>impact on price<\/strong>, <strong>impact on weight<\/strong>, <strong>eco-tax<\/strong>, the <strong>default-combination<\/strong> flag, and <strong>per-shop stock quantity<\/strong> \u2014 all ride along.<\/p>\n<p>Variant sync runs as its own dedicated jobs \u2014 <strong>Product Options Import\/Export<\/strong> for the axes and <strong>Combination Import\/Export<\/strong> for the variants.<\/p>\n<p>Each is visible in the Studio nav and Job History, and each idempotent on re-run.<\/p>\n<p>PrestaShop 9 exposes combination and attribute <em>writes<\/em> only over the Webservice.<\/p>\n<p>So variant <strong>export<\/strong> rides the same isolated Webservice transport as accessories and features, enabled by the optional API key.<\/p>\n<p>Combination <strong>import<\/strong> works over either API. Run the axis job before the combination job, and your full variant matrix lands in PrestaShop \u2014 or in Pimcore \u2014 exactly as configured.<\/p>\n<h2>Image &amp; Media<\/h2>\n<p>A product&#8217;s <strong>cover image<\/strong> (and its thumbnail) comes across automatically as a Pimcore <strong>Asset<\/strong>.<\/p>\n<p>Because PrestaShop serves product images from a separate endpoint, image sync runs as its own clearly-labelled <strong>step<\/strong> on import, so you can watch it distinctly from the data sync.<\/p>\n<p>The connector downloads each image and upserts it as a Pimcore image asset with a deterministic filename. Re-runs hash-compare it, so duplicates never appear.<\/p>\n<p><img decoding=\"async\" class=\"alignnone size-full wp-image-546101\" src=\"https:\/\/cdnblog.webkul.com\/blog\/wp-content\/uploads\/2026\/06\/pimcore-prestashop9-connector-asset-trees.webp\" alt=\"pimcore-prestashop9-connector-asset-trees\" width=\"317\" height=\"754\" srcset=\"https:\/\/cdnblog.webkul.com\/blog\/wp-content\/uploads\/2026\/06\/pimcore-prestashop9-connector-asset-trees.webp 317w, https:\/\/cdnblog.webkul.com\/blog\/wp-content\/uploads\/2026\/06\/pimcore-prestashop9-connector-asset-trees-126x300.webp 126w, https:\/\/cdnblog.webkul.com\/blog\/wp-content\/uploads\/2026\/06\/pimcore-prestashop9-connector-asset-trees-105x249.webp 105w\" sizes=\"(max-width: 317px) 100vw, 317px\" loading=\"lazy\" \/><\/p>\n<p>On export, the connector uploads the product&#8217;s cover image \u2014 and only when the PrestaShop product has no image yet, so re-runs skip rather than re-upload.<\/p>\n<p>Category images are handled automatically on import without a separate request, since their URL is derived from the category ID.<\/p>\n<h2>The Pimcore PrestaShop Connector Dual-API Design<\/h2>\n<p>This is what sets the Pimcore PrestaShop Connector apart. Both transports are <strong>first-class and optional<\/strong>.<\/p>\n<p>Configure the OAuth2 Admin API only, the legacy Webservice only, or both on a single credential \u2014 at least one is required.<\/p>\n<p>They implement the <strong>same shared client contract<\/strong> and return an identical result envelope, so the connector&#8217;s jobs branch uniformly no matter which API answers.<\/p>\n<p>The job never knows how it authenticated \u2014 it just asks for the right transport.<\/p>\n<p>Each job <strong>auto-routes<\/strong> to a configured API, and the connector reached <strong>full Webservice parity<\/strong>.<\/p>\n<p>A Webservice-only credential now runs <strong>every<\/strong> import and export job \u2014 categories, products with images, manufacturers, features and variants \u2014 making <strong>zero<\/strong> Admin-API calls.<\/p>\n<p>When both transports are present, the modern Admin API is preferred. And before a job ever queues, a <strong>pre-flight check<\/strong> confirms the active credential can actually drive it.<\/p>\n<p>So a Webservice-only credential is never asked to do an Admin-only job, and you get a plain-English message instead of a mid-run failure.<\/p>\n<p>A small set of operations are <strong>physically Webservice-only<\/strong>, because PrestaShop 9&#8217;s Admin API has a confirmed gap.<\/p>\n<p>Those are related-products \/ accessories (no Admin resource at all), product-to-feature assignment, and combination and attribute writes (variant export).<\/p>\n<p>Manufacturer create is Webservice-only too \u2014 the PS 9.1.3 multistore core bug.<\/p>\n<p>These always ride the Webservice when the optional key is present and <strong>skip cleanly<\/strong> when it isn&#8217;t.<\/p>\n<p>You get the advanced relationships and variants the modern API can&#8217;t do \u2014 without giving up the modern API for everything else, and without breaking an Admin-API-only setup.<\/p>\n<h2>Watch Every Sync Run Live<\/h2>\n<p>Every transfer \u2014 import or export \u2014 runs as a <strong>background job<\/strong> on a durable queue, so it never ties up your screen or times out a browser tab.<\/p>\n<p>Click <strong>Import<\/strong> or <strong>Export<\/strong> and the Pimcore PrestaShop Connector dispatches the job and immediately opens its live execution-detail tab.<\/p>\n<figure><figcaption><img decoding=\"async\" class=\"alignnone size-full wp-image-546104\" src=\"https:\/\/cdnblog.webkul.com\/blog\/wp-content\/uploads\/2026\/06\/pimcore-prestashop9-connector-job-detail.webp\" alt=\"pimcore-prestashop9-connector-job-detail\" width=\"1533\" height=\"754\" srcset=\"https:\/\/cdnblog.webkul.com\/blog\/wp-content\/uploads\/2026\/06\/pimcore-prestashop9-connector-job-detail.webp 1533w, https:\/\/cdnblog.webkul.com\/blog\/wp-content\/uploads\/2026\/06\/pimcore-prestashop9-connector-job-detail-300x148.webp 300w, https:\/\/cdnblog.webkul.com\/blog\/wp-content\/uploads\/2026\/06\/pimcore-prestashop9-connector-job-detail-1200x590.webp 1200w, https:\/\/cdnblog.webkul.com\/blog\/wp-content\/uploads\/2026\/06\/pimcore-prestashop9-connector-job-detail-250x123.webp 250w, https:\/\/cdnblog.webkul.com\/blog\/wp-content\/uploads\/2026\/06\/pimcore-prestashop9-connector-job-detail-768x378.webp 768w\" sizes=\"(max-width: 1533px) 100vw, 1533px\" loading=\"lazy\" \/><\/figcaption><\/figure>\n<p>The detail view polls every 1.5 seconds. It shows a job-information card (credential, user, status) and one <strong>combined progress bar<\/strong> that only reaches 100% when every step finishes.<\/p>\n<p>Each step gets its own card, with Start\/End\/Duration and Read\/Created\/Updated\/Skipped\/Failed statistics.<\/p>\n<p>A product import, for example, shows side-by-side cards for Product Data Import and Product Image Import. When a Webservice key is configured, a Related Products card joins them.<\/p>\n<p>Any human-readable problems surface on a Warnings &amp; Errors card, e.g. <em>&#8220;category #1 skipped: Cannot edit root category.&#8221;<\/em><\/p>\n<p>Close the tab and the job keeps running. Need to stop one?<\/p>\n<p>The <strong>Stop<\/strong> button ends it <strong>cooperatively<\/strong> \u2014 the engine checks for a stop request at the top of each batch and finishes cleanly between items, so nothing is left half-written.<\/p>\n<p>A single <strong>Job History<\/strong> page lists every run, import and export alike, with <strong>Job Type<\/strong> and <strong>Entity<\/strong> filters.<\/p>\n<p>You see who ran what, with which credential, the status and warning count. Each row drills into the same detail view.<\/p>\n<figure><figcaption><img decoding=\"async\" class=\"alignnone size-full wp-image-546106\" src=\"https:\/\/cdnblog.webkul.com\/blog\/wp-content\/uploads\/2026\/06\/pimcore-prestashop9-connector-job-history.webp\" alt=\"pimcore-prestashop9-connector-job-history\" width=\"1533\" height=\"754\" srcset=\"https:\/\/cdnblog.webkul.com\/blog\/wp-content\/uploads\/2026\/06\/pimcore-prestashop9-connector-job-history.webp 1533w, https:\/\/cdnblog.webkul.com\/blog\/wp-content\/uploads\/2026\/06\/pimcore-prestashop9-connector-job-history-300x148.webp 300w, https:\/\/cdnblog.webkul.com\/blog\/wp-content\/uploads\/2026\/06\/pimcore-prestashop9-connector-job-history-1200x590.webp 1200w, https:\/\/cdnblog.webkul.com\/blog\/wp-content\/uploads\/2026\/06\/pimcore-prestashop9-connector-job-history-250x123.webp 250w, https:\/\/cdnblog.webkul.com\/blog\/wp-content\/uploads\/2026\/06\/pimcore-prestashop9-connector-job-history-768x378.webp 768w\" sizes=\"(max-width: 1533px) 100vw, 1533px\" loading=\"lazy\" \/><\/figcaption><\/figure>\n<h2>Exporting to PrestaShop<\/h2>\n<p>With your mapping saved, open <strong>Export \u2192 Product<\/strong>, optionally narrow scope, and click <strong>Export<\/strong>.<\/p>\n<p>The product export runs as a sequence of distinct, visible stages: <strong>data export<\/strong>, <strong>category membership<\/strong>, <strong>image upload<\/strong>, <strong>feature assignment<\/strong>, and <strong>related-products assignment<\/strong>.<\/p>\n<p>The data step shapes each product into a per-shop payload. It writes that payload once per mapped shop, with localized name, description, price and stock.<\/p>\n<p>A <strong>Product Export filter<\/strong> scopes the <strong>whole<\/strong> job, not just the first step.<\/p>\n<p>Choose <strong>Status<\/strong> \u2014 it defaults to <em>Published only<\/em> as a deliberate safety choice \u2014 and optionally a <strong>Reference<\/strong>-contains or <strong>Name<\/strong>-contains filter.<\/p>\n<p>The reader pins the filter when it lists IDs. So every downstream step only touches in-scope products.<\/p>\n<figure><figcaption><img decoding=\"async\" class=\"alignnone size-full wp-image-546111\" src=\"https:\/\/cdnblog.webkul.com\/blog\/wp-content\/uploads\/2026\/06\/pimcore-prestashop9-connector-export-filter.webp\" alt=\"pimcore-prestashop9-connector-export-filter\" width=\"1533\" height=\"754\" srcset=\"https:\/\/cdnblog.webkul.com\/blog\/wp-content\/uploads\/2026\/06\/pimcore-prestashop9-connector-export-filter.webp 1533w, https:\/\/cdnblog.webkul.com\/blog\/wp-content\/uploads\/2026\/06\/pimcore-prestashop9-connector-export-filter-300x148.webp 300w, https:\/\/cdnblog.webkul.com\/blog\/wp-content\/uploads\/2026\/06\/pimcore-prestashop9-connector-export-filter-1200x590.webp 1200w, https:\/\/cdnblog.webkul.com\/blog\/wp-content\/uploads\/2026\/06\/pimcore-prestashop9-connector-export-filter-250x123.webp 250w, https:\/\/cdnblog.webkul.com\/blog\/wp-content\/uploads\/2026\/06\/pimcore-prestashop9-connector-export-filter-768x378.webp 768w\" sizes=\"(max-width: 1533px) 100vw, 1533px\" loading=\"lazy\" \/><\/figcaption><\/figure>\n<p>Exports are <strong>safe to re-run<\/strong>. The connector treats the ID-mapping as the source of truth.<\/p>\n<p>An existing mapping updates in place; a stored-ID hint re-links and updates; only a genuinely new product is created. So you never end up with duplicates.<\/p>\n<p>Empty or unset values never clear what PrestaShop already has. Their own parents-first job exports categories; a dedicated manufacturer export over the Webservice handles brands.<\/p>\n<h2>Importing from PrestaShop<\/h2>\n<p>Already have a live PrestaShop store? Import it into Pimcore in a few clicks.<\/p>\n<p>The Import section has a page per entity \u2014 <strong>Category Import<\/strong>, <strong>Manufacturer Import<\/strong>, <strong>Product Import<\/strong> \u2014 each showing the active credential as a tag, so you always know which store you&#8217;re pulling from.<\/p>\n<p><img decoding=\"async\" class=\"alignnone size-full wp-image-546114\" src=\"https:\/\/cdnblog.webkul.com\/blog\/wp-content\/uploads\/2026\/06\/pimcore-prestashop9-connector-import-page.webp\" alt=\"pimcore-prestashop9-connector-import-page\" width=\"1533\" height=\"754\" srcset=\"https:\/\/cdnblog.webkul.com\/blog\/wp-content\/uploads\/2026\/06\/pimcore-prestashop9-connector-import-page.webp 1533w, https:\/\/cdnblog.webkul.com\/blog\/wp-content\/uploads\/2026\/06\/pimcore-prestashop9-connector-import-page-300x148.webp 300w, https:\/\/cdnblog.webkul.com\/blog\/wp-content\/uploads\/2026\/06\/pimcore-prestashop9-connector-import-page-1200x590.webp 1200w, https:\/\/cdnblog.webkul.com\/blog\/wp-content\/uploads\/2026\/06\/pimcore-prestashop9-connector-import-page-250x123.webp 250w, https:\/\/cdnblog.webkul.com\/blog\/wp-content\/uploads\/2026\/06\/pimcore-prestashop9-connector-import-page-768x378.webp 768w\" sizes=\"(max-width: 1533px) 100vw, 1533px\" loading=\"lazy\" \/><\/p>\n<p>Product import brings core fields, per-shop and per-language values, and cover\/thumbnail images as a separate step. When a Webservice key is set, it brings related products too.<\/p>\n<p>A <strong>schema-driven filter<\/strong> lets you import only the products you need \u2014 by <strong>enabled<\/strong> status, <strong>reference<\/strong> or <strong>name<\/strong>. The filter pushes down to PrestaShop, so you don&#8217;t pull the whole catalog.<\/p>\n<p>Per-shop, per-language data lands exactly where it belongs: global attributes once, and each shop \u00d7 language value in its own store-view row.<\/p>\n<p>So Pimcore represents a multi-store PrestaShop catalog faithfully.<\/p>\n<p>Import is <strong>additive and idempotent<\/strong>: each run creates what&#8217;s missing and updates what exists.<\/p>\n<p>If the ID-mapping is ever lost, the connector re-links to the matching object by a unique key instead of creating a copy.<\/p>\n<p>When a job finishes, the connector <strong>auto-reindexes<\/strong>.<\/p>\n<p>Your new categories, products, brands and assets appear immediately in the Studio Data Object and Asset trees \u2014 no manual reindex command, no &#8220;where did my data go?&#8221;<\/p>\n<p>Because import and export stay linked by the same mapping, the natural workflow is simple: <strong>import to seed Pimcore, enrich your content there, then export back<\/strong>.<\/p>\n<p>Every change lands on the original PrestaShop record.<\/p>\n<h2>Why the Pimcore PrestaShop Connector Won&#8217;t Break<\/h2>\n<p>Three design choices keep syncs trustworthy on real catalogs:<\/p>\n<ul>\n<li><strong>Pre-flight validation (block, don&#8217;t fail).<\/strong> Before a job is ever queued, the connector checks that Store Mapping is configured for store-view jobs and that the credential carries the OAuth2 scopes the job needs. If something&#8217;s missing, the connector rejects dispatch on the spot with a clear, actionable message \u2014 <em>&#8220;The credential is missing required OAuth2 scope(s): product_write&#8221;<\/em>. A sync never burns through half a catalog before dying on a cryptic API error.<\/li>\n<li><strong>Stuck-job auto-recovery.<\/strong> If a container restarts, a deploy lands, or a worker is OOM-killed mid-sync, the connector automatically unlocks and reprocesses the orphaned work the next time the worker starts. It marks any job that ran impossibly long as failed, with a <em>&#8220;Timed out \u2014 re-run the job&#8221;<\/em> note. No manual queue surgery, no job stuck &#8220;running&#8221; forever. (The installer wires this recovery step into worker startup for both Docker and bare-metal.)<\/li>\n<li><strong>Idempotent, self-healing re-runs.<\/strong> An ID-mapping with match-before-create logic keys every record, mirrored across import and export. Re-run a job as often as you like and the catalog converges to one clean copy \u2014 even if the link table was wiped \u2014 never a pile of duplicate products or categories.<\/li>\n<\/ul>\n<h2>Fine-Grained Roles &amp; Permissions<\/h2>\n<p>Not everyone on the team should be able to push the whole catalogue to your live store.<\/p>\n<p>The Pimcore PrestaShop Connector ships <strong>per-module, role-based access control<\/strong>.<\/p>\n<p>Each area (Credentials, Mapping, Store Mapping, Import, Export, Job History, Sync Mappings) is split into <strong>view \/ manage \/ execute<\/strong> permissions, so you grant exactly what a person needs:<\/p>\n<ul>\n<li>a <strong>read-only auditor<\/strong> who can browse mappings and Job History but change nothing,<\/li>\n<li>a <strong>monitor<\/strong> who can watch running jobs and <strong>stop<\/strong> one, but not start one,<\/li>\n<li>a <strong>mapping editor<\/strong> who configures field mappings but can&#8217;t run a sync,<\/li>\n<li><strong>import-only<\/strong> or <strong>export-only<\/strong> operators \u2014 because importing writes your Pimcore catalogue while exporting writes your live PrestaShop store, and those are different levels of trust.<\/li>\n<\/ul>\n<p>Enforcement is <strong>server-side and fail-closed<\/strong>: every connector API call passes through a single permission chokepoint, and the connector denies anything it hasn&#8217;t explicitly granted.<\/p>\n<p>A forgotten check can never accidentally leave an endpoint open. The Studio UI follows the same rules cosmetically: nav leaves and action buttons a user isn&#8217;t allowed to use simply don&#8217;t render.<\/p>\n<p>Administrators bypass everything, and your <strong>existing setup keeps working<\/strong>.<\/p>\n<p>The connector keeps the older coarse roles as compatibility grants, and a one-command migration fans them out to the new fine-grained keys without locking anyone out.<\/p>\n<p>(Access control is an HTTP-layer control; CLI and worker runs are governed by server access, as usual.)<\/p>\n<h2>The Result in Your PrestaShop Store<\/h2>\n<p>Once an export finishes, your Pimcore data is live in PrestaShop \u2014 structure, fields, features, brands, media and translations included.<\/p>\n<p>Categories appear in <strong>Catalog \u2192 Categories<\/strong> with their hierarchy intact. Products appear in <strong>Catalog \u2192 Products<\/strong> with their category placement, mapped fields, assigned features, brand and cover image.<\/p>\n<p>Switch the shop and language scope in PrestaShop and you&#8217;ll see the matching per-shop, per-locale values from Pimcore.<\/p>\n<p>A single edit in Pimcore Studio propagates cleanly into PrestaShop \u2014 over the modern Admin API for everything it covers, and the isolated Webservice for the rest. It stays consistent on every run.<\/p>\n<h2>Try the Pimcore PrestaShop Connector<\/h2>\n<p>Ready to connect Pimcore 12 and PrestaShop 9? Install the Pimcore PrestaShop Connector with a single command.<\/p>\n<p>Add your Admin API credential, point Object Mapping at your existing classes, and run your first sync \u2014 all from inside Pimcore Studio.<\/p>\n<p>When you&#8217;re ready to roll it out, grab it from the <strong>Webkul Store<\/strong> \u2014 your purchase includes the bundle, documentation, and support.<\/p>\n<p>Have a question or a non-standard setup in mind? Reach out at <strong><a href=\"https:\/\/webkul.uvdesk.com\">webkul.uvdesk.com<\/a><\/strong> and our team will be glad to help.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Keeping a Pimcore catalog and a PrestaShop store aligned by hand doesn&#8217;t scale. The Pimcore PrestaShop Connector (Pimcore 12 \u2194 PrestaShop 9.x) from Webkul removes the copy-paste. It bridges your Pimcore data model and your PrestaShop 9 store. Categories, products, manufacturers, custom features and related-product links flow automatically \u2014 in both directions. Built natively for <a href=\"https:\/\/webkul.com\/blog\/pimcore-prestashop-connector\/\">[&#8230;]<\/a><\/p>\n","protected":false},"author":399,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[8189,1],"tags":[5829,8201,8487],"class_list":["post-546027","post","type-post","status-publish","format-standard","hentry","category-pimcore","category-uncategorized","tag-pim","tag-pimcore","tag-pimcore-ecommerce-connector"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v24.5 - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>Pimcore PrestaShop Connector \u2014 Two-Way Catalog Sync<\/title>\n<meta name=\"description\" content=\"he Pimcore PrestaShop Connector syncs your Pimcore 12 and PrestaShop 9 catalog both ways \u2014 products, variants, brands &amp; features. By Webkul.\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/webkul.com\/blog\/pimcore-prestashop-connector\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Pimcore PrestaShop Connector \u2014 Two-Way Catalog Sync\" \/>\n<meta property=\"og:description\" content=\"he Pimcore PrestaShop Connector syncs your Pimcore 12 and PrestaShop 9 catalog both ways \u2014 products, variants, brands &amp; features. By Webkul.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/webkul.com\/blog\/pimcore-prestashop-connector\/\" \/>\n<meta property=\"og:site_name\" content=\"Webkul Blog\" \/>\n<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/webkul\/\" \/>\n<meta property=\"article:published_time\" content=\"2026-06-30T11:21:38+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2026-06-30T12:01:43+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/webkul.com\/blog\/wp-content\/uploads\/2026\/06\/pimcore-prestashop9-connector-studio-menu.webp\" \/>\n<meta name=\"author\" content=\"Nitesh Arora\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:creator\" content=\"@webkul\" \/>\n<meta name=\"twitter:site\" content=\"@webkul\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Nitesh Arora\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"20 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/webkul.com\/blog\/pimcore-prestashop-connector\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/webkul.com\/blog\/pimcore-prestashop-connector\/\"},\"author\":{\"name\":\"Nitesh Arora\",\"@id\":\"https:\/\/webkul.com\/blog\/#\/schema\/person\/3b0c0c713bd646e411ad5b4563364bb0\"},\"headline\":\"Pimcore 12 PrestaShop 9 Connector\",\"datePublished\":\"2026-06-30T11:21:38+00:00\",\"dateModified\":\"2026-06-30T12:01:43+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/webkul.com\/blog\/pimcore-prestashop-connector\/\"},\"wordCount\":3711,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\/\/webkul.com\/blog\/#organization\"},\"image\":{\"@id\":\"https:\/\/webkul.com\/blog\/pimcore-prestashop-connector\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/webkul.com\/blog\/wp-content\/uploads\/2026\/06\/pimcore-prestashop9-connector-studio-menu.webp\",\"keywords\":[\"pim\",\"Pimcore\",\"Pimcore eCommerce Connector\"],\"articleSection\":[\"PimCore\"],\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/webkul.com\/blog\/pimcore-prestashop-connector\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/webkul.com\/blog\/pimcore-prestashop-connector\/\",\"url\":\"https:\/\/webkul.com\/blog\/pimcore-prestashop-connector\/\",\"name\":\"Pimcore PrestaShop Connector \u2014 Two-Way Catalog Sync\",\"isPartOf\":{\"@id\":\"https:\/\/webkul.com\/blog\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/webkul.com\/blog\/pimcore-prestashop-connector\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/webkul.com\/blog\/pimcore-prestashop-connector\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/webkul.com\/blog\/wp-content\/uploads\/2026\/06\/pimcore-prestashop9-connector-studio-menu.webp\",\"datePublished\":\"2026-06-30T11:21:38+00:00\",\"dateModified\":\"2026-06-30T12:01:43+00:00\",\"description\":\"he Pimcore PrestaShop Connector syncs your Pimcore 12 and PrestaShop 9 catalog both ways \u2014 products, variants, brands & features. By Webkul.\",\"breadcrumb\":{\"@id\":\"https:\/\/webkul.com\/blog\/pimcore-prestashop-connector\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/webkul.com\/blog\/pimcore-prestashop-connector\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/webkul.com\/blog\/pimcore-prestashop-connector\/#primaryimage\",\"url\":\"https:\/\/cdnblog.webkul.com\/blog\/wp-content\/uploads\/2026\/06\/pimcore-prestashop9-connector-studio-menu.webp\",\"contentUrl\":\"https:\/\/cdnblog.webkul.com\/blog\/wp-content\/uploads\/2026\/06\/pimcore-prestashop9-connector-studio-menu.webp\",\"width\":1529,\"height\":747,\"caption\":\"pimcore-prestashop9-connector-studio-menu\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/webkul.com\/blog\/pimcore-prestashop-connector\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/webkul.com\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Pimcore 12 PrestaShop 9 Connector\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/webkul.com\/blog\/#website\",\"url\":\"https:\/\/webkul.com\/blog\/\",\"name\":\"Webkul Blog\",\"description\":\"\",\"publisher\":{\"@id\":\"https:\/\/webkul.com\/blog\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/webkul.com\/blog\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":\"Organization\",\"@id\":\"https:\/\/webkul.com\/blog\/#organization\",\"name\":\"WebKul Software Private Limited\",\"url\":\"https:\/\/webkul.com\/blog\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/webkul.com\/blog\/#\/schema\/logo\/image\/\",\"url\":\"https:\/\/cdnblog.webkul.com\/blog\/wp-content\/uploads\/2021\/08\/webkul-logo-accent-sq.png\",\"contentUrl\":\"https:\/\/cdnblog.webkul.com\/blog\/wp-content\/uploads\/2021\/08\/webkul-logo-accent-sq.png\",\"width\":380,\"height\":380,\"caption\":\"WebKul Software Private Limited\"},\"image\":{\"@id\":\"https:\/\/webkul.com\/blog\/#\/schema\/logo\/image\/\"},\"sameAs\":[\"https:\/\/www.facebook.com\/webkul\/\",\"https:\/\/x.com\/webkul\",\"https:\/\/www.instagram.com\/webkul\/\",\"https:\/\/www.linkedin.com\/company\/webkul\",\"https:\/\/www.youtube.com\/user\/webkul\/\"]},{\"@type\":\"Person\",\"@id\":\"https:\/\/webkul.com\/blog\/#\/schema\/person\/3b0c0c713bd646e411ad5b4563364bb0\",\"name\":\"Nitesh Arora\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/webkul.com\/blog\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/2628caeef979fc167146e3d99675895a39d9ca9c9105fef4b733893fd28a25f5?s=96&d=https%3A%2F%2Fcdnblog.webkul.com%2Fblog%2Fwp-content%2Fuploads%2F2019%2F10%2Fmike.png&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/2628caeef979fc167146e3d99675895a39d9ca9c9105fef4b733893fd28a25f5?s=96&d=https%3A%2F%2Fcdnblog.webkul.com%2Fblog%2Fwp-content%2Fuploads%2F2019%2F10%2Fmike.png&r=g\",\"caption\":\"Nitesh Arora\"},\"url\":\"https:\/\/webkul.com\/blog\/author\/nitesh-arora945\/\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Pimcore PrestaShop Connector \u2014 Two-Way Catalog Sync","description":"he Pimcore PrestaShop Connector syncs your Pimcore 12 and PrestaShop 9 catalog both ways \u2014 products, variants, brands & features. By Webkul.","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/webkul.com\/blog\/pimcore-prestashop-connector\/","og_locale":"en_US","og_type":"article","og_title":"Pimcore PrestaShop Connector \u2014 Two-Way Catalog Sync","og_description":"he Pimcore PrestaShop Connector syncs your Pimcore 12 and PrestaShop 9 catalog both ways \u2014 products, variants, brands & features. By Webkul.","og_url":"https:\/\/webkul.com\/blog\/pimcore-prestashop-connector\/","og_site_name":"Webkul Blog","article_publisher":"https:\/\/www.facebook.com\/webkul\/","article_published_time":"2026-06-30T11:21:38+00:00","article_modified_time":"2026-06-30T12:01:43+00:00","og_image":[{"url":"https:\/\/webkul.com\/blog\/wp-content\/uploads\/2026\/06\/pimcore-prestashop9-connector-studio-menu.webp","type":"","width":"","height":""}],"author":"Nitesh Arora","twitter_card":"summary_large_image","twitter_creator":"@webkul","twitter_site":"@webkul","twitter_misc":{"Written by":"Nitesh Arora","Est. reading time":"20 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/webkul.com\/blog\/pimcore-prestashop-connector\/#article","isPartOf":{"@id":"https:\/\/webkul.com\/blog\/pimcore-prestashop-connector\/"},"author":{"name":"Nitesh Arora","@id":"https:\/\/webkul.com\/blog\/#\/schema\/person\/3b0c0c713bd646e411ad5b4563364bb0"},"headline":"Pimcore 12 PrestaShop 9 Connector","datePublished":"2026-06-30T11:21:38+00:00","dateModified":"2026-06-30T12:01:43+00:00","mainEntityOfPage":{"@id":"https:\/\/webkul.com\/blog\/pimcore-prestashop-connector\/"},"wordCount":3711,"commentCount":0,"publisher":{"@id":"https:\/\/webkul.com\/blog\/#organization"},"image":{"@id":"https:\/\/webkul.com\/blog\/pimcore-prestashop-connector\/#primaryimage"},"thumbnailUrl":"https:\/\/webkul.com\/blog\/wp-content\/uploads\/2026\/06\/pimcore-prestashop9-connector-studio-menu.webp","keywords":["pim","Pimcore","Pimcore eCommerce Connector"],"articleSection":["PimCore"],"inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/webkul.com\/blog\/pimcore-prestashop-connector\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/webkul.com\/blog\/pimcore-prestashop-connector\/","url":"https:\/\/webkul.com\/blog\/pimcore-prestashop-connector\/","name":"Pimcore PrestaShop Connector \u2014 Two-Way Catalog Sync","isPartOf":{"@id":"https:\/\/webkul.com\/blog\/#website"},"primaryImageOfPage":{"@id":"https:\/\/webkul.com\/blog\/pimcore-prestashop-connector\/#primaryimage"},"image":{"@id":"https:\/\/webkul.com\/blog\/pimcore-prestashop-connector\/#primaryimage"},"thumbnailUrl":"https:\/\/webkul.com\/blog\/wp-content\/uploads\/2026\/06\/pimcore-prestashop9-connector-studio-menu.webp","datePublished":"2026-06-30T11:21:38+00:00","dateModified":"2026-06-30T12:01:43+00:00","description":"he Pimcore PrestaShop Connector syncs your Pimcore 12 and PrestaShop 9 catalog both ways \u2014 products, variants, brands & features. By Webkul.","breadcrumb":{"@id":"https:\/\/webkul.com\/blog\/pimcore-prestashop-connector\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/webkul.com\/blog\/pimcore-prestashop-connector\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/webkul.com\/blog\/pimcore-prestashop-connector\/#primaryimage","url":"https:\/\/cdnblog.webkul.com\/blog\/wp-content\/uploads\/2026\/06\/pimcore-prestashop9-connector-studio-menu.webp","contentUrl":"https:\/\/cdnblog.webkul.com\/blog\/wp-content\/uploads\/2026\/06\/pimcore-prestashop9-connector-studio-menu.webp","width":1529,"height":747,"caption":"pimcore-prestashop9-connector-studio-menu"},{"@type":"BreadcrumbList","@id":"https:\/\/webkul.com\/blog\/pimcore-prestashop-connector\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/webkul.com\/blog\/"},{"@type":"ListItem","position":2,"name":"Pimcore 12 PrestaShop 9 Connector"}]},{"@type":"WebSite","@id":"https:\/\/webkul.com\/blog\/#website","url":"https:\/\/webkul.com\/blog\/","name":"Webkul Blog","description":"","publisher":{"@id":"https:\/\/webkul.com\/blog\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/webkul.com\/blog\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Organization","@id":"https:\/\/webkul.com\/blog\/#organization","name":"WebKul Software Private Limited","url":"https:\/\/webkul.com\/blog\/","logo":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/webkul.com\/blog\/#\/schema\/logo\/image\/","url":"https:\/\/cdnblog.webkul.com\/blog\/wp-content\/uploads\/2021\/08\/webkul-logo-accent-sq.png","contentUrl":"https:\/\/cdnblog.webkul.com\/blog\/wp-content\/uploads\/2021\/08\/webkul-logo-accent-sq.png","width":380,"height":380,"caption":"WebKul Software Private Limited"},"image":{"@id":"https:\/\/webkul.com\/blog\/#\/schema\/logo\/image\/"},"sameAs":["https:\/\/www.facebook.com\/webkul\/","https:\/\/x.com\/webkul","https:\/\/www.instagram.com\/webkul\/","https:\/\/www.linkedin.com\/company\/webkul","https:\/\/www.youtube.com\/user\/webkul\/"]},{"@type":"Person","@id":"https:\/\/webkul.com\/blog\/#\/schema\/person\/3b0c0c713bd646e411ad5b4563364bb0","name":"Nitesh Arora","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/webkul.com\/blog\/#\/schema\/person\/image\/","url":"https:\/\/secure.gravatar.com\/avatar\/2628caeef979fc167146e3d99675895a39d9ca9c9105fef4b733893fd28a25f5?s=96&d=https%3A%2F%2Fcdnblog.webkul.com%2Fblog%2Fwp-content%2Fuploads%2F2019%2F10%2Fmike.png&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/2628caeef979fc167146e3d99675895a39d9ca9c9105fef4b733893fd28a25f5?s=96&d=https%3A%2F%2Fcdnblog.webkul.com%2Fblog%2Fwp-content%2Fuploads%2F2019%2F10%2Fmike.png&r=g","caption":"Nitesh Arora"},"url":"https:\/\/webkul.com\/blog\/author\/nitesh-arora945\/"}]}},"amp_enabled":true,"_links":{"self":[{"href":"https:\/\/webkul.com\/blog\/wp-json\/wp\/v2\/posts\/546027","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/webkul.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/webkul.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/webkul.com\/blog\/wp-json\/wp\/v2\/users\/399"}],"replies":[{"embeddable":true,"href":"https:\/\/webkul.com\/blog\/wp-json\/wp\/v2\/comments?post=546027"}],"version-history":[{"count":33,"href":"https:\/\/webkul.com\/blog\/wp-json\/wp\/v2\/posts\/546027\/revisions"}],"predecessor-version":[{"id":546475,"href":"https:\/\/webkul.com\/blog\/wp-json\/wp\/v2\/posts\/546027\/revisions\/546475"}],"wp:attachment":[{"href":"https:\/\/webkul.com\/blog\/wp-json\/wp\/v2\/media?parent=546027"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/webkul.com\/blog\/wp-json\/wp\/v2\/categories?post=546027"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/webkul.com\/blog\/wp-json\/wp\/v2\/tags?post=546027"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}