Build a marketplace-specific product feed
Filter and shape a product set for a specific channel or marketplace using channels and product lists.
Produce a product set scoped to one channel, for example a UK-only feed or a Shopify-specific export, by combining a filtered product list with a channel. This guide covers creating and configuring a channel through the API and connecting it to the right products.
FLAG
Plytix's own roadmap notes describe channels as UI-only, with no API endpoints, and point to an upcoming "Destinations" feature as the API-facing path instead. This project's own live testing found the opposite: GET, POST, PATCH, and DELETE on /channels all work today, with the behavior documented below. Treat this guide as accurate for the current API, but confirm with your Plytix contact whether it should move to Destinations once that feature ships, since this page may need a rewrite at that point.
Prerequisites
- A bearer token. See the Quickstart guide for the authentication flow.
- A product list already built for the audience you're targeting. See "Building a Smart product list" in Core Concepts.
Steps
-
Build the product list your channel will pull from.
A channel doesn't filter products itself. It references a product list, so build that list first:
curl -X POST "https://pim.plytix.com/api/v3/pim-product-lists" \ -H "Authorization: Bearer <access_token>" \ -H "Content-Type: application/json" \ -d '{ "name": "UK Feed", "type": "Smart", "query": [[{"operator": "eq", "field": "attributes.market", "value": "UK"}]] }'Save the returned
id. You'll use it asproduct_list_idin the next step. -
Create the channel.
curl -X POST "https://pim.plytix.com/api/v3/channels" \ -H "Authorization: Bearer <access_token>" \ -H "Content-Type: application/json" \ -d '{ "name": "UK Marketplace Feed", "format": "CSV", "product_list_id": "<product_list_id>" }'nameandformatare the only required fields.product_list_idis what actually connects your filtered products to this channel. The response includes the full created channel, not only its ID, even though some Plytix API documentation describesPOSTas returning only an ID.FLAG
formatisn't a free-text value despite how some API documentation describes it. OnlyCSVandXMLare confirmed to work; other formats weren't independently verified. Test a new format value with a throwaway channel before relying on it. -
Set up a recurring rebuild, if the feed needs to stay current automatically.
curl -X PATCH "https://pim.plytix.com/api/v3/channels/<channel_id>" \ -H "Authorization: Bearer <access_token>" \ -H "Content-Type: application/json" \ -d '{ "rebuild_periodically": true, "rebuild_feed_frequency": "DAILY", "rebuild_feed_hod": 3, "rebuild_feed_moh": 0, "rebuild_feed_timezone": "UTC" }'FLAG
rebuild_periodicallyonly takes effect whenrebuild_feed_frequency,rebuild_feed_hod,rebuild_feed_moh, andrebuild_feed_timezoneare all sent together, as shown above. Sendingrebuild_periodicallyon its own, or with only some of these fields, returns a validation error that doesn't name the missing field. If you get an unexplained validation error on this endpoint, check that all four fields are present before troubleshooting further.FLAG
Some Plytix API documentation describes
PATCHas returning no content (status204). This project consistently found the opposite in live testing:PATCHreturns200with the full updated channel in the response body. -
Confirm the channel picked up the right product list.
curl "https://pim.plytix.com/api/v3/channels/<channel_id>" \ -H "Authorization: Bearer <access_token>"Check that
product_list_idmatches what you sent, and thatrebuild_feed_next_buildshows the schedule you expect.
What you can't do through the API yet
- There's no way to assign products to a channel directly. The only mechanism is
product_list_id, pointing at a product list you build separately, as in steps 1 to 2. If you've read dashboard documentation describing direct product assignment to a channel, that's a UI-only path today. - There's no way to trigger the actual feed build or publish through the API. Creating or updating a channel configures it, but the export file itself is still generated from the dashboard. Flipping
activetotruedoesn't start a build.