Sync your ERP with Plytix
Read product data from Plytix, detect changes, and push updates back so your ERP and Plytix stay in sync.
Keep product data consistent between your ERP and Plytix by reading changes from Plytix on a schedule and writing your own changes back through the same API. This guide covers both directions: pulling updates into your ERP, and pushing stock, price, or status changes back to Plytix.
FLAG
Plytix's product team currently recommends v1/v2 for any workflow that creates, updates, or deletes products (ERP write-back, stock updates, price updates, status changes), while v3 write parity is still growing. The v3 endpoints below are confirmed working live today, but confirm with your Plytix contact which version to build against before committing to a production integration. See the "Choosing Between v1/v2 and v3" guide for the current recommendation.
Prerequisites
- A Plytix account with API credentials (an
api_keyandapi_passwordfrom Admin > API). - A way to exchange those credentials for a bearer token. See the Quickstart guide for the full authentication flow.
- A field in your ERP to store each product's Plytix product ID, so you can address a product directly instead of searching by SKU on every call.
Steps
-
Get an access token.
curl -X POST "https://auth.plytix.com/auth/api/get-token" \ -H "Content-Type: application/json" \ -d '{"api_key": "your_api_key", "api_password": "your_api_password"}'The token appears at
data[0].access_tokenand expires after 15 minutes. Request a new one when a call returns401. -
Resolve a product's Plytix ID from its SKU, the first time you see that SKU.
FLAG
GET /products/{identifier}only accepts the Plytix product ID, not the SKU, even though this may not match what you'd expect from a resource where SKU is the natural key, and even though some Plytix API documentation (including a version as recent as September 2026) states that both work. Look up the ID once with a search, then store it.curl -G "https://pim.plytix.com/api/v3/products" \ -H "Authorization: Bearer <access_token>" \ --data-urlencode "sku=BAG-10157" \ --data-urlencode "_fields=id"Store the returned
idalongside the SKU in your ERP so every later call can skip this lookup. -
Read the current product state.
curl "https://pim.plytix.com/api/v3/products/<product_id>" \ -H "Authorization: Bearer <access_token>"The response includes
attributes,category_ids, andthumbnail_idfully resolved, along with aproduct_relationshipsfield for any configured relationships. -
Find what changed since your last sync.
curl -G "https://pim.plytix.com/api/v3/products" \ -H "Authorization: Bearer <access_token>" \ --data-urlencode "created[gt]=2026-09-01" \ --data-urlencode "_fields=id" \ --data-urlencode "_fields=sku"FLAG
This example filters on
created, the only timestamp field independently confirmed to work with the[gt]operator. If you need "modified since," confirm the exact field name for your account before relying on it in production, since it wasn't separately tested.Store the timestamp of each successful sync and reuse it as the next run's filter value.
-
Push a change back to Plytix.
curl -X PATCH "https://pim.plytix.com/api/v3/products/<product_id>" \ -H "Authorization: Bearer <access_token>" \ -H "Content-Type: application/json" \ -d '{"attributes": {"price": 34.99}}'Send only the fields that changed. A
PATCHrequest merges your fields into the existing product rather than replacing it.FLAG
Some Plytix API documentation describes
PATCHas returning no content (status204). This project consistently found the opposite in live testing:PATCHreturns200with the full updated product in the response body, as used in step 7. -
Create a product your ERP has that Plytix doesn't have yet.
curl -X POST "https://pim.plytix.com/api/v3/products" \ -H "Authorization: Bearer <access_token>" \ -H "Content-Type: application/json" \ -d '{"sku": "NEW-SKU-001", "label": "New Product"}'skuis the only required field. Everything else, includingattributesandcategory_ids, can follow in the same request or a laterPATCH. The response includes the full created product, not only its ID, even though some Plytix API documentation describesPOSTas returning only an ID. -
Confirm the write took effect.
Read the product back and compare the fields you sent against the response. A successful
PATCHreturns the full updated product, so you can usually skip this step and check thePATCHresponse directly.
Troubleshooting
- Problem:
POST /productsreturns409 Conflictwith"A product with the same name already exists"-style text.- Solution: The SKU already exists in this account. Look it up with a search instead of creating it again.
- Prevention: Check for an existing SKU before creating, using the lookup in step 2.
- Problem:
GET /products/<sku>returns422instead of the product.- Solution: Use the Plytix product ID, not the SKU, as shown in step 2.